【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='非常友好的接口文档')),
    ]

  页面效果:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第1张图片

 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="[email protected]"),
        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'),
    ]

  页面效果:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第2张图片

 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="[email protected]"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    # permission_classes=(permissions.AllowAny,),   # 权限类
)
urlpatterns = [
        re_path(r'^swagger(?P\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
    ]

  页面效果:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第3张图片

 3、使用redoc接口文档维护接口

3.1 一定要先在配置表中注册drf_yasg,不然页面会报错

INSTALLED_APPS = [
                'drf_yasg',
                    ]

 3.2 在全局路由表中添加路径

from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
    openapi.Info(
        title="超哥 API接口文档平台",  # 必传
        default_version='v1',  # 必传
        description="这是一个美轮美奂的接口文档",
        terms_of_service="http://api.keyou.site",
        contact=openapi.Contact(email="[email protected]"),
        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'),

]

 页面效果:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第4张图片

 二、日志器

在全局配置表中添加日志器

# 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中有全局认证类

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第5张图片

如果不指定授权类,则请求接口不受影响,仍然可以正常访问接口获取到返回数据;

如果指定授权类,则未登录时去请求接口,会返回未认证信息:

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第6张图片

我们来创建一个用户

python manage.py createsuperuser

 设置用户名、邮箱、密码

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第7张图片

 在database中的auth_user表里可以看到创建用户信息

 

 当调用接口需要认证才能获取权限,但是用户没有认证时,需要我们进行登录

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第8张图片

登录成功之后,就会进入之前访问的页面

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权_第9张图片 局部认证类

有些接口并不是需要登录后才可以访问的,比如登录注册接口是需要一直暴露给用户使用的,这时候就需要给需要认证类的接口视图类定义局部认证类

优先级:局部认证类>全局认证类

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,学习,django,python)