gpt4 book ai didi

Django REST框架: How to add prefix in URL for versioning

转载 作者:行者123 更新时间:2023-12-02 18:26:14 25 4
gpt4 key购买 nike

我正在尝试为 REST 应用程序创建版本。这是我的 URL 示例

www.myapi.com/foo [default version]
www.myapi.com/v1/foo [version one]

这是项目结构

├── __init__.py
├── settings.py
├── urls.py
├── default_app
│ ├── __init__.py
│ ├── serializer.py
│ ├── models.py
│ ├── views.py
│ ├── urls.py

└── v1_app
├── __init__.py
├── serializer.py
├── models.py
├── views.py
├── urls.py

default_app urls.py

from django.conf.urls import *
from default_app import views as df_views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'foo', df_views.viewname, "foo")
urlpatterns = router.urls

v1_app urls.py

from django.conf.urls import *
from v1_app import views as ver_views
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'foo', ver_views.viewname, "foo")
urlpatterns = router.urls

urls.py的主文件

from django.conf.urls import patterns, include, url
from defualt_app import urls as default_urls
from v1_app import urls as v1_urls
from django.contrib.staticfiles.urls import staticfiles_urlpatterns



urlpatterns += patterns('',
url(r'^', include(default_urls, namespace="default")),
url(r'^v1/', include(v1_urls, namespace="v1"))
)

urlpatterns += staticfiles_urlpatterns()

我的问题是,当我使用没有任何前缀的简单网址时,它就可以工作

www.myapi.com/foo

当我使用版本前缀 v1 或 v2 时,它会抛出错误 [找不到页面 (404)]

www.myapi.com/v1/foo

我从这个链接得到了这个想法 https://stackoverflow.com/a/21839842/1558544

如果我不使用中间件类,那么是否可以获得相同的结果?

谢谢

最佳答案

Django REST Framework 不能很好地支持 url 命名空间,但是有一些解决方案可以使其适用于大多数情况。

对于序列化程序,您必须定义使用 HyperlinkedRelatedField 进行超链接的所有字段,包括自动添加的 url 字段,它是一个 超链接身份字段。这包括将所有字段上的 view_name 参数设置为正确的自动生成的 View 名称。这应该类似于 [namespace]:[base_name]-detail

但这也意味着您无法使用由 DefaultRouter 生成的 DefaultRouter 索引页,因为它根本不处理命名空间。为了获得一个,您需要创建自己的 View ,或者覆盖路由器中自动生成的 View 。

关于Django REST框架: How to add prefix in URL for versioning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com