【发布时间】:2019-09-30 14:36:29
【问题描述】:
我的 Django (2.2.5) 应用程序有以下urls.py:
from django.urls import path
from django.urls.conf import re_path
from django.views.generic.base import TemplateView
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views
urlpatterns = [
re_path('^$|signin', TemplateView.as_view(template_name='signin.html'), name='signin'),
path('forgot', TemplateView.as_view(template_name='forgot.html'), name='forgot_pass'),
path('app', TemplateView.as_view(template_name='core.html'), name='core'),
path('try_signin', views.try_signin, name='try_signin'),
] + staticfiles_urlpatterns()
前 3 条规则可以正常工作并提供相应的 HTML 内容。第 4 条规则是针对 POST 请求,但该请求会导致以下错误:
不允许的方法 (POST):/try_signin
不允许的方法:/try_signin
[2019 年 9 月 30 日 14:20:38]“POST /try_signin HTTP/1.1”405 0
但是,如果我重新排序 URL 规则以便 POST 规则首先出现,那么它可以正常工作。我看到的规则没有冲突。我是 Django 新手,仍在学习,但我想了解为什么重新排序规则可以避免错误,或者我正在做/不做的其他事情是否会导致错误。
这是我的views.py:
from django.http.response import JsonResponse
from time import sleep
import logging
import json
log = logging.getLogger(__name__)
def try_signin(request):
user_email = request.POST.get('user', None)
password = request.POST.get('pass', None)
log.info("Signin attempt ==> [%s] [%s]" % (user_email, password))
sleep(2)
data = {
'success': False
}
log.info("Returning response ==> %s" % json.dumps(data))
return JsonResponse(data)
另外,将@require_POST 装饰器添加到上面的try_signin 函数仍然会导致错误。正如我之前所说,如果我将规则重新排序以首先出现在 url_patterns 中,它确实有效。
【问题讨论】:
-
请将视图 try_signin 添加到您的问题中。
标签: django django-urls