1.最开始我用声明一个方法来完成登录,如下
在 user mode 中views 中声明一个登陆方法,然后区分post和get请求分别处理,然而友好的Django框架提供类封装思路,我们只是需要继承和重写方法就可以很简单完成我们登录,如下:
class LoginView(View):
def get(self, request):
return render(request, "login.html")
def post(self, request):
username = request.POST.get("username")
password = request.POST.get("password")
#调用表单认证
login_form = LoginForm(request.POST)
#判断表单认证是否成功
if login_form.is_valid():
pass
# 验证登录,并返回user对象
user = authenticate(username=username, password=password)
# 判断user登录对是否为None,如果None表示没有登录成功
if user is not None:
# 注意login()方法是Django自带的所以,起名字不要跟系统重复
login(request, user)
return render(request, "index.html")
else:
# 第三个参数是返回登录页面所携带返回值
return render(request, "login.html", {"msg": "用户名或者密码错误"})
记得引入我们的Django提供的类:
from django.views.generic.base import View
可以看到我们可以不用繁琐的区分是get或者post请求,只是需要相关方法中实现我们的逻辑就好
重新再项目中urls.py配置路径:
2.细心的同学可以看我们的LoginForm,其实就是Django中的表单验证,为什么要有表单验证这个东西呢,是因为在实际开发中我们需要对客户端传过来的数据做一个验证,区分数据合法性,比如客户端传个“”字符串过来呢,或者黑客进行攻击呢
实现form,在我们 mode 中新建 forms.py
from django import forms
'''
表单认证,主要是用来判断,客户端传过来的额参数是否是合法
required 必传
min_length 最小长度
'''
class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=6)
这个链接详细说明表单验证使用:
http://www.liujiangblog.com/course/django/152