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

Django Action如何接收无末尾斜杠的POST请求?

解决Django DRF Action无法匹配无末尾斜杠POST请求的问题

方案一:给action的url_path加可选斜杠正则

直接修改action装饰器的url_path参数,用正则表达式让它同时匹配带或不带末尾斜杠的请求:

@action(methods=['post'], detail=False, url_path=r'alert/?')
def get_post(self, request, pk=None, *args, **kwargs):
    # 你的业务逻辑代码

这里的r'alert/?'是正则表达式,?表示前面的斜杠是可选的,这样不管请求是config/alert还是config/alert/都能被捕获。

方案二:全局关闭自动加斜杠(不推荐,有副作用)

如果你的项目可以接受全局URL都不需要末尾斜杠,可修改项目根目录下的settings.py,把APPEND_SLASH设为False:

APPEND_SLASH = False

但这个设置会影响整个项目的所有URL规则,可能导致其他原本依赖末尾斜杠的路由失效,除非你确认所有接口都不需要斜杠,否则不建议用这个方法。

方案三:手动在urls.py中添加无斜杠路由

如果上面的方法都不适用,你可以在项目的urls.py里手动添加一条指向该action的路由,放在router注册代码之后:

from django.urls import path
from .views import YourViewSet

# 先注册你的ViewSet到router
router = DefaultRouter()
router.register(r'config', YourViewSet)

# 手动添加无斜杠的路由
urlpatterns = [
    path('config/alert', YourViewSet.as_view({'post': 'get_post'}), name='config-alert'),
    *router.urls,
]

这样就能直接匹配config/alert的POST请求,不会影响其他路由的规则。

内容的提问来源于stack exchange,提问作者Dogac Topay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:25:25