验证功能auth

django.contrib.auth.models import User

User 是django默认管理整个项目的用户表,它继承了AbstractUser这个类,实际上我们操作的就是AbstractUser表,只是换了一个名字

导入auth:from django.contrib import auth

先明白验证的作用:

 - 限制浏览器行为,根据情况不让它访问

django通过用户表验证,用户登陆,用户退出,超时退出,设置权限,设置无权访问访问跳转页面实现这个功能

  - 用户表验证表验证动作,authenticate()方法返回一个AbstractUser对象。

  user = auth.authenticate(username='theuser',password='thepassword'),获取验证表对象

   u.is_authenticated==True 可以用作if判断。

  - 标注用户的登陆状态,例子里的user是上一行的user.

  -auth.login(request,user),根据验证结果登录,无返回值

    在请求中保留用户ID和后端。这样一来,用户就不必在每个请求上重新认证。注意,匿名会话期间的数据集在用户登录时保留。

    显然在浏览器中的cookie中留下了一个标识 

   - 用户退出

  - loginout(request),退出登陆,清空用户的session,无返回值,      

   -设置权限

  -需要登录的视图

    -引入装饰器:from django.contrib.auth.decorators import login_required

    -在视图上加入:@login_required

  - 用户表验证表添加用户,删除用户,修改密码

  - 增加用户    

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

  - 增加超级用户

from django.contrib.auth.models import User
user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

    - 检查用户密码正确与否:

ok = user_obj.check_password('密码')
或着:
ok = request.user.check_password(raw_password='原密码')

   - 修改密码

user_obj.set_password('新密码')
user_obj.save()

   -  用户修改密码后端实例

@login_required  #先登陆
def set_password(request):
    user = request.user  #获取验证结果
    err_msg = ''
    if request.method == 'POST':
        old_password = request.POST.get('old_password', '')  #获取旧密码
        new_password = request.POST.get('new_password', '')  #获取新密码
        repeat_password = request.POST.get('repeat_password', '')  #获取重复密码
        # 检查旧密码是否正确
        if user.check_password(old_password):
            if not new_password:
                err_msg = '新密码不能为空'
            elif new_password != repeat_password:
                err_msg = '两次密码不一致'
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = '原密码输入错误'
    content = {
        'err_msg': err_msg,
    }
    return render(request, 'set_password.html', content)  

  - 设置无权访问访问跳转页面

在 setting.py文件中

LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由,自定义

  

自定义用户表 

from django.contrib.auth.models import AbstractUser 
class UserInfo(AbstractUser): 
    """
    用户信息表
    """    
    phone = models.CharField(max_length=11, null=True, unique=True)   #增加自定义字段
    
    def __str__(self):
        return self.username  

替代原生USER表

setting.py中:
AUTH_USER_MODEL = "app名.UserInfo"

  

参考

 
posted @ 2018-11-28 15:18  吉元吉  阅读(269)  评论(0编辑  收藏  举报