Django 用户登录
2018-05-22 本文已影响0人
vckah
在实现用户登录的功能时候,遇到了这样一个问题:
使用用户名登录能正常登录,但是使用用户注册的邮箱就不能正确登录了,后来找到了解决办法:
在登录文件中添加如下:
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from .models import User
class Custome(ModelBackend):
# 重写 authenticate 函数
def authenticate(self, request, username=None, password=None, **kwargs):
try:
# Q函数在这里可以支持数据库的 或 查询
user = User.objects.get(Q(username=username) | Q(email=username) )
# 检查密码
if user.check_password(password):
return user
except Exception as e:
return None
Django 的表单验证可以使用 form,具体如下:
在 app 目录下新建 forms.py
,添加:
from django import forms
class LoginForm(forms.Form):
xxx = forms.CharField()
# 注意这里的 xxx 一定要和网页中的 name 对应,否则不会检查
然后就可以在 views 中调用了:
from .forms import LoginForm
class Login(View):
def post(self, request):
login_form = LoginForm(request.POST)
if login_form.is_valid():
pass