不允许在 Django 中发布的方法

Nai*_*Blg 3 django post

当我尝试在我的应用程序中添加 post 方法时,它会显示以下消息:

不允许的方法(发布):HTTP/1.1 405 0

视图.py

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

add_team.html

{% extends 'base.html' %}
{% block title %}
Add a Team
{% endblock %}
{% block content %}
<form action="/add_team/" method="post">
{% csrf_token %}
<!-- this form content is called from the view.py/context-->
{{ form }}
<input type="submit" value="????? "/>
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

网址.py

urlpatterns =[
    url(r'^admin/', admin.site.urls),
    url(r'add_team/$', AddTeamView.as_view(), name='add-team-view'),
]
Run Code Online (Sandbox Code Playgroud)

设置.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Run Code Online (Sandbox Code Playgroud)

表格.py

from django import forms


class TeamForm(forms.Form):
    name = forms.CharField(label='??? ??????')
    details = forms.CharField(label='?????? ??????')
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

c67*_*754 10

就像 Daniel Roseman 的评论所说,您需要在视图中添加一个 post 方法。当您提交填好的表单时,来自浏览器的 HTTP 请求是 POST,而不是 GET。

查看Django 文档的示例,了解如何组织基本类视图,就像您尝试使用 post 和 get 方法一样。

这是为您的案例修改的文档示例:

class AddTeamView(View):
    form_class = TeamForm
    template_name = 'add_team.html'

    # Handle GET HTTP requests
    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    # Handle POST GTTP requests
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            # <process form cleaned data>
            return HttpResponseRedirect('/success/')

        return render(request, self.template_name, {'form': form})
Run Code Online (Sandbox Code Playgroud)