所以我有两个非常相似的端点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工作? 谢谢!
答案 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'),