auth模块进行验证登录,forms进行输入和后台进行渲染,novalidate前台不验证

auth 模块封装了session  通过user表进行验证  可自定义表

from django.contrib.auth.models import User

 1、创建普通用户
User.objects.create_user(username='Owen', password='123')

# 2、创建超级用户
User.objects.create_superuser(username='root', password='root', email='root@root.com')

# 3、获取第一个用户
user = User.objects.first()

# 4、修改密码
user.set_password('000')
user.save()

# 5、校验密码
res = user.check_password('000')

与登录验证有关的功能

from django.contrib.auth.decorators import login_required装饰器
@login_required(login_url='/user_login/(原主页页面)')  
def user_home(request):
    return render(request, 'user.html', locals())
from django.contrib.auth import login, logout,authenticate

login(request,user)注册得到session的cookie
 logout(request)注销该session  
user = authenticate(username=usr, password=pwd)  对比成功返回对象,否则None
request.user.is_authenticated()  布尔类型

# app/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    # 增加自定义字段
	info = models.TextField(null=True)
    
# settings.py配置
AUTH_USER_MODEL = 'app.User'



from django import forms

forms进行注册验证
1. 校验的字段属性名要与校验的表单form的表单元素name值进行匹配
2. 校验字段的参数required,默认为True(也与自定义True),代表数据必须传入该校验值,如果设置为False,校验数据中可以不包含该校验值
3. error_messages自定义校验规则的校验失败的(中)错误信息



class Checkfrom(forms.Form):
usr=forms.CharField(min_length=3,max_length=6,label='用户名',
error_messages={'min_length': '长度不够','max_length':'过长','required': '不能为空'}, #error_messages写验证内容
widget=forms.TextInput(attrs={'class':'form-control','placeholder': 'zzf'}))#widget=forms.TextInput(attrs= 添加input属性
    pwd=forms.CharField(max_length=6,min_length=3,label='密码',
error_messages={'min_length':'长度不够','max_length':'过长','required':'不能为空'},
widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}))
pwd_again = forms.CharField(max_length=6, min_length=3, label='再输入一次密码',
error_messages={'min_length': '长度不够', 'max_length': '过长', 'required': '不能为空'},
widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}))
email = forms.EmailField(error_messages={'invalid':'格式错误','required':'不能为空'},
label='邮箱',
widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'email'})
)#required=False,false之后没有这个key的话就不校验
def clean_pwd(self):#局部钩子对应属性没有问题再校验
pwd_clean=self.cleaned_data.get('pwd',None)
import re
result=re.match('D',pwd_clean)
if not result:
return pwd_clean #返回对应字段
else:
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
raise ValidationError('密码首位不能为字母')
def clean(self):#全局钩子所有属性没有问题再校验
        pwd_clean=self.cleaned_data.get('pwd',None)
pwd_again_clean=self.cleaned_data.get('pwd_again',None)
if not pwd_clean==pwd_again_clean:
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
raise ValidationError('两次输入不一致')
return self.cleaned_data 返回字典


def user_register(request):
if request.method=='GET':
return render(request,'register.html')
if request.method=='POST':
checkform=Checkfrom(request.POST)
if checkform.is_valid():
return redirect('/index')
else:
error=checkform.errors.get('__all__')
return render(request,'register1.html',locals())








 
 
 
 
























原文地址:https://www.cnblogs.com/wrqysrt/p/10525882.html