drf9

Posted lzjjjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了drf9相关的知识,希望对你有一定的参考价值。

今日内容概要

  • 接口文档
  • jwt介绍和原理
  • drf-jwt快速使用
  • 定制返回格式
  • jwt的认证类

今日内容详细

接口文档

做前后端分离项目的时候 通常需要写接口文档

接口文档如何编写的方式
	1.使用word md等编写接口文档
	2.使用第三方平台 编写我们的接口文档---》通常是收费的
		如:https://www.showdoc.com.cn/item/index
	3.公司自己使用第三方开源的搭建的
		如使用开源的Yapi搭建
		参考:https://zhuanlan.zhihu.com/p/366025001 
	4.使用drf编写接口的时候 可以自动生成接口文档
		有许多方式 swagger drf-yasg和coreapi等

使用coreapi自动生成接口文档步骤

1.安装
	pip3.8 install coreapi
2.配置路由
	from rest_framework.documentation import include_docs_urls
	path(\'docs/\', include_docs_urls(title=\'接口网站的标题\'))
3.在视图类及方法上写注释即可
	在序列化类或者表模型的字段上添加属性 help_text可以在接口网站上给字段写备注
4.配置文件中配置
	REST_FRAMEWORK = 
     		\'DEFAULT_SCHEMA_CLASS\': \'rest_framework.schemas.coreapi.AutoSchema\',
    	
5.访问地址
	http://127.0.0.1:8000/docs/

一个合格的接口文档中应该有的东西
	1.描述
	2.请求方式
	3.请求编码格式
	4.请求数据详解(必填 类型)
	5.返回格式案例
	6.返回数据字段解释
	7.错误码

jwt介绍和简介

Json Web Token 简称jwt 就是指web方向token的使用

jwt由三部分构成 每部分用.分割
示例: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

第一个是头:header
	声明类型
	声明加密的算法
	公司信息等
第二个是荷载:payload
	存放有效信息的地方
	过期时间
	签发时间
	用户id
	用户名字等
第三个是签名:signature
	是第一部分和第二部分通过秘钥通过加密方式得到的

这三部分其实都是通过base64编码的 可以通过解码查看 但是第三部分是看不懂的
import base64
import json

dic=\'user_id\':1,\'username\':"lqz"
# 需要先转换成字符串的形式
dic_str=json.dumps(dic)

#把这个字符串使用base64编码 并且要先将字符串转成二进制
res=base64.b64encode(dic_str.encode(\'utf-8\'))
print(res) 

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

drf-jwt的快速使用

基于django+drf平台开发jwt有两个模块
	djangorestframework-jwt
	djangorestframework-simplejwt
	或者自己封装jwt签发和认证

djangorestframework-jwt的使用步骤	是基于auth user表的不是自定义用户表
1.安装
	pip3.8 install djangorestframework-jwt
2.快速签发token
	from rest_framework_jwt.views import obtain_jwt_token
	path(\'login/\', obtain_jwt_token)
	只需要写着两句 它就会自动写好登陆接口
3.向http://127.0.0.1:8000/login/发送post请求,携带username和password

定制返回格式

如果是基于auth的user表签发token那么就可以不自己写 但是它返回的格式可能不符合我们的要去 所以需要做修改

只需要编写一个函数即可
def jwt_response_payload_handler(token, user=None, request=None):
    return 
        \'code\': 100,
        \'msg\': \'登录成功\',
        \'token\': token,
        \'username\': user.username
    
在配置文件中配置
JWT_AUTH = 
    	\'JWT_RESPONSE_PAYLOAD_HANDLER\': \'app01.utils.jwt_response_payload_handler\',  
	

jwt的认证类

之后的接口如果想要登陆才能够访问 那么就需要使用它的认证类和权限类

# 导入认证类
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
# 导入权限类
from rest_framework.permissions import IsAuthenticated
加在视图类上

请求的时候在请求头上加一个键值对即可
	请求头中key值	Authorization
	请求头的value值  jwt 有效的token值

以上是关于drf9的主要内容,如果未能解决你的问题,请参考以下文章