目录
首页和用户登录功能的设计:
在配置首页的时候,在url文件添加如下代码进行配置:
配置登录页面:
而在新版django这里的url不需要配置路径只需要‘’就可以了
添加注册跳转按钮和页面:
用django的view方法直接对登录信息进行判断
就不用我们自己写if了:
(绿色部分为自己写的if语句,红色为使用view方法的取代绿色)
通过from来验证用户提交的字段:
建立forms.py文件:主要判断字段是否为空,或者是否字符数量不足,如果是,则不执行下面的步骤,先报错
然后,继续回到views.py文件
Urls.py里要调整配置:
然后在,index.html中对登录信息是否存在做登录状态判断
然后在,login.html中对登录信息是否存在做登录状态判断错误提示:
如何通过邮箱、用户名都可以登录:
创建Custombackend类,并继承自ModelBackend,在类里,使用自带的authenticate函数,把用户信息保存为user,并对password进行验证,保存为user,即可
然后在setting中,创建元祖,注册上面的类,即可完成邮箱、用户名或其他多字段的登录操作:
完整的登录代码:(view.py文件)
from django.shortcuts import render
from django.contrib.auth import authenticate,login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.views.generic.base import View
from .models import UserProfile
#导入LoginForm来对用户输入的字段做验证
from .forms import LoginForm
# Create your views here.
#单个用户的多字段的均可登录判断逻辑
class Custombackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username = username)|Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
#调用View类并继承,对get或post过来的用户数据进行判断:
class LoginView(View):
def get(self,request):
return render(request, 'login.html', {})
def post(self,request):
# 生成LoginForm对象,判断login_form.is_valid(),然后跟上后续
login_form = LoginForm(request.POST)
if login_form.is_valid():
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return render(request, 'index.html')
else:
#验证账号密码之后,如果不正确再返回错误
return render(request, 'login.html', {'msg': '用户名或密码不正确!'})
else:
#在验证账号密码之前,如果数据字段不满足,就直接返回login_form的错误提示
return render(request, 'login.html', {'login_form':login_form})