django-rest-framework 自动生成api文档

本文介绍如何使用Django REST框架及第三方包Swagger生成API文档。包括安装必要组件、配置步骤,以及解决登录状态下的文档展示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值