You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Django Rest Framework创建的API URL中的尾斜杠

Django REST API 移除不必要尾斜杠的解决方案

一、解决URL路径的尾斜杠问题

Django默认通过APPEND_SLASH配置(默认值为True)处理URL尾斜杠,会自动将不符合规范的请求重定向到匹配的URL格式。要统一使用无尾斜杠的URL规范,按以下步骤调整:

  1. 修正各层级URL配置
    确保路径定义既保持段分隔,又避免多余尾斜杠:
  • 主项目urls.py:
urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/v1/", include("api.urls"))  # 保留斜杠作为路径段分隔,api/v1作为统一前缀
]
  • api文件夹下的urls.py:
urlpatterns = [
    path("product", include("api.product.urls"))  # 移除末尾斜杠,让product作为独立路径段
]
  • product文件夹下的urls.py:
urlpatterns = [
    path("<str:id>", ProductView.as_view(), name="product")  # 无尾斜杠,最终URL为/api/v1/product/xyz123
]

配置完成后,请求localhost:8000/api/v1/product/xyz123/(带尾斜杠)会被自动重定向到无尾斜杠的规范版本。若要禁用自动重定向,可在项目settings.py中设置:

APPEND_SLASH = False

注:禁用后需确保所有请求严格匹配URL定义,否则会返回404。

  1. 统一URL生成方式
    代码中使用reverse()生成URL,会自动遵循URLconf的定义,避免手动拼接URL导致的尾斜杠错误。

二、解决查询参数中的尾斜杠问题

针对查询参数值带尾斜杠(如sorting_field_name=product_name/)的情况,需在后端做参数清洗:
在ProductView的业务逻辑中,对接收的参数进行首尾斜杠和空格的去除:

class ProductView(APIView):
    def get(self, request, *args, **kwargs):
        sorting_field = request.query_params.get('sorting_field_name', '')
        # 清洗参数:去除首尾空格和斜杠
        sorting_field = sorting_field.strip().strip('/')
        # 后续使用清洗后的参数处理业务逻辑
        # ...

若多个视图需处理此类问题,可自定义查询参数解析器或装饰器,实现全局统一的参数清洗。


内容的提问来源于stack exchange,提问作者Gerry Volta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:35:35