Django框架之drf

一、接口文档

简介:

​ 接口文档通常是在前后端分离时,后端开发人员需要编写的文档,其内容是将接口的信息、地址和使用方法及其他注意事项告知前端开发人员及团队,目的是便于团队间的沟通、协作,降低团队合作成本

接口文档所需内容:

1、描述:
对视图类/函数的功能及用法描述
2、地址:
请求地址(url路由)
3、请求方式:
功能的请求方式(例如:post、get)
4、请求编码格式:
json、form-data、urlencode。。。
5、请求数据类型:(必填)
字段的类型(例如:int、str、list)
6、返回格式案例:
返回的数据的格式案例
7、返回字段解释:
对每个字段的解释
8、错误码:
公司内部定义的错误码

接口文档如何编写

1、使用word、md等文档编辑工具编写

2、使用第三方平台提供的专门用来编写API接口文档的工具(收费)

3、公司使用第三方开源的API接口文档代码搭建一个专门用于公司内部编写接口文档的网站(例如Yapi:-https://zhuanlan.zhihu.com/p/366025001

4、使用Django框架的drf所提供的文档自动生成工具:coreapi(本编文章重点所讲)

二、CoreAPI文档生成器

简介:

​ coreapi是drf框架提供的接口文档自动生成器,它仅限于在drf种使用,可根据我们编写的url路径和视图函数/类自动生成接口文档,支持注释和编辑

安装:

# cmd终端或pycharm中使用pip进行安装
pip3.8 install coreapi -i http://mirrors.aliyun.com/

1、使用方法

第一步:配置路由

# 导入模块:
from rest_framework.documentation import include_docs_urls # 生成路由:
urlpatterns = [
# 后缀名可以自定义,title为接口文档标题
path('docs/', include_docs_urls(title='xxx项目接口文档')),
]

第二步:在视图层的视图类代码下编写注释

# 在视图类代码下编写注释
class BookView(ModelViewSet):
'''
list:查询所有图书
create:新增图书
retrieve:查询单个图书
update:更新图书
destroy:删除图书
'''
pass

第三步:在项目配置文件中进行配置

REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}

第四步:字段的注释及约束

help_text:字段名的注释

required:限制字段能不能为空(true/false)

# 方式一: 在模型表上添加
class Book(models.Model):
name = models.CharField(max_length=32, help_text='书名')
price = models.CharField(max_length=32, help_text='价格')
author = models.ManyToManyField(to='Author', help_text='作者') # 方式二:序列化类中添加(优先级高于模型表)
class BookSerializer(serializers.ModelSerializer):
model = Book
# 序列化的字段
fields = ['pk', 'name']
# 字段校验条件
extra_kwargs = {
'name': {'max_length': 32, 'help_text': '书名'}
}
# 在外部编写优先级高于extra_kwargs
name = serializers.CharField(help_text='书名', required=False)

三、JWT

1、JWT原理及介绍

简介:

​ Json web token(JWT),就是web方向token的使用,它是在cookie、session和token中提升出来的技术,用于用户认证和签发。

​ JWP由三部分组成:头部(header)、荷载(payload)、签名(signature)

  • 头:header(存放基本信息的地方)

    • 声明类型、声明加密类型、公司信息
# 完整头部信息(json格式)
{
'typ': 'JWT',
'alg': 'HS256'
} # 将头部进行base64加密(该加密是可以对称解密的),构成了第一部分
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
  • 荷载:payload(存放有效信息(或用户信息)

    • 过期时间、签发时间、用户ID、用户名字
# 荷载部分信息示例:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
} # 进行base64加密,得到JWT的第二部分
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
  • 签名:signature

    • 这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分
# 完整的JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

2、JWP快速使用

模块选择

1、djangorestframework-jwt
# 已经停止维护,但可以用(本次所用) 2、djangorestframework-simplejwt
# 公司使用的较多,用法相对简单

使用步骤

​ djangorestframework-jwt默认自带auth表的登录功能(不用手动再写登录)

1、安装:
pip3.8 install djangorestframework-jwt 2、快速签发token:(配合auth表使用)
path('login/', obtain_jwt_token) # 配置路由 3、向路由发送请求(携带username,password)
http://127.0.0.1:8000/login/

3、定制返回格式

​ 上面我们快速的使用了JWT,发现我们只需要在路由层进行配置就可以快速使用,这是因为jwt内置中已经编写了登录接口,但是返回的数据并不满足规范

定制格式:

1、在app下创建一个专门用于定制返回格式的py文件(jwt_response.py),在文件中写一个函数
def jwt_response_payload_handler(token, user=None, request=None):
return {
'code': 100,
'msg': '登录成功!',
'user':user.username,
'result': token
} 2、在项目文件中进行配置
JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',
} 3、使用postman测试,发现格式配置成功

4、JTW的认证类

第一步:

​ 通过上面的JWT的token的签发,就可以在需要使用认证的类中进行配置,后期在访问该视图时就会对jwt进行对比,验证通过后才能执行视图代码

# 在视图上添加认证类
class BookView(ModelViewSet):
# jtw认证类
authentication_classes = [JSONWebTokenAuthentication]

第二步:

​ 由上发现没有发送token但还是能正常访问配置后的视图,这是因为jwt的认证需要配合drf自带的权限类,【IsAuthenticated】,原因是jtw的认证原理是,如果带了token就会进行校验,校验错误就会被打回,如果没有带token就不会进行校验并直接通过,配合drf自带的权限类后会校验用户是否登录,这时没有登录的用户就会被打回,而校验用户是否登录的方式就从token中获取到登录用户,由此就可以解决用户不带token就能访问视图的问题

class BookView(ModelViewSet):
# jtw认证类
authentication_classes = [JSONWebTokenAuthentication]
# drf自带权限类
permission_classes = [IsAuthenticated]

第三步:

​ jtw的token存放在请求头中以key:value的方式存放,现在带上jwt的token尝试访问访问

  • jwt存放token的格式

    • key:Authorization
    • value:jwt+'空格'+有效的token值
# 请求头中添加键值对:
Authorization:jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImthbmdrYW5nIiwiZXhwIjoxNjc1OTQ4NjQwLCJlbWFpbCI6IiJ9.VbR5d_8ariu8Fj8muAoKhE7Sck3JnsPKe5wcIm-Z0As

Django框架之drf:9、接口文档,coreapi的使用,JWT原理、介绍、快速使用、定制、认证的更多相关文章

  1. [Django REST framework - 自动生成接口文档、分页]

    [Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...

  2. DRF之接口文档以及Xadmin

    1. 自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1.1. 安装依赖 REST ...

  3. SpringBoot整合knife4j框架(可生成离线接口文档),并设置接口请求头token默认值

    功能和swagger类似 官网地址:https://doc.xiaominfo.com/knife4j/ 这个框架可以设置返回字段的描述 引入依赖 <dependency> <gro ...

  4. drf 生成接口文档

    REST framework可以自动帮助我们生成接口文档.接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 REST framewrok生成接口文档 ...

  5. TP框架整合Swagger UI接口文档

    1.下载swagger ui:http://swagger.io/swagger-ui/: 2.在应用目录里新建一个目录xxx:如图 3.解压后把dist目录的所有文件拷贝到新建的目录里面: 4.在新 ...

  6. drf频率源码、自动生成接口文档、JWT

    目录 一.drf频率源码分析 二.自动生成接口文档 1 安装依赖 2 设置接口文档访问路径 3 文档描述说明的定义位置 4 访问接口文档网页 三.JWT 1 JWT基本原理 1.1 header 1. ...

  7. 基于swagger进行接口文档的编写

    0. 前言 近期忙于和各个银行的代收接口联调,根据遇到的问题,对之前编写的接口进行了修改,需求收集和设计接口时想到了方方面面,生产环境下还是会遇到意想不到的问题,好在基本的执行逻辑已确定,因此只是对接 ...

  8. springboot+swagger接口文档企业实践(下)

    目录 1.引言 2. swagger接口过滤 2.1 按包过滤(package) 2.2 按类注解过滤 2.3 按方法注解过滤 2.4 按分组过滤 2.4.1 定义注解ApiVersion 2.4.2 ...

  9. drf框架接口文档

    drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...

  10. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)

    一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...

随机推荐

  1. 记录redis集群连接超时问题及解决方案

    下午同事反馈,某业务场景性能测试过程中,出现异常,提供日志报: Redis command timed out 1. 先看下日志 org.springframework.dao.QueryTimeou ...

  2. KatalonRecorder系列(一):基本使用+XPath元素定位

    一.简介 Katalon Recorder是基于selenium的浏览器插件,支持火狐和chrome.可以录制web上的操作并回放,还能导入导出脚本. 二.安装 可在谷歌商店或者火狐附件组件中搜索并选 ...

  3. 关于Redis的,你了解多少?来看看我的笔记

    Redis 概述 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据 ...

  4. 达梦-DBLINK数据库链接

    aliases: [达梦 DBlink] tags: [数据库,DM,Blog] link: date: 2022-09-06 说明:DM-Oracle指的是在DM中创建链接至Oracle的Dblin ...

  5. WebKit策略:<foreignObject>可用于绘制svg中的html标签,但与<use>搭配不生效

    在<svg>里面可以利用<foreignObject>绘制html标签,原本是我在iconfont采用Font class方式引入svg的无奈之举. 起初的设计是所有icon先 ...

  6. WPF之lognet4的基本使用

    log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文介绍lognet4的基本使用. 第一步:新 ...

  7. Java标准类

    一个标准的类通常要拥有以下四个组成部分 1.所有的成员变量都要使用private关键字修饰 2.为每一个成员变量编写一对儿Getter/Setter方法 3.编写一个无参数的构造方法 4.编写一个全参 ...

  8. 【iOS逆向】某车之家sign签名分析

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 分析某车之家sign签名算法的实现 2.操作环境 frida mac ...

  9. layui table表格使用table.resize()方法 重置表格尺寸

    解决 使用layui中的table表格重置表格尺寸 问题 表格的高度共有两种写法 相对应的就有两种解决方法 第一种 当表格高度设置为固定高度时,改变表格高度使用 tableIns=table.rend ...

  10. MySQL DATE_SUB查询工龄大于35的员工信息

    #(11) 查询工龄大于或等于35年的员工信息.SELECT * FROM emp e WHERE e.HIREDATE<=DATE_SUB(SYSDATE(),INTERVAL 35 YEAR ...