Auth
Django内置了强大的用户认证系统auth,它默认使用 auth_user 表来存储用户数据。
在INSTALLED_APPS中添加’django.contrib.auth’使用该APP, auth模块默认启用。
create_superuser():创建一个超级用户。
- check_password():检查密码是否正确。
- set_password():修改密码,设置完一定要调用用户对象的save方法。
create_user():创建一个新用户,需要username、password等
User.objects.create_user(username=username, password=password)
登录验证设置session
auth.authenticate():验证用户名和密码是否正确,一般需要username、password,认证成功返回一个User对象。
user = auth.authenticate(username=username, password=password)
auth.login(request, user) # 设置session
auth.logout():调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
login_requierd():auth给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。
- 若用户没有登录,则会跳转到django默认的登录URL ‘/accounts/login/’ 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
- 如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
- LOGIN_URL = ‘/login/’ # 这里配置成你项目登录页面的路由
form
Form的验证思路
前端:form表单
后台:创建form类,当请求到来时,先匹配,匹配出正确和错误信息。
class RegisterForm(forms.Form):
# 使用表单做校验
# 表示username字段必须填写,且最大不超过16字符,最小不低于6字符
username = forms.CharField(
required=True,
max_length=16,
min_length=6,
error_messages={
'required': "注册用户名必须填写",
'max_length': '注册账号最长不超过16',
'min_length': '注册账号最小不少于6',
}
)
def clean(self):
# 用户名是否注册
username = self.cleaned_data.get('username')
if User.objects.filter(username=username).exists():
raise forms.ValidationError({'username': '账号已存在!'})
# 检测重复密码
pwd1 = self.cleaned_data.get('pwd1')
pwd2 = self.cleaned_data.get('pwd2')
if pwd1 != pwd2:
raise forms.ValidationError({'pwd2': '两次密码不一致'})
return self.cleaned_data
def register(request):
if request.method == 'POST':
#使用form
form = RegisterForm(request.POST)
if form.is_valid():
#验证成功
username = form.cleaned_data.get('username')
pwd1 = form.cleaned_data.get('pwd1')
User.objects.create_user(
username = username
password = password
)
return redirect(reverse('login'))
return render(request,'register.html',{'errors':form.errors})
#前端验证输出
{{ errors.password2 }}