python-django rest framework框架

1.API 接口  是什么,干什么用的?

            API简单的来说就是一个url
       - http://www.oldboyedu.com/get_user/ - http://www.oldboyedu.com/get_users/ 两个用途: - 为别人提供服务 - 前后端分离
              为什么要做前后端分离:
                  解耦
                  把前端分离出来,可以用前端框架,开发起来非常快
                  一个后端程序可以给多个客户端服务       

2. restful是什么

            - 表征状态转移
            - 面向资源编程,对互联网上的任意东西都视为资源。
                - http://www.oldboyedu.com/get_user/
                - http://www.oldboyedu.com/get_img/1.png

3.普通的api与 restful api 的区别

普通API:  接口太多
    姑娘列表:
        http://www.oldboyedu.com/get_girls/
        http://www.oldboyedu.com/add_girl/
        http://www.oldboyedu.com/del_girl/1/
        http://www.oldboyedu.com/update_girl/1/
    
restful api:
    姑娘列表:
        http://www.oldboyedu.com/girls/
        GET: 获取
        POST: 添加
        PUT: 更新
        DELETE:删除

4. restful api 规范:  对请求有一个约定 ,遵循更好,不遵循也能用

    - URL
        api.sssss.com   有跨域的问题,因为不同源
        http://www.sssss.com/api
    - url名词
    视网络上任何东西都是资源,均使用名词表示(可复数)
    •   https://api.example.com/v1/zoos
    •   https://api.example.com/v1/animals
    •   https://api.example.com/v1/employees
- 版本 : 版本更新  http://www.sssss.com/api/v1/
    - 提交方式
        通过请求方式来判断你要做的操作
        method :
            GET      :从服务器取出资源(一项或多项)
            POST    :在服务器新建一个资源
            PUT      :在服务器更新资源(客户端提供改变后的完整资源)
            #PATCH  :在服务器更新资源(客户端提供改变的属性)
            DELETE :从服务器删除资源
    - status : 不同的状态码代表着不同的意思
                部分成功可以用 code来操作:  1001 成功,1002部分成功,1003 全部失败
    - Hypermedia link :看情况而定。可以直接返回json数据,也可以返回 一个url  ,让前端再次放送请求查看具体的信息
    - 错误详细 : 要返回给前端
OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
NO CONTENT - [DELETE]:用户删除数据成功。
INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
常用状态码

5. restful api 的两种方式

    方式一:
        http://www.oldboyedu.com/girls/
        GET: 获取
        POST: 添加
        PUT: 更新
        DELETE:删除

    方式二:
        http://www.oldboyedu.com/girls/
            - 姑娘列表
        http://www.oldboyedu.com/girl/1/
            - 单独一个

6.基于Django做API
    - FBV

---urls
from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r'^users/', views.users),
    url(r'^user/(\d+)', views.user),
]


---views
from django.shortcuts import render,HttpResponse
import json

def users(request):
    response = {'code':1000,'data':None}
    response['data'] = [
        {'name':'盛松','age':19},
        {'name':'鲁宁','age':20},
        {'name':'解析博','age':5},
    ]
    return HttpResponse(json.dumps(response),status=200)

def user(request,pk):
    if request.method == "GET":
        return HttpResponse(json.dumps({'name':'盛松','age':19}))
    elif request.method == "POST":
        return HttpResponse(json.dumps({'code':1111}))
    elif request.method == "PUT":
        pass
    elif request.method == "DELETE":
        pass
View Code

    - CBV
        至于为什么不直接用原始的django CBV做api,就是因为它的dispatch方法功能太少了,许多功能需要自己开发。

---urls
urlpatterns = [
    url(r'^users', Users.as_view()),
]

---views
from django.views import View
from django.http import JsonResponse
 
class Users(View):
    def get(self, request, *args, **kwargs):
        result = {
            'status': True,
            'data': 'response data'
        }
        return JsonResponse(result, status=200)
 
    def post(self, request, *args, **kwargs):
        result = {
            'status': True,
            'data': 'response data'
        }
        return JsonResponse(result, status=200) 
View Code

 

posted @ 2018-02-05 15:49  Cool·  阅读(2644)  评论(0编辑  收藏  举报