zoukankan      html  css  js  c++  java
  • Django Auth认证模块

    Author模块介绍

    Django作为一个完美主义者的终极框架,它内置了强大的用户认证系统--auth,执行数据库迁移的那两条命令时,即使我们没有建表,它默认帮我们创建auth_user 表来存储用户数据。

    自定义Auth表单

    modles.py创建表单模型可以对AbstractUser进行继承。因为我们可以从源码中看出来 Auth 自带的auth_user表继承AbstractUser类,所有我们可以同样继承它,然后对于他的内容进行自定义

    AbstractUser自带的字段

    复制代码
    username :账号
    first_name:姓
    last_name:名
    email:邮箱
    is_staff : 用户是否拥有网站的管理权限.
    is_active: 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。
    date_joined:创建日期
    复制代码

    自定义表

    1.类的继承

    from django.contrib.auth.models import User,AbstractUser
    
    class Userinfo(AbstractUser):
        #扩展字段
        phone = models.BigIntegerField() #扩展的字段尽量不要与原先表中字段冲突

    2.配置文件settings.py

    AUTH_USER_MODEL = '应用名.表名'

    '''
    配置后django会将Userinfo表来替换默认自带的auth_user表
    '''

    创建超级用户

    我们可以在pycharm中使用导航栏中的Tools里的run manage.py Task 中输入createsuperuser

    注册相关:

    create_user()

    auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

    用法:

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

    create_superuser()

    auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password、email)等。

    用法:

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

    示例:

     views.py

    from django.contrib import auth
    from django.contrib.auth.models import User
    def register(request):
    if request.method =='POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    # User.objects.create(username=username,password=password) # 这种方式不能使用,因为密码是明文的
    # User.objects.create_user(username=username,password=password) #创建普通用户
    User.objects.create_superuser(username=username,password=password,email='123@qq.com') #创建超级用户
    return render(request,'register.html')

    views.py

    登录相关

    authenticate()

    提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数

    登录成功返回的是用户对象,错误返回None。

    user = auth.authenticate(request,username=username,password=password)

    login()

    保存用户登录状态,会自动在后端为该用户生成相关session数据

    复制代码
    #若用户登录成功,拿到user对象        
    if user:
        #保存用户登录状态
        auth.login(request,user)
        '''
        只要执行了这一句话,之后在任意可以获取到request对象的地方
        都可以通过request.user获取到当前登录的用户对象
        '''
    复制代码

    is_authenticated()

    用来判断当前请求是否通过了认证,返回布尔值

    request.user.is_authenticated()

    校验用户是否登录装饰器 @login_required

    方式一:局部配置

    @login_required(login_url='/login')  #加参数 若未登录就跳转到指定的登录页面
    def xxx(request):
        return HttpResponse('xxx页面')   

    方式二:全局配置

    views.py

    @login_required
    def xxx(request):
        return HttpResponse('xxx页面')

    在settings.py中加入以下代码

    LOGIN_URL = '/login/'

    注意:若两种方法都有,则先执行方式一的

    登录综合示例:

     Views.pys

    def login(request):
    if request.method =='POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = auth.authenticate(request,username=username,password=password) #返回值user是一个对象
    # print(user)
    # print(user.username)
    # print(user.password)
    '''
    用户名密码正确返回的是用户对象
    错误返回None
    '''
    if user:
    #保存用户登录状态
    auth.login(request,user)
    '''
    只要执行了这一句话,之后在任意可以获取到request对象的地方
    都可以通过request.user获取到当前登录的用户对象
    '''
    return HttpResponse('登录成功')
    return render(request,'login.html')

    def get_user(request):
    print(request.user)
    '''
    用户登录成功之后,request.user拿到的就是用户对象 user
    没有登录,获取到的是匿名用户 AnonymousUser
    '''
    print(request.user.is_authenticated()) #返回的是布尔值,确认用户是否登录
    return HttpResponse('get_user')


    # 校验用户是否登录装饰器
    from django.contrib.auth.decorators import login_required

    @login_required(login_url='/login') #加参数 跳转到指定的登录页面
    # @login_required
    def xxx(request):
    return HttpResponse('xxx页面')

    Views.pys

    密码相关

    check_password(password)

    校验密码是否正确,密码正确返回True,否则返回False

    is_right = request.user.check_password(old_password)

    set_password(new_password)

    设置新密码,传新密码当作参数,设置完一定要调用用户对象的save方法。

    request.user.set_password(new_password)
    request.user.save()  #这步一定要做,保存到数据库

    修改密码综合示例:

     views.py

    @login_required
    def set_password(request):
    if request.method =='POST':
    old_password = request.POST.get('old_password')
    new_password = request.POST.get('new_password')
    #1 先校验旧密码是否正确
    is_right = request.user.check_password(old_password)
    print(is_right)
    #2 修改新密码
    if is_right:
    request.user.set_password(new_password)
    request.user.save() #这步一定要做,保存到数据库
    return render(request,'set_password.html')
    views.py

    注销相关

    logout()

    注销登录用户

    auth.logout(request)
  • 相关阅读:
    Atitit.eclise的ide特性-------abt 编译
    Atitit.eclise的ide特性-------abt 编译
    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Python3.6新特性2  Python2.7新特性Python 2.7的新特性
    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
    Atitit intellij idea的使用总结attilax
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    Atitit 软件国际化原理与概论
    Atitit 软件国际化原理与概论
  • 原文地址:https://www.cnblogs.com/wddxx/p/13814728.html
Copyright © 2011-2022 走看看