一、关于URL末尾斜杆
比如http://127.0.0.1:8000/api/v1/register
和 http://127.0.0.1:8000/api/v1/register/
, 这两个是同一个URL, 表示同一个资源, 一个/结尾, 一个没有。
在 RESTful 规范中,并没有明确要求必须包含或不包含斜杠, 不过 Django 和 Django REST Framework 默认使用带斜杠的 URL,但是很显然, 不带斜杠的 URL 更简洁,也更符合直觉。另外, 不带斜杠的 URL 在某些情况下可能对搜索引擎更友好。 总的来说, 还是要遵循团队的编码规范和习惯, 无论选择哪种风格,都应在整个项目中保持一致。
我是比较讨厌/, 从Linux文件路径带过来的习惯, 通常 以
/
结尾表示一个目录, 而不带/
则表示文件、资源 下面介绍在DRF中如何禁用 /
二、APPEND_SLASH = False
第一个配置项在 Django 中,APPEND_SLASH
控制 Django 是否会在 URL 末尾自动添加一个斜杠 /
, 具体如下: 当 APPEND_SLASH 设置为 True(默认值)时:
如果访问一个没有以斜杠 (/) 结尾的 URL,并且该 URL 加上斜杠后能匹配到一个有效的路由,Django 会自动重定向到加了斜杠的 URL。
例如,如果你访问 http://127.0.0.1:8000/api/v1/register,Django 会自动重定向到 http://127.0.0.1:8000/api/v1/register/
当 APPEND_SLASH 设置为 False 时:
Django 不会自动在 URL 末尾添加斜杠。如果你访问的 URL 没有以斜杠结尾,并且该 URL 只在添加斜杠后能匹配到有效的路由,Django 将不会进行重定向,而是直接返回 404 。
因此,首先设置 APPEND_SLASH = False
三、trailing_slash=False
如果仅设置了APPEND_SLASH = False
, 虽然URL中不会携带/
, 但是DRF也会404, 比如:
还需要设置DRF路由禁用末尾的/
, 添加trailing_slash=False
如下:
# 在路由注册时禁用末尾/
from rest_framework import routers
from api.views import RegisterView
app_name = api
router = routers.SimpleRouter(trailing_slash=False) # 禁用url末尾的 /
router.register(r'register', RegisterView, 'register')
urlpatterns = []
urlpatterns += router.urls
https://www.hugbg.com/archives/3841.html
评论