Python 错误:不允许使用方法(POST):";POST/HTTP/1.1“;405 0

Python 错误:不允许使用方法(POST):";POST/HTTP/1.1“;405 0,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我试图在主页上注册,所以我没有一个单独的URL来处理注册。我试图通过get\u context\u data发送表单,但它不起作用。这是我的密码: forms.py class UserRegistrationForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = [

我试图在主页上注册,所以我没有一个单独的URL来处理注册。我试图通过
get\u context\u data
发送表单,但它不起作用。这是我的密码:

forms.py

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User

        fields = [
            'username',
            'password',
        ]
class BoxesView(ListView):
    template_name = 'polls.html'

    def get_context_data(self):
        context = super(BoxesView, self).get_context_data()

        # login
        if self.request.method == 'POST':
            form = UserRegistrationForm(self.request.POST or None)
            context['form'] = form
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
                user = User.objects.create_user(username=username, password=password)
                user.save()
                return redirect('/')
            else:
                print(form.errors) #doesn't print anything
                print(form.non_field_errors()) #doesn't print anything
                print('Errors') #doesn't print anything
        else:
            form = UserRegistrationForm()
            context['form'] = form

    return context

    def get_queryset(self):
        pass
视图.py

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User

        fields = [
            'username',
            'password',
        ]
class BoxesView(ListView):
    template_name = 'polls.html'

    def get_context_data(self):
        context = super(BoxesView, self).get_context_data()

        # login
        if self.request.method == 'POST':
            form = UserRegistrationForm(self.request.POST or None)
            context['form'] = form
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
                user = User.objects.create_user(username=username, password=password)
                user.save()
                return redirect('/')
            else:
                print(form.errors) #doesn't print anything
                print(form.non_field_errors()) #doesn't print anything
                print('Errors') #doesn't print anything
        else:
            form = UserRegistrationForm()
            context['form'] = form

    return context

    def get_queryset(self):
        pass
base.html

<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
    <div class="registerBox">
        {{ form.username }}
        {{ form.password }}
        <input type="submit" value="register"/>
    </div>
</form>

好的,我看到问题解决了缩进,if语句应该在get\u context\u data函数内部,而不是外部;)

好的,我看到问题解决了缩进,if语句应该在get\u context\u data函数内部,而不是外部;)

您需要向您的CBV添加
post()
方法和
FormMixin
,如下所示:

class BoxesView(FormMixin, ListView):
    template_name = 'polls.html'
    form_class = UserRegistrationForm
    # ...

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        if form.is_valid():
            # ...
        else:
            # ...
        return render(request, self.template_name, {'data': some_data})
您需要向您的CBV添加
post()
方法和
FormMixin
,如下所示:

class BoxesView(FormMixin, ListView):
    template_name = 'polls.html'
    form_class = UserRegistrationForm
    # ...

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        if form.is_valid():
            # ...
        else:
            # ...
        return render(request, self.template_name, {'data': some_data})


刚刚修复了压痕,但仍然不起作用。相同错误:不允许使用方法(POST):“POST/HTTP/1.1”405 0不要使用get_context_data使用POST方法,请查看此链接您还缺少操作“”?您需要指定要发布到的URL。查看一下你的URL.py,你为视图添加的URL必须是操作中使用的URL。我使用了post()方法,它删除了错误,但没有创建新用户。我在编辑中发布了我的代码。还有,为什么我需要
操作
值?我看过很多没有它的教程。在表单的正下方添加一个print语句。is_valid()并检查if语句中是否有,如果没有,则是表单的问题。只是修复了缩进,但仍然不起作用。相同错误:不允许使用方法(POST):“POST/HTTP/1.1”405 0不要使用get_context_data使用POST方法,请查看此链接您还缺少操作“”?您需要指定要发布到的URL。查看一下你的URL.py,你为视图添加的URL必须是操作中使用的URL。我使用了post()方法,它删除了错误,但没有创建新用户。我在编辑中发布了我的代码。还有,为什么我需要
操作
值?我看过很多没有它的教程。在表单的正下方添加一个print语句。is\u valid()并检查if语句中是否有,如果没有,则说明表单有问题。
user=user.objects.create\u user(username=username,password=password)
了解if。但我认为这不是问题所在。你确定你的url很好吗?只是修正了缩进。好吧,问题是这是我的主页-所以没有单独的URL注册。因此,注册是通过主页上的javascript(onclick)访问的。你知道这是否会影响它吗?
user=user.objects.create\u user(username=username,password=password)
如果需要,请进入。但我认为这不是问题所在。你确定你的url很好吗?只是修正了缩进。好吧,问题是这是我的主页-所以没有单独的URL注册。因此,注册是通过主页上的javascript(onclick)访问的。知道这会不会影响它吗?我也试过了。我没有收到任何错误,但它没有创建新用户。您确定表单数据有效吗?因为“它没有创建新用户”可能是由其他原因引起的
form.is\u valid()
返回False,因此是的,数据可能无效,但我不确定原因。我在编辑中发布了代码。尝试使用
FormMixin
form_class
属性。尝试后获得了视图app.views.BoxesView未返回HttpResponse对象。它返回的是无。错误。你能看看我的编辑吗?我已经试过了。我没有收到任何错误,但它没有创建新用户。您确定表单数据有效吗?因为“它没有创建新用户”可能是由其他原因引起的
form.is\u valid()
返回False,因此是的,数据可能无效,但我不确定原因。我在编辑中发布了代码。尝试使用
FormMixin
form_class
属性。尝试后获得了视图app.views.BoxesView未返回HttpResponse对象。它返回的是无。错误。你能看看我的编辑代码吗?