接口文档

接口文档的作用
    在前后端分离的项目中,我们写完后端后,我们很清楚有哪些接口、属性、编码方式、返回格式等,但是做前端的不清楚,所以就需要我们编写接口文档,将这些东西都写在里面
  
如何编写接口文档
    1.使用word或md编写接口文档
    2.使用第三方平台编写接口文档  如: https://www.showdoc.com.cn/item/index
    3.公司使用第三方开源自己搭建的的接口文档平台
    4.使用drf编写的接口可以自动生成接口文档
        swagger
        coreapi
         
使用coreapi自动生成接口文档步骤
    1.安装
    2.配置路由
        from rest_framework.documentation import include_docs_urls
        path('docs/', include_docs_urls(title='xx项目接口文档')),
    3.在视图类方法上写注释即可
        在类和类的方法上加注释,在序列化类或表模型字段上加help_text,required等
    4.配置文件配置
        REST_FRAMEWORK = {
     		'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',

    	}
    5.访问地址
        http://127.0.0.1:8000/docs

jwt介绍和原理

jwt 即cookie session token, 就是web方向的token使用

JWT由三部分构成
    头
        声明类型,这里时jwt
        声明加密算法,通常直接用HNAC SHA256
        公司信息等
    载荷 payload
        存放有效信息的地方
        过期时间
        签发时间
        用户id
        用户名
        ...
    签名 signature
        前两个部分通过密钥加加密方式得到的
        
JWT的开发重点在于登录接口签发token和认证类jwt认证

base64的编码和解码
    import base64
    import json
    dic = {'name': 'zyg', 'age': 18}
    dic_str = json.dumps(dic)
    # 做base64编码
    res = base64.b64encode(dic_str.encode('utf-8'))
    # base64编码后,字符长度一定是4的倍数,不是用=补齐,=不表示任何数据
    
JWT运行流程
    签发过程
        根据用户名密码在数据库中查到了用户名,且有载荷,那么就会根据加密方式和密钥生成签名
    认证过程
        同样是根据用户输入的信息与载荷生成签名并与之前生成的签名作比较,相同则验证通过,否则验证不通过直接返回

drf-jwt的快速使用

基于django + drf的开发平台有两个模块,jwt和simplejwt
djangorestframework-jwt
djangorestframework-simplejwt
使用步骤
    1.安装模块
    2.快速签发token,在登录接口路由中配置
        path('login/', obtain_jwt_token),
    3.用postman向http://127.0.0.1:8000/login/发送post请求,携带username和password

定制返回格式

1.编写函数jwt_response_payload_handler
    def jwt_response_payload_handler(tpken, user=None, request=None):
        return {
            'code': 100,
            'msg': '登录成功',
            'token': token,
            'username': user.username
        }
    
2.在项目的配置文件中配置
    JWT_AUTH = {
    	'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',  
	}

jwt的认证类

1.在视图类上加认证类和权限类
    authentication_classes = [JSONWebTokenAuthentication]
    permission_classes = [IsAuthenticated]
    
2.postman测试
    请求头中key值为Authorization, value值为jwt + 空格 + token值