python - Django登录奇怪的行为
问题描述
我正在使用 Django 构建一个网络应用程序。我已经在主页上建立了登录和注册,因为我希望它们就在那里,但登录有问题。
如果我输入正确的凭据,它会毫无问题地让我登录,但如果我输入错误的凭据,我不会收到任何错误,它只是告诉我我的视图没有返回任何内容。
这是我的视图代码:
class MainView(View):
def get(self, request, *args, **kwargs):
user = request.user
return HttpResponse(
"Welcome " + user.username + ", You are Logged in!! you can logout <a href=/logout/>here</a>")
class HomeView(View):
form_class_reg = SignUpForm
form_class_login = AuthenticationForm
template_name = 'main/home.html'
def get(self, request, *args, **kwargs):
if request.user.is_authenticated is True:
return MainView.as_view()(self.request)
if request.user.is_authenticated is False:
form_reg = self.form_class_reg(prefix='SignUpForm')
form_login = self.form_class_login(prefix='SignInForm')
return render(request, self.template_name, {
'form_reg': form_reg,
'form_login': form_login, })
def post(self, request, *args, **kwargs):
form_reg = self.form_class_reg(request.POST, prefix='SignUpForm')
form_login = self.form_class_login(data=request.POST, prefix='SignInForm')
if form_reg.is_valid():
form_reg.save()
username = form_reg.cleaned_data.get('username')
raw_password = form_reg.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('/')
if form_login.is_valid():
username = form_login.cleaned_data.get('username')
raw_password = form_login.cleaned_data.get('password')
user = authenticate(username=username, password=raw_password)
if user is not None:
login(request, user)
return redirect('/')
else:
return HttpResponse("Wrong credentials")
因此,如果用户凭据正确,它会将我重定向到 / 这是 HomeView,然后重定向到 MainView,因为这是我稍后将构建的登录页面,但如果我输入错误的用户名/密码,它永远不会给我错误的凭据返回。
它只是给了我这个:
The view main.views.HomeView didn't return an HttpResponse object. It returned None instead.
任何的想法?
解决方案
如果响应是None
,则代码未进入条件主体,if form_reg.is_valid():
并且由于else
未处理案例,因此函数返回None
。你应该检查form.errors
一下为什么你的表单验证没有像你期望的那样工作。
推荐阅读
- android - 如何在android中创建布局或Or按钮的3D形状
- php - 将 php 版本从 7.3.27 升级到 8.0.9,windows 10 后 Apache 无法运行
- gcc - 为什么在同一个 .a 文件但不同 .o 文件中定义的弱符号不用作后备?
- mysql - 使用 INNER JOIN 在 SQL 查询中出错
- javascript - 有没有一种方法可以将我的所有函数和 for-loop 合并到一个函数中,因为我需要网站提供 (str)
- gcloud - 无法在 Google Cloud 上启用或删除我的服务帐号
- ios - [ios]如何在框架中使用`LaunchScreen.storyboard`
- javascript - 无法使用 v-calendar 获取日期
- javascript - fullcalendar 不适用于 vue 2.6.12 和 laravel
- vue.js - 绑定类更改但 div 不会移动