Django URL conf提供HTTP 405错误

时间:2018-02-21 03:39:45

标签: django django-rest-framework

所以我有两个非常相似的端点URL:

    url(r'^users/(?P<username>.+)/$', user_detail, name='user_detail'),
    url(r'^users/(?P<username>.+)/followers/$', follow_view, name='follow'),

按顺序,我得到一个HTTP 405(方法不允许),但是当订单被更改时(/页面上的追随者)我没有得到错误,但我现在在第二个端点得到它。

相应的api_views具有相应的允许方法列表,例如:

@api_view(['POST', 'GET', 'DELETE'])
@authentication_classes((BasicAuthentication,))
@permission_classes((IsAuthenticated,))
def follow_view(request, username, format=None):

如何使此URL Conf工作? 谢谢!

3 个答案:

答案 0 :(得分:2)

您的regular expression导致URL Dispatcher的奇怪行为。 .+会匹配除换行符之外的任何字符,其中也包含slash/)。
当您更改url()的顺序时,得到预期的输出,因为,一旦找到匹配的url模式,调度程序将停止搜索url模式并立即发送。
所以你需要做的是将你的正则表达式改为这样的,\w+username匹配而言足够了。
优先url()

url(r'^users/(?P<username>\w+)/$', user_detail, name='user_detail'),
url(r'^users/(?P<username>\w+)/followers/$', follow_view, name='follow'),

答案 1 :(得分:0)

我认为休息框架会处理您的请求,就像对第一个视图的请求一样,因为他认为users/之后的所有内容都是用户名。尝试从用户名

的允许字符中删除斜杠

答案 2 :(得分:0)

你可以试试这个:

url(r'^users/(?P<username>\w+)/$', views.user_detail, name='user_detail'),
url(r'^users/(?P<username>\w+)/followers/$', views.follow_view, name='follow'),