视图users.views.RegisterView未返回HttpResponse对象。它返回了None

时间:2021-05-31 20:24:01

I am using this code for a register form. But the post request doesn't work and give me an error :

我正在使用此代码作为注册表单。但是帖子请求不起作用并给我一个错误:

ValueError at /register/ The view users.views.RegisterView didn't return an HttpResponse object. It returned None instead.

/ register /上的ValueError视图users.views.RegisterView未返回HttpResponse对象。它返回了None。

views.py

class RegisterView(View):
    def get(self,request):
        register_form = RegisterForm()
        return render(request, 'register.html',{'register_form':register_form})

    def post(self,request):
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")                  user_psw = request.POST.get("password", "")
            user_profile=UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.password=make_password(user_psw)
            user_profile.save()

            send_register_email(user_name,"register")
            pass

urls.py

from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView
import xadmin
from users.views import LoginView , RegisterView

import xadmin
urlpatterns = [
    path('xadmin/', xadmin.site.urls),
    path('',TemplateView.as_view(template_name="index.html"),name="index"),
    path('login/',LoginView.as_view(),name="login"),
    path('register/',RegisterView.as_view(),name="register"),
    path("captcha/", include('captcha.urls'))
]

forms.py

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={"invalid":"please input correctly"})

register.html

 <div class="tab-form">
                    <form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off">
                        <input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />
                        <div class="form-group marb20 ">
                            <label>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱</label>
                            <input  type="text" id="id_email" name="email" value="None" placeholder="请输入您的邮箱地址" />
                        </div>
                        <div class="form-group marb8 ">
                            <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>
                            <input type="password" id="id_password" name="password"  value="None" placeholder="请输入6-20位非中文字符密码" />
                        </div>
                        <div class="form-group marb8 captcha1 ">
                            <label>验&nbsp;证&nbsp;码</label>
                            {{ register_form.captcha }}
                            <img src="/captcha/image/2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011/" alt="captcha" class="captcha" /> <input id="id_captcha_0" name="captcha_0" type="hidden" value="2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011" /> <input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text" />
                        </div>
                        <div class="error btns" id="jsEmailTips"></div>
                        <div class="auto-box marb8">
                        </div>
                        <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
                    <input type='hidden' name='csrfmiddlewaretoken' value='5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy' />
                        {% csrf_token %}
                    </form>
                </div>

request information

Request information
USER
AnonymousUser

GET
No GET data

POST
Variable    Value
csrfmiddlewaretoken 
'9dQylxY3htVbBMNFunnYwgnarkfjSVioz5rhu0uADk0ShssTFGl9144OEwJoUlPX'
email   
'1@1.com'
password    
'123456'
captcha_0   
'2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011'
captcha_1   
''
FILES
No FILES data

no matter whether the verification code I input is wrong or right, the error is always The view users.views.RegisterView didn't return an HttpResponse object. It returned None instead.

无论我输入的验证码是错误还是正确,错误始终是视图users.views.RegisterView没有返回HttpResponse对象。它返回了None。

2 个解决方案

#1


0  

Django's view should return some response. From doc:

Django的观点应该回复一些。来自doc:

A view function, or view for short, is simply a Python function that takes a Web request and returns a Web response. This response can be the HTML contents of a Web page, or a redirect, or a 404 error, or an XML document, or an image . . . or anything, really.

视图函数或简称视图只是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像。 。 。或者其他什么,真的。

So you need to add return statement to post() method, e.g. like this:

所以你需要将return语句添加到post()方法,例如像这样:

def post(self,request):
    ...
    return render(request, 'register.html',{'register_form':register_form})

#2


0  

Try this snippet,

试试这个片段,

from django.http import HttpResponse
class RegisterView(View):
    def get(self,request):
        register_form = RegisterForm()
        return render(request, 'register.html',{'register_form':register_form})

    def post(self,request):
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")
            user_psw = request.POST.get("password", "")
            user_profile=UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.password=make_password(user_psw)
            user_profile.save()

            send_register_email(user_name,"register")
            return HttpResponse("Registration Completed")
        return HttpResponse("Please Check Your Registration Form")

#1


0  

Django's view should return some response. From doc:

Django的观点应该回复一些。来自doc:

A view function, or view for short, is simply a Python function that takes a Web request and returns a Web response. This response can be the HTML contents of a Web page, or a redirect, or a 404 error, or an XML document, or an image . . . or anything, really.

视图函数或简称视图只是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像。 。 。或者其他什么,真的。

So you need to add return statement to post() method, e.g. like this:

所以你需要将return语句添加到post()方法,例如像这样:

def post(self,request):
    ...
    return render(request, 'register.html',{'register_form':register_form})

#2


0  

Try this snippet,

试试这个片段,

from django.http import HttpResponse
class RegisterView(View):
    def get(self,request):
        register_form = RegisterForm()
        return render(request, 'register.html',{'register_form':register_form})

    def post(self,request):
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")
            user_psw = request.POST.get("password", "")
            user_profile=UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.password=make_password(user_psw)
            user_profile.save()

            send_register_email(user_name,"register")
            return HttpResponse("Registration Completed")
        return HttpResponse("Please Check Your Registration Form")