【问题标题】:Django class based views form submit 405 method not allowed不允许基于 Django 类的视图表单提交 405 方法
【发布时间】:2020-05-10 21:00:21
【问题描述】:

我正在尝试在 django 应用程序中制作电子邮件提交表单。虽然来自 Flask,但我有点困惑,因为我试图用基于类的视图来做到这一点,但我很卡住。

我目前收到此错误,但不确定如何使其成功发布

Method Not Allowed (POST): /newsletter/
Method Not Allowed: /newsletter/

我的模型课有这个

class Newsletter(models.Model):
    email = models.CharField(max_length=200, unique=True)

我的 forms.py 有这个

from django import forms

class NewsletterForm(forms.Form):
    email = forms.CharField(max_length=200)

    def send_email(self):
        # send email using the self.cleaned_data dictionary
        pass

我的 urls 文件有这个

path('newsletter/', views.NewsletterView.as_view(), name='newsletter'),

我在html中提交的表单是这样的

        <form action="/newsletter/" method="post">{% csrf_token %}
            <label for="email">Email: </label>
            <input id="email" type="email" name="email_field" placeholder="email@example.com">
            <input type="submit" value="Subscribe">
        </form>

这里是视图函数

from django.views import generic
from .models import Post
from blog.forms import NewsletterForm

class PostList(generic.ListView):
    queryset = Post.objects.filter(status=1).order_by('-created_on')
    template_name = 'index.html'
    paginate_by = 3

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'post_detail.html'

class NewsletterView(generic.TemplateView):
    template_name = "newsletter.html"
    form_class = NewsletterForm
    success_url = '/thanks/'
    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.send_email()
        return super().form_valid(form)

【问题讨论】:

  • 您可以添加您的视图吗?
  • 您的视图似乎不适合 POST
  • @IainShelvington 添加了
  • @nadermx 你应该使用 FormView 而不是 TemplateView
  • @IainShelvington 有效,如果你想回答我会选择它

标签: django django-class-based-views


【解决方案1】:

你必须在你的NewsletterView中定义一个post方法:

def post(self, request, *args, **kwargs):
        ...

看看这个;)https://docs.djangoproject.com/en/3.0/topics/class-based-views/intro/#handling-forms-with-class-based-views

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2020-07-04
    • 2022-07-10
    相关资源
    最近更新 更多