【问题标题】:How do I get Django REST Framework to generate a schema with a different base API URL?如何让 Django REST Framework 生成具有不同基本 API URL 的模式?
【发布时间】:2016-07-14 14:53:27
【问题描述】:

将我现有的项目之一升级到 Django REST Framework 3.4 后,我尝试使用 coreapi CLI 客户端与我的 API 进行交互。但是,我在获取、创建或更新资源时遇到问题,因为所有模式生成的 API URL 都映射到我的应用程序的基本 URL /,而不是我的应用程序 API 的基本 URL,即 /api/v2/

要使生成的架构中的 URL 以 /api/v2/ 前缀输出,我应该使用我的 URL 配置和/或我的路由器进行更改,还是应该使用 Django REST Framework documentation 中描述的自定义架构生成器?

这里是模式输出的示例(来自对 /api/v2/ 的请求,标头为 Accept:application/vnd.coreapi+json):

{
    "_type": "document",
    "_meta": {
        "title": "My API v2"
    },
    "categories": {
        "create": {
            "_type": "link",
            "url": "/categories/",
            "action": "post",
            "encoding": "application/json",
            "fields": [
                {
                    "name": "title",
                    "required": true,
                    "location": "form"
                }
            ]
        },
        "destroy": {
            "_type": "link",
            "url": "/categories/{pk}/",
             "action": "delete",
            "fields": [
                {
                    "name": "pk",
                    "required": true,
                    "location": "path"
                }
            ]
        }
    },
    ...
}

这是app/api_v2/api.py中路由器的设置方式:

from rest_framework.routers import DefaultRouter
from app.api_v2 import viewsets

api_v2 = DefaultRouter(schema_title='My API v2')
api_v2.register(r'categories', viewsets.CategoryViewSet)
...

我的ROOT_URLCONF在设置中配置为ROOT_URLCONF = 'myproject.urls'myproject/urls.py定义如下:

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin

import app.views

admin.autodiscover()

urlpatterns = [
    ...
    url(r'^', include('app.urls')),
    ...
]

最后,app/urls.py

from django.conf.urls import include, url
from app.api_v2.api import api_v2

import app.views

urlpatterns = [
    ...
    url(r'^api/v2/', include(api_v2.urls)),
    ...
]

【问题讨论】:

  • 我也有同样的问题。你能解决你的问题吗?

标签: django django-rest-framework


【解决方案1】:

我认为这是版本

在当前master中解决。

另见https://github.com/tomchristie/django-rest-framework/issues/4401

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多