Django restframework加Vue打造前后端分离的网站(四)生成接口文档
经过前面的步骤,我们现在已经有了关于project的api,以后还会添加更多的api,那么接口文档就需要准备好,特别在有前后端分工的情况,这样其他人能知道目前已有的api以及支持的方法。
我们可以先把project相关的接口文档做出来,这样在之后就形成了习惯,不用最后再来添加。打算用类似127.0.0.1:8000/api/docs/的地址来展示接口文档。
swagger是一个不错的选择。
安装rest-swagger
pip install django-rest-swagger
在settings.py中INSTALLED_APPS里添加'rest-framework-swagger'。
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework_swagger',
]
在app里的view.py中添加相应的注释。
from rest_framework import generics
class ProjectList(generics.ListCreateAPIView):
"""
get:
Return all projects.
post:
Create a new project.
"""
queryset = Project.objects.all()
serializer_class = ProjectSerializer
class ProjectDetail(generics.RetrieveUpdateAPIView):
"""
get:
Return a project instance.
put:
Update a project.
patch:
Update one or more fields on an existing project.
"""
queryset = Project.objects.all()
serializer_class = ProjectSerializer
在项目url.py中添加get_schema_view和对应的url
from django.contrib import admin
from django.urls import include, path
from rest_framework import routers
from center import views
from rest_framework.schemas import get_schema_view
from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer
router = routers.DefaultRouter()
schema_view = get_schema_view(title='API DOC', renderer_classes=[SwaggerUIRenderer, OpenAPIRenderer]) # add
urlpatterns = [
path('api/', include(router.urls)),
path('api/projects/', include('projects.urls')),
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
path('api/docs/', schema_view, name='docs') # add
]
此时运行python manage.py runserver, 便可以在127.0.0.1:8000/api/docs/看到api的对应内容。
如果遇到错误提示:'Expected a `coreapi.Document` instance',那么可以检查下djangorestframework的版本,我是3.11.0,换成3.9.2就正常了。
此时settings.py中debug为true,当以后正式部署时则会加载不了css,js,这时我们可以先运行python manage.py collect static来收集admin, rest framework, swagger的静态文件,之后用nginx代理来处理静态资源的访问,即使debug为false时也能够正常访问。nginx.conf的配置放之后再说。
共有3条评论
添加评论
小可
2022年11月16日 13:53解决方案:https://blog.csdn.net/a419240016/article/details/108414026?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166857744416800184178846%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166857744416800184178846&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-108414026-null-null.142^v63^control,201^v3^control_2,213^v2^t3_control2&utm_term=get_schema_view&spm=1018.2226.3001.4187
Alchemy
2021年7月23日 17:56drf-yasg用这个替代吧
Shen
2021年6月11日 01:09你好,您写的非常棒。确实我碰到了 Expected a `coreapi.Document` instance问题,但是当我把版本改到了3.9.2他出现了另一个问题django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': cannot import name 'six' from 'django.utils' (D:\github\django_ vue_learn\venv\lib\site-packages\django\utils\__init__.py)