在第5章中,我们记录了如何将用户输入的信息进行校验,但是仍然有些逻辑需要进一步完善。
from django.shortcuts import render
from django.views.generic.base import View
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect
from django.urls import reverse
# 定义用户登录功能的类
class LoginView(View):
# 需要定义get 和post方法
def get(self, request, *args, **kwargs):
return render(request, 'login.html')
def post(self, request, *args, **kwargs):
# 处理用户输入的用户名和密码进行登录
user_name = request.POST.get('username', '') # get中的名字是对应元素的name,可以在网页中查看
password = request.POST.get('password', '')
# 用于通过用户名和密码查询用户是否存在
user = authenticate(username=user_name, password=password)
if user is not None:
# 查询到用户
login(request, user) # 涉及cookie和session的内容
# 登录成功之后应该怎么返回页面, 一般跳转到首页
# return render(request, 'index.html')
return HttpResponseRedirect(reverse('index'))
else:
# 未查到用户
return render(request, 'login.html', {'msg': '用户名/密码错'})
# 需要传递是用户名/密码错
之前的POST逻辑是这样的, 我们通过request.POST.get()方法获取了用户名和密码,并通过authenticate()方法和数据库中的内容进行了比较。
但是可能出现的情况还包括:
1. 用户名没有输入,为空
2. 密码没有输入,为空
3. 密码的格式不符合规定
我们可以通过如下方式在POST函数中添加:
if not