首页 > 其他分享 >drf从入门到飞升仙界 09

drf从入门到飞升仙界 09

时间:2023-02-09 20:34:13浏览次数:137  
标签:base64 仙界 09 jwt 接口 --- token drf

接口文档

# 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值】

 

标签:base64,仙界,09,jwt,接口,---,token,drf
From: https://www.cnblogs.com/juzijunjun/p/17106942.html

相关文章

  • drf(10)jwt
    1接口文档#前后端分离-我们做后端,写接口-前端做前端,根据接口写app,pc,小程序-作为后端来讲,我们很清楚,比如登录接口/api/v1/login/---->post---->us......
  • C/C++单项选择题标准化考试系统[2023-02-09]
    C/C++单项选择题标准化考试系统[2023-02-09](C)3.17单项选择题标准化考试系统【难度系数】5级【任务描述】设计一个单项选择题的考试系统,可实现试题维护、自动组卷等......
  • drf 断点调试,认证权限频率源码分析,基于APIView编写分页,异常处理
    昨日回顾#1认证的使用-有些接口需要登陆后才能访问-原生django如何使用的认证:auth的user表,auth自带了认证-自己登录,使用自定义的用户表-认证......
  • 【230209-4】设m大于等于-1,使方程x^2+2(m-2)x+(m^2-3m+3)=0有两个不相等的实数根x1,x
    ......
  • drf
    今日内容1.接口文档2.jwt介绍和原理3.drf-jwt快速使用4.定制返回格式5.jwt的认证类1.接口文档前后端分离 我们做后端,写接口前端做前端,根据接口写app,pc,小程序......
  • 基于QT实现的影院订票系统[2023-02-09]
    基于QT实现的影院订票系统[2023-02-09](1)订票模块:用户选择影院影片和场次,进行选座购票的操作等。(2)用户模块:用户的登录,修改信息等。(3)影院管理模块:影院负责人对自己影院的......
  • C/C++个人通讯录管理系统[2023-02-09]
    C/C++个人通讯录管理系统[2023-02-09]4.个人通讯录管理系统的设计与实现4.1开发背景各类存储和通信电子产品都带有通讯录的功能,可以对联系人进行简单的信息管理和存储。......
  • C/C++实验设备预约管理系统[2023-02-09]
    C/C++实验设备预约管理系统[2023-02-09]一、实验设备预约管理系统1.设计目标基于c语言技术设计并开发实验设备预约管理系统。2.系统要求1)系统以菜单方式工作,包括系......
  • 前端实习复盘+总结0209
    今天依旧是改bug的一天,总结一下需要注意的地方1:关系到流程的比如这个操作会影响到数据或者状态的改变通俗来讲就是动一发而牵全身 所以在关系到这类操作时我们要考......
  • 基于QT的校园共享平台的设计与实现[2023-02-09]
    基于QT的校园共享平台的设计与实现[2023-02-09]随着经济的迅速发展和科技日新月异的进步,产品更新换代速度越来越快,物价水平持续高升。大学生作为消费者,但其消费水平不高,消......