django HTTP 405方法不允许以html格式

时间:2018-01-25 19:26:18

标签: python django http

我是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 HeightForm(forms.ModelForm):

    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

我已经用Google搜索了这个错误,但没有发现anthing有用。任何帮助表示赞赏

由于

2 个答案:

答案 0 :(得分:2)

为您的表单添加一个路径,以便在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">

答案 1 :(得分:1)

您似乎没有为HeightFormView定义任何URL。表单由IndexView呈现并回发给自己;该视图不允许POST方法。

您需要为HeightFormView定义一个URL,并通过{% url %}标记在操作中引用它。