首页 > 解决方案 > Django 中的“post”方法

问题描述

我创建了三个文件:

2- view.py :

class AddTeamView(View):
    def get (self, request):
        form = TeamForm()
        context = {'form': form}
        return render(request, 'add_team.html', context)

1-forms.py:

class TeamForm(forms.Form):
    name = forms.CharField( max_length='100')
    details = forms.CharField(max_length='250')

3-add_team.html:

-这里有另一个名为“base.html”的文件

{% extends 'base.html' %}
{% block title %}
add team
{% endblock %}

{% block content %}

    <form action="/add_team/" method="post">

    {% csrf_token %}
    {{ form }}

     <input type="submit" value="Submit">

    </form>  

{% endblock %}

我去cmd并输入服务器“python manage.py runserver”

它出现在浏览器上:

“此页面无法正常工作如果问题仍然存在,请联系网站所有者。HTTP 错误 405”

标签: djangopython-3.x

解决方案


鉴于存在相应的方法,视图可以支持GET, POST,PUT等方法,因此视图应具有, ,等功能。.get(..).post(..).put(..)

在这里,您只实现了 a def get(self, request),因此POST不允许请求。

但是,根据您显示的数据,这看起来像是CreateView[Django-doc]的典型用例。这些视图的想法是封装常见场景,这样通过覆盖一些属性,可以创建一个针对特定情况量身定制的视图,例如:

class AddTeamView(CreateView):
    form_class = TeamForm
    template_name = 'add_team.html'
    success_url = '/some/success_url'

TeamForm可能应该是 a ModelForm,或者至少应该是 a ,您可以在Form其中重写.save(..)函数以将数据正确保存到数据库中,因为现在,表单没有做任何事情(它接收数据,但在验证后,它会将其丢弃) .

form_valid(..)如果您不想重定向success_url. success_url此外,从给定的视图名称中延迟解析是很常见的,例如:

class AddTeamView(CreateView):
    form_class = TeamForm
    template_name = 'add_team.html'
    success_url = reverse_lazy('view_name')

推荐阅读