• rest_framework之规范详解 00


    (一)接口开发方式比较

    1.1 缺点:如果有10张表,则需要40个url.

    urls.py

    views.py

    缺点:如果有10张表,则需要40个url.    接下来就出现了resrful 规范,比较简洁  

    1.2:resrful 规范(建议)  url简洁了,只有一条。

    1.2.1. 根据method不同做不同的操作,示例:基于FBV:

    urls.py

    views.py

    1.2.2. 根据method不同做不同的操作,示例:基于CBV:  

    urls.py:

    views.py:

    settings.py

    # 添加'rest_framework'到您的INSTALLED_APPS设置:
    INSTALLED_APPS = [
        ...
        'rest_framework',
    ]

    运行结果:

    (二)django rest framework框架 

      2.1 django rest framework框架的下载

    pip3 install djangorestframework

    2.2 rest_framework使用    

    urls.py

    settings.py

    # 添加'rest_framework'到您的INSTALLED_APPS设置:
    INSTALLED_APPS = [
        ...
        'rest_framework',
    ]

    views.py

    2.3 APIView   View源码分析

    APIView类里面有dispatch方法

    APIView在原有的基础上,多了很多功能。request进行了加工,是一个新的对象。

    请求封装request = self.initialize_request(request, *args, **kwargs)(版本、认证、权限、节流、解析器)

    认证

    如果自己写了用户认证,就找自己的认证方法:

    加注释、initial

    initial

    认证

    request是封装后的对象了,所有user应该去APIView里面找。

    _authenticate  # 循环认证类的所有对象 [BasicAuthentication对象,]。.authenticate方法检查你是否已登入。如果用户没有登入则报错。

    接下来自己定义一个认证方法:必须有authenticate方法:如果用户没有登入,则报错。

    运行结果:url没有传token值,则认证失败

    url传了token,认证成功

     认证流程加注释    

    点击url.py文件的as_view()

    跳转到rest_framework的views.py文件,找到class APIView(View)类里面的dispatch函数

    initial(版本、认证、权限、节流、解析器)

    perform_authentication 实现认证

    from rest_framework.request import Request  方便查询user

    获取认证对象,进行一步步的认证

    认证流程:view  dispach  封装Request  initial:(版本、认证、权限、节流、解析器) perform_authentication 实现认证 user > authenticate方法

    如果认证成功有(token值),request.user则有值。

     总的流程是:

    APIView类
    第一步class OrderView(APIView):点击APIView
    第二步def dispatch(self, request, *args, **kwargs):
    找到self.initial(request, *args, **kwargs),点击initial
    第三步def initial(self, request, *args, **kwargs):
    找到self.perform_authentication(request)(进行认证)
    点击perform_authentication
    第四步def perform_authentication(self, request):
    request.user
    
    Request类
    第五步同上def dispatch(self, request, *args, **kwargs):
    找到request = self.initialize_request(request, *args, **kwargs)
    点击initialize_request
    第六步def initialize_request(self, request, *args, **kwargs):
    找到return Request,点击Request
    第七步class Request(object):
    找到    @property    def user(self):(获取认证对象,进行一步步认证)
    找到return self._user   
    第八步还是@property    def user(self):里面
    找到self._authenticate()点击_authenticate
    第九步def _authenticate(self): (循环所有对象,执行认证方法)
    
    Authtication自定义认证类(自己写了认证方法,就用自己的)
    第十步def authenticate(self, request):
    报错:(返回元祖(user对象,token对象))
    
    class OrderView(APIView):或class AuthView(APIView):等订单
    第十一步执行各个订单的def post:  或def get:等方法
  • 相关阅读:
    项目三.
    项目二
    项目一.
    第三季-第27课-Shell脚本高级编程
    第三季-第26课-守护进程设计
    第三季-第26课-网络并发服务器设计
    第三季-第25课-UDP通讯程序设计
    刷新页面
    css让超出文字省略号
    css3 背景透明
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9212713.html
Copyright © 2020-2023  润新知