我是 Django 的新手,我一直在尝试开发一个简单的网站,询问用户的电子邮件地址和身高。然后,它将其保存在数据库中,并向用户发送电子邮件,并将他们重定向到一个页面,说明它已成功。
现在的问题是每当我按"提交"时,都会收到HTTP 405方法不允许的错误。
# urls.py
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
#url(r'^success/$', views.SuccessView.as_view(), name='success'),
]
# forms.py 类高度形式(表单。模型形式(:
class Meta:
model = Height
fields = ['email', 'height']
# views.py
class IndexView(generic.ListView):
form_class = HeightForm
template_name = 'heights/index.html'
def get_queryset(self):
return Height.objects.all()
class HeightFormView(View):
form_class = HeightForm
template_name = 'heights/success.html'
def get(self, request):
form = form_class(None)
def post(self, request):
print('a' * 1000)
form = form_class(request.POST)
if form.is_valid:
email = form.cleaned_data['email']
height = form.cleaned_data['height']
form.save()
return HttpResponseRedirect(template_name)
#render(request, template_name, {'form': form})
# index.html
{% extends 'heights/base.html' %}
{% block body %}
<h1>Collecting Heights</h1>
<h3>Please fill the entries to get population statistics on height</h3>
<form action="" method="post">
{% csrf_token %}
<input type="email" name="email" placeholder="Enter your email address" required="true"/><br />
<input type="number" min="50" max="300" name="height" placeholder="Enter your height in cm" required="true" /><br /><br />
<input type="submit" name="submit" />
</form>
<a href="#">Click to view all heights in database</a>
{% endblock body %}
代码甚至不会在不生成错误的情况下到达print('a' * 1000)
行。Chrome 只需转到This page isn't working
页面并显示HTTP ERROR 405
。
我已经用谷歌搜索了这个错误,但没有发现安托有帮助。任何帮助不胜感激
谢谢
您似乎没有为 HeightFormView 定义任何 URL。表单由索引视图呈现并回发到自身;该视图不允许使用 POST 方法。
您需要为 HeightFormView 定义一个 URL,并通过 {% url %}
标记在操作中引用它。
为您的表单添加一条路线,以便在 urls.py 中提交,并在操作中使用相同的路线。 应该工作正常。
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^saveForm/$', views.HeightFormView.as_view(), name='form'),
]
在您的 html 表单中,
<form action="/saveForm" method="post">