生成API文档
$ pip install coreapi
$ pip install Pygments
$ pip install Markdown
指定用于支持coreapi的shcema
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
}
在 LearnDjango/urls.py
添加
from django.contrib import admin
from django.urls import path, include, re_path
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('interfaces.urls')),
path('', include('projects.urls')),
path('docs/', include_docs_urls(title='测试平台接口文档',
description='这是一个接口文档平台'))
]
直接给视图类添加注释
class ProjectsListCreateViewSet(ListCreateAPIView):
"""
get:
返回所有项目信息
post:
新建项目
"""
class ProjectsViewSet(viewsets.ModelViewSet):
"""
create:
创建项目
retrieve:
获取项目详情数据
update:
完整更新项目
partial_update:
部分更新项目
destroy:
删除项目
list:
获取项目列表数据
names:
获取所有项目名称
interfaces:
获取指定项目的所有接口数据
"""
支持swagger
$ pip install drf-yasg
添加到 INSTALLED_APPS
中
INSTALLED_APPS = [
...
'drf_yasg'
...
]
在 LearnDjango/urls.py
中添加以下部分
from django.contrib import admin
from django.urls import path, include, re_path
from rest_framework.documentation import include_docs_urls
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.xxx.com',
contact=openapi.Contact(email='490336534@qq.com'),
license=openapi.License(name='BSD License')
),
public=True
)
urlpatterns = [
re_path(r'^swagger(?P<format>\.json|\.yaml)$',
schema_view.without_ui(cache_timeout=0), name='schema-json'),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc')
]
访问:
http://127.0.0.1:8000/swagger.json
返回json格式数据
访问
http://127.0.0.1:8000/swagger.yaml
会自动下载一份yaml文件
访问
http://127.0.0.1:8000/swagger/
访问
http://127.0.0.1:8000/redoc/
ApiTest/settings.py
中添加
LOGGING = {
'version': 1,
'disable_exising_loggers': False,
'formatters': {
'verbose': {
'format': '%(asctime)s - [%(levelname)s] - [msg]%(message)s'
},
'simple': {
'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' # 日志器接收的最低日志级别
}
}
}
manage.py@ApiTest > startapp user
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user.apps.UserConfig',
]