drf从入门到飞升仙界 09

接口文档

复制代码
# 1.前后端分离 
   - 后端:写接口
   - 前端:根据接口写app,小程序,pc端

# 2.作为后端开发
   - 我们应该清楚:
        ---> /api/v1/login/ 
        ---> 登录接口使用post请求访问 
        ---> username,password   编码格式应该是json
        ---> 返回的格式 {code:100,msg:登录成功}、    
        ---> 后端人员,接口写完后一定要写接口文档

# 3.接口文档的编写
    - 1.使用word,md编写接口文档
    - 2.使用第三方平台,编写我们的接口文档【有免费,也有收费】
        ---> https://www.showdoc.com.cn/item/index
    - 3.公司自己使用第三方开源搭建的【Yapi,也可自行搭建】
        ---> https://zhuanlan.zhihu.com/p/366025001
    - 4.使用drf编写的接口,可以自动生成接口文档
        --->1.swagger :    drf-yasg【官方推荐使用,为drf分支】 Topics-->D..your API
        --->2.coreapi


# 4.使用coreapi自动生成接口文档步骤
    - 1.安装
pip install coreapi
- 2.配置路由 from rest_framework.documentation import include_docs_urls urlpatterns = [ 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 # 5.接口文档需要有的东西 - 1.描述 - 2.地址 - 3.请求方式 - 4.请求编码格式 - 5.请求数据详解(必填,类型) - 6.返回格式案例 - 7.返回数据字段解释 - 8.错误码
复制代码

jwt介绍和原理

JWT使用流程

 

 

 

复制代码
# cookie,session,token的发展史
   - cookie+session认证时期
   - token认证时期
# Json web Token
   - web方向Token的方式
# jwt开发的重点
   - 登录接口  ---> 签发token
   - 认证类     ---> jwt认证
# 1.JWT的构成:
   - 1.三部分,各部分之间用 . 分割
      """     
      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
      """
   --> 头:   header
      - 声明类型:这是jwt
      - 声明这是加密的算法:通常直接使用 HMAC SHA256
      - 公司信息
   --> 荷载:payload
      - 存放有效信息的地方
      - 过期时间
      - 签发时间
      - 用户I
      - 用户名字
   --> 签名:signature
      - 第一部分和第二部分通过密钥+加密方式得到的
   - 2.base64编码使用
      import base64
      import json

      dic = {'user_id':1,'username':"lqz"}
      dic_str = json.dumps(dic)
      # 编码
      res = base64.b64encode(dic_str.encode('utf-8'))
      print(res)
      # 解码
      # base64编码后,字符长度一定是4的倍数,如果不是,则使用=补齐
      res = base64.b64decode('eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogImxxeiJ9')
      print(res)

# 2.base64应用场景
      - 1.jwt 使用了base64
      - 2.网络中传输数据,也会经常使用 base64编码
      - 3.网络传输中,有的图片使用base64编码

# 3.base64传输图片
      s='编码后的图片编码'
      res=base64.b64decode(s)  
      with open('a.png','wb') as f:
          f.write(res)
复制代码

drf-jwt快速使用

复制代码
# django+drf 平台开发jwt
   这套有两个模块:
    - 1.djangorestframework-jwt  --->         一直可以用,不再更新
    - 2.djangorestframework-simplejwt ---> 公司用的多
    - 3.自己封装jwt签发和认证
   
# 使用步骤
    - 1.安装
        pip install .....
    - 2.快速签发token---> 登录接口,路由中配置
        from rest_framework_jwt.views import obtain_jwt_token
        # 路由
        path('login/', obtain_jwt_token),
    - 3.postman
         向http://127.0.0.1:8000/login/发送post请求,携带username和password,json格式  
复制代码

定制登录返回格式

复制代码
# 在工作中,如果是基于auth的user表签发的token,就可以不自己写,但是登录接口返回的格式,只有token,不符合公司规范

# 1.使用Django auth的User表自动签发
  - 1.配置setting.py
    import datetime
    JWT_AUTH = {      
        # 自定义认证结果:见下方序列化user和自定义response
          # 如果不自定义,返回的格式是固定的,只有token字段
        'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',  
}
  - 2.写个函数:jwt_response_payload_handler  #utils.py
    from users.ser import UserModelSerializers
    def jwt_response_payload_handler(token, user=None, 
    request=None):
        return {
            'code': 100,
            'msg' : '登录成功',
            'token': token,
            'username': user.username
            }
        }
  - 3.使用postman测试就可以看到返回的格式了
复制代码

jwt的认证类

复制代码
# 以后接口要登录后才能访问的使用
  - 1.在视图类上加一个认证类,一个权限类
class BookView(ViewSetMixin, RetrieveAPIView):
......
# 使用drf-jwt提供的认证类,我们觉得加了他就有登录认证了
# 必须要配合一个权限类,drf提供的权限类 authentication_classes
= [JSONWebTokenAuthentication] permission_classes = [IsAuthenticated] # 登录用户有权限,不登录用户没权限 - 2.postman测试 -请求头中key值叫Authorization -请求头的value值是jwt【有效的token值】
复制代码

 

posted @   橘子菌菌n  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示