django-rest-framework 自动生成文档(用django-rest-framework自带的和第三方包swagger)
1. 准备工作
pip install coreapi
pip install django-rest-swagger
2. 配置
用django自带的(界面没有swagger好看,功能差不多,不推荐)
# urls.py from rest_framework.documentation import include_docs_urls urlpatterns = [ url(r"^docs/$", include_docs_urls(title="MY API DOCS")), ]
用django-rest-swagger(推荐)
# settings.py 中 INSTALLED_APPS = [ ... 'rest_framework_swagger', ... ]
# urls.py from rest_framework_swagger.views import get_swagger_view schema_view = get_swagger_view(title="我的docs") urlpatterns = [ url(r"^docs/$", schema_view), ]
3. 注意
- swagger对于一些需要登录的接口的docs不显示,必须登录才显示,需要做以下修改
点击 127.0.0.1:8000/docs/ 界面上的login,会默认调到 ‘/accounts/login/’, 可以通过配置LOGIN_URL来修改
# settings.py LOGIN_URL = '/users/login/' LOGOUT_URL = '/users/logout/'
可以写一个中间键来记录上一次的跳转页面,并在视图view中跳转(redirect),实现如下:
# utils/middleware.py from django.utils.deprecation import MiddlewareMixin # django 2.0 之后中间键必须继承 django.utils.deprecation.MiddlewareMixin class RecordUrlMiddleware(MiddlewareMixin): exclude_url = ["/users/login/"] def process_view(self, request, view_func, *args, **kwargs): if request.path not in RecordUrlMiddleware.exclude_url and request.is_ajax() is False: url = request.get_full_path() request.session["pre_url_path"] = url
# settings.py # 在settings中配置 MIDDLEWARE = [ ... 'utils.middleware.RecordUrlMiddleware', ... ]
# users/views.py # 修改视图类的跳转redirect from django.shortcuts import render, redirect class UserLoginAPIView(APIView): """登录页面""" renderer_classes = [TemplateHTMLRenderer] template_name = "user/login.html" def get(self, request): serializer = JPushLoginSer() return Response({"serializer": serializer}) def post(self, request): ser = JPushLoginSer(data=request.data) if ser.is_valid(): user = authenticate( request, username=ser.validated_data["username"], password=ser.validated_data["password"] ) login(request, user) # 重点在下面这两句 pre_url = request.session.get("pre_url_path", "/user/send-info/") return redirect(pre_url) else: return Response({"serializer": ser})