Django DRF禁用URL末尾斜杆(:)

逸兴
逸兴
逸兴
57
文章
25
评论
2024-06-2114:24:18Django DRF禁用URL末尾斜杆(:)已关闭评论 1123字阅读3分44秒

一、关于URL末尾斜杆

比如http://127.0.0.1:8000/api/v1/registerhttp://127.0.0.1:8000/api/v1/register/, 这两个是同一个URL, 表示同一个资源, 一个/结尾, 一个没有。

在 RESTful 规范中,并没有明确要求必须包含或不包含斜杠, 不过 DjangoDjango 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, 比如:

Django DRF禁用URL末尾斜杆(:)

还需要设置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

Django DRF禁用URL末尾斜杆(:)




https://www.hugbg.com/archives/3841.html
逸兴
  • 本文由 发表于 2024-06-2114:24:18
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
自动更新SSL证书 默认分类

自动更新SSL证书

现在免费的SSL证书只有三个月有效期,有一个博客和图床都用的ssl证书到期需要重新签发,挺麻烦的。原本想着写个脚本通过阿里云的 OpenAPI 进行证书的签发和部署,但是偶然发现了 ACME 这个项目...
推导式、生成式与生成器 基础语法

推导式、生成式与生成器

推导式 概述 Python中的推导式是一种快速、简洁的数据结构创建方式,不需要手动创建数据结构中的每一个元素,类似于给出一个规律,python会根据这个规律自动填充数据结构。支持有列表推导式、字典推导...
CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾) 默认分类

CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾)

一、漏洞详情 Windows Server是由微软开发的操作系统系列,专为服务器环境设计,用于管理网络、数据存储和应用程序的运行。它为企业和组织提供了稳定、可靠的服务器平台,支持各种规模的网络基础设施...
Mac pip安装mysqlclient报错 默认分类

Mac pip安装mysqlclient报错

问题详情 环境: Mac OS14.4, Python3.10, Django 5.0 mac 上使用docker运行了一个mysql容器, 然后终端中安装了brew install mysql-cl...