zoukankan      html  css  js  c++  java
  • 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())








     
     
     
     
























  • 相关阅读:
    Linux安装python3.6
    Django之Model操作
    Django
    html学习笔记-XML-Javascript
    html学习笔记-XML
    html学习笔记-DOM
    在IDEA中编辑struts国际化properties文件
    Java中的Serializable接口和transient关键字
    关于Kettle的事务和转换内步骤的顺序执行
    Mac、Linux下两个Emacs共享一个配置文件
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10525882.html
Copyright © 2011-2022 走看看