Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

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的配置放之后再说。

下一篇:  Dockerfile创建python+django+uwsgi+nginx相关的镜像
上一篇:  Django restframework加Vue打造前后端分离的网站(三)在View中自定义API

共有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:56
drf-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)