REST framework框架的基本组件

登录

urls.py

    url(r'^login/$', views.LoginView.as_view(),name="login"),

view.py

class LoginView(APIView):
    authentication_classes = []
    def post(self,request):
        name=request.data.get("name")
        pwd=request.data.get("pwd")
        user=User.objects.filter(name=name,pwd=pwd).first()
        res = {"state_code": 1000, "msg": None}
        if user:
            random_str=get_random_str(user.name)
            token=Token.objects.update_or_create(user=user,defaults={"token":random_str})
            res["token"]=random_str
        else:
            res["state_code"]=1001 #错误状态码
            res["msg"] = "用户名或者密码错误"

        import json
        return Response(json.dumps(res,ensure_ascii=False))

认证

局部认证

全局认证

 权限

 视图

     - 帮助开发者提供了一些类,并在类中提供了多个方法以供我们使用。

路由 

  - 可以通过as_view传参数,根据请求方式不同执行相应的方法
  - 可以在url中设置一个结尾,类似于: .json

解析器 

  - 根据ContentType请求头,选择不同解析器对 请求体中的数据进行解析。

  POST /index/ http1.1. host:11.11.11.11 Content-Type:url-formendo.... user=alex&age=123
  POST /index/ http1.1. host:11.11.11.11 Content-Type:application/json {....}

分页

  根据页码

    http://www.example.com/api/v1/student/?page=1&size=10

  根据索引

    http://www.example.com/api/v1/student/?offset=60&limit=10

  根据加密

    http://www.exmple.com/api/v1/student/?page=erd8

分页思考:

页码越大速度越慢,为什么以及如何解决?
原因:页码越大向后需要扫描的行数越多,因为每次都是从0开始扫描。
解决:
- 限制显示的页数
- 记录当前页数据ID最大值和最小值,再次分页时,根据ID现行筛选,然后再分页。

速率

版本

 序列化

渲染器

原文地址:https://www.cnblogs.com/huay/p/11263414.html