【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权
一、API接口文档平台
使用API接口文档不经可以很好的的维护接口数据,还给测试人员的接口测试工作带来了便利;
我们可以在全局配置文件中添加路由路径生成接口文档
1、使用docs接口文档维护接口
1.1在全局配置文件里指定用于支持coreapi的Schema
# 指定用于支持coreapi的Schema'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
1.2在全局路由表中添加路径
from rest_framework.documentation import include_docs_urls
urlpatterns = [path('docs/', include_docs_urls(title='接口文档', description='非常友好的接口文档')),]
页面效果:
2、使用swaager接口文档维护接口
2.1 一定要先在配置表中注册drf_yasg,不然页面会报错
INSTALLED_APPS = ['drf_yasg',]
2.2 在全局路由表中添加路径
from rest_framework.documentation import include_docs_urls
schema_view = get_schema_view(openapi.Info(title="超人 API接口文档平台", # 必传default_version='v1', # 必传description="这是一个美轮美奂的接口文档",terms_of_service="http://api.keyou.site",contact=openapi.Contact(email="superman@qq.com"),license=openapi.License(name="BSD License"),),public=True,# permission_classes=(permissions.AllowAny,), # 权限类
)
urlpatterns = [path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),]
页面效果:
2.3 我们还可以使用swaager文档转化为json或者yaml格式
from rest_framework.documentation import include_docs_urls
schema_view = get_schema_view(openapi.Info(title="超人 API接口文档平台", # 必传default_version='v1', # 必传description="这是一个美轮美奂的接口文档",terms_of_service="http://api.keyou.site",contact=openapi.Contact(email="superman@qq.com"),license=openapi.License(name="BSD License"),),public=True,# permission_classes=(permissions.AllowAny,), # 权限类
)
urlpatterns = [re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),]
页面效果:
3、使用redoc接口文档维护接口
3.1 一定要先在配置表中注册drf_yasg,不然页面会报错
INSTALLED_APPS = ['drf_yasg',]
3.2 在全局路由表中添加路径
from drf_yasg.views import get_schema_view
from drf_yasg import openapischema_view = get_schema_view(openapi.Info(title="超哥 API接口文档平台", # 必传default_version='v1', # 必传description="这是一个美轮美奂的接口文档",terms_of_service="http://api.keyou.site",contact=openapi.Contact(email="gaochao100@qq.com"),license=openapi.License(name="BSD License"),),public=True,# permission_classes=(permissions.AllowAny,), # 权限类
)
urlpatterns = [path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),]
页面效果:
二、日志器
在全局配置表中添加日志器
# LOGGING指定日志器的相关配置
LOGGING = {# 指定日志版本'version': 1,# 指定是否禁用其他已存在的日志器'disable_existing_loggers': False,# 指定日志的输出格式'formatters': {# 指定普通的日志输出格式'simple': {'format': '%(asctime)s - [%(levelname)s] - [msg]%(message)s'},# 指定更详细的日志输出格式'verbose': {'format': '%(asctime)s - [%(levelname)s] - %(name)s - [msg]%(message)s - [%(filename)s:%(lineno)d ]'},},# 指定日志的过滤器'filters': {'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',},},# 定义日志的输出渠道'handlers': {# 指定控制台日志输出渠道'console': {'level': 'DEBUG','filters': ['require_debug_true'],'class': 'logging.StreamHandler','formatter': 'simple'},# 指定日志输出的日志配置'file': {'level': 'INFO','class': 'logging.handlers.RotatingFileHandler','filename': os.path.join(BASE_DIR, "logs/mytest.log"), # 日志文件的位置# 每一个日志文件的最大字节数'maxBytes': 100 * 1024 * 1024,# 指定日志文件总数'backupCount': 10,'formatter': 'verbose'},},# 指定日志器'loggers': {'mytest': { # 定义了一个名为mytest的日志器'handlers': ['console', 'file'],'propagate': True,'level': 'DEBUG', # 日志器接收的最低日志级别},}
}
使用日志器
# 导入logging模块
import logging
# 制定日志器对象,getLogger需要传递在settings-->LOGGING中,设置的日志器名称,必须要一致
my_logging=logging.getLogger('mytest')
my_logging.info('prijects的视图集类')
保存的日志文件信息为:
三、认证
全局认证类
drf的settings中有全局认证类
如果不指定授权类,则请求接口不受影响,仍然可以正常访问接口获取到返回数据;
如果指定授权类,则未登录时去请求接口,会返回未认证信息:
我们来创建一个用户
python manage.py createsuperuser
设置用户名、邮箱、密码
在database中的auth_user表里可以看到创建用户信息
当调用接口需要认证才能获取权限,但是用户没有认证时,需要我们进行登录
登录成功之后,就会进入之前访问的页面
局部认证类
有些接口并不是需要登录后才可以访问的,比如登录注册接口是需要一直暴露给用户使用的,这时候就需要给需要认证类的接口视图类定义局部认证类
优先级:局部认证类>全局认证类
from rest_framework.authentication import SessionAuthentication,BasicAuthentication
# 定义局部认证类
authentication_classes = [SessionAuthentication,BasicAuthentication]
四、授权
全局授权类
drf的settings中指定全局授权类
指定权限类(认证通过之后,会授予的权限)
默认的权限类为AllowAny,允许所有用户访问接口
指定只有登录之后,才具有访问接口的权限
'DEFAULT_PERMISSION_CLASSES': [# 默认的权限类为AllowAny,允许所有用户返回接口# 'rest_framework.permissions.AllowAny',# 指定只有登录之后,才具有访问接口的权限'rest_framework.permissions.IsAuthenticated',],
局部授权类
有些接口并不是需要登录后才可以访问的,比如登录注册接口是需要一直暴露给用户使用的,这时候就需要给需要授权类的接口视图类定义局部授权类(需要登录认证后才授权)
优先级:局部授权类>全局授权类
from rest_framework.permissions import IsAuthenticated
# 定义局部授权类
permission_classes = [IsAuthenticated]
相关文章:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权
一、API接口文档平台 使用API接口文档不经可以很好的的维护接口数据,还给测试人员的接口测试工作带来了便利; 我们可以在全局配置文件中添加路由路径生成接口文档 1、使用docs接口文档维护接口 1.1在全局配置文件里指定用于支持coreapi的Schema # 指…...

经营简报及考核360表格
文章目录 经营简报效果图代码tableObjectSpanMethod.js 考核360委员会效果图 经营简报效果图不需要合并单元格且有汇总表头的 懒得封装了,所以整体没有封装 经营简报 效果图 代码 <template><el-tableref"tableRef":data"tableData.lengt…...

Spring Security 构建基于 JWT 的登录认证
一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全,使用它需要采用 …...

PyTorch从零开始实现Transformer
文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码(可直接运行) 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…...

运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐
音乐是运动的灵魂,而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天,我推荐五款备受运动爱好者喜爱的耳机,它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出,助你在运动中创造最佳状态。 1、NANK南卡Runne…...

HTTP、HTTPS协议详解
文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…...

【算法与数据结构】222、LeetCode完全二叉树的节点个数
文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析:利用层序遍历,然后用num记录节点数量。其他的例如…...
登录和注册表单的11个HTML最佳实践
原文:11 HTML best practices for login & sign-up forms 原作者:Andrey Sitnik 翻译已获原文作者许可,禁止转载和商用 大多数网站都有登录或注册表单;它们是业务转换的关键部分。然而,即使是流行的站点也没有实现本文中提到的…...
Mysql删除历史数据
Mysql定时删除历史数据 实现 1.创建存储过程(函数) SQL DROP PROCEDURE IF EXISTS KeepDatasWith30Days CREATE PROCEDURE KeepDatasWith30Days() BEGINSELECT maxId:max(Id) FROM tableName WHERE CreateTime<DATE(DATE_SUB(NOW(),INTERVAL 31 D…...

Python—数据结构(一)
先放一张自己学习和整理归纳的思维导图,以便让大家都知道我自己的整体学习路线。 数据结构的学习路上内容枯燥,但坚持下来一定有很大的收获!加油💪🏻! 数据结构 数据的概念数据元素: 若干基本…...
离线环境安装flask依赖包
找到当前版本需要的所有依赖包,生产flask项目生成项目依赖包文件requirements.txt 1)在当前项目目录下 生成requirements文件:pip freeze >requirements.txt 执行requirements文件,安装依赖包:pip install -r requirements.t…...

ChatGPT与Claude对比分析
一 简介 1、ChatGPT: 访问地址:https://chat.openai.com/ 由OpenAI研发,2022年11月发布。基于 transformer 结构的大规模语言模型,包含1750亿参数。训练数据集主要是网页文本,聚焦于流畅的对话交互。对话风格友好,回复通顺灵活,富有创造性。存在一定的安全性问题,可…...

登录和注册页面 - 验证码功能的实现
目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…...

HDFS的文件块大小(重点)
HDFS 中的文件在物理上是分块存储 (Block ) , 块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。 如果一个文件文件小于128M,该文件会占…...

深度学习(二)
目录 一、神经网络 整体架构: 架构细节: 神经元个数的影响: 神经网络过拟合解决: 卷积网络 整体架构: 卷积层 边缘填充 特征尺寸计算 池化层 特征图变化 递归神经网络 一、神经网络 整体架构: 图中分别为输入层、隐层1、隐层2、输出层 通过输入层输入某数值…...
无涯教程-jQuery - wrapInner( html )方法函数
wrapInner(html)方法使用HTML结构包装每个匹配元素(包括文本节点)的内部子内容。 wrapInner( html ) - 语法 selector.wrapInner( html ) 这是此方法使用的所有参数的描述- html - 将动态创建并环绕目标的HTML字符串。 wrapInner( html ) - 示例 以下是一个简单的示例…...

【unity之IMGUI实践】单例模式管理数据存储【二】
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...

【C++】开源:Linux端ALSA音频处理库
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端ALSA音频处理库。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,…...

【Linux | Shell】结构化命令2 - test命令、方括号测试条件、case命令
目录 一、概述二、test 命令2.1 test 命令2.2 方括号测试条件2.3 test 命令和测试条件可以判断的 3 类条件2.3.1 数值比较2.3.2 字符串比较 三、复合条件测试四、if-then 的高级特性五、case 命令 一、概述 上篇文章介绍了 if 语句相关知识。但 if 语句只能执行命令,…...

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现
功能介绍 以51单片机作为主控系统;液晶显示当前信息和状态;通过语音识别模块对当前垃圾种类进行语音识别; 通过蜂鸣器进行声光报警提醒垃圾桶已满;采用舵机控制垃圾桶打开关闭;超声波检测当前垃圾桶满溢程度࿱…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...