zoukankan      html  css  js  c++  java
  • auth模块

    auth模块

    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

    Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

    先执行数据库迁移命令,django会自动产生几张表,里面就有auth_user表, 里面的字段还挺多的

    创建超级用户

    执行python manage.py createsuperuser

    然后你就可以进入django后台管理 进行操作

    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_superuser(username=username, password=password, email='123@qq.com')   # 创建超级用户, 需要邮箱数据, 如果使用命令行创建就不需要
            return HttpResponse('ok')
        return render(request, 'register.html')
    
    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')   # 创建超级用户, 需要邮箱数据, 如果使用命令行创建就不需要
    

    校验用户名与密码是否正确

    from django.contrib import auth
    user_obj = auth.authenticate(request, username=username, password=password)  # 自动给你加密密码,然后去数据库里校验
    print(user_obj)  # 数据对象
    print(user_obj.username)
    print(user_obj.password)   # 密码是密文
    

    保存用户登录状态

    from django.contrib import auth
    
    auth.login(request, user_obj)
    # 只要执行了这一句话,之后你可以在任意位置,可以通过request.user获取到当前登录的用户对象
    # 如果没有登录,获取  AnonymousUser
    

    判断当前用户是否登录

    request.user.is_authenticated()
    

    校验原密码是否正确

    is_right = request.user.check_password(old_password)
    

    修改密码

    request.user.set_password(new_password)
    request.user.save()  # 修改密码一定要保存
    

    注销

    auth.logout(request)
    

    校验用户是否登录装饰器

    from django.contrib.auth.decorators import login_required
    
    # 全局配置
    
    @login_required(login_url='/login')  # 后面加自己跳转的页面,如果不加,默认是跳转到它自己的页面,会报错
    def change_password(request):
        return render(request, 'change_password.html')
    
    
    # 局部配置
    # 在settings配置文件中,直接配置  LOGIN_URL = '/login/'  
    
    
    # 如果全局和局部都配置,以局部配置为准
    

    扩展auth_user表字段

    利用一对一外键字段关系

    from django.contrib.auth.models import User, AbstractUser
    
    class UserDetail(models.Model):
        phone = models.BigIntegerField()
        user = models.OneToOneField(to='User')
    

    利用继承关系

    from django.contrib.auth.models import User, AbstractUser
    
    class UserInfo(AbstractUser):
        phone = models.BigIntegerField()
        register_time = models.DateField(auto_now_add=True)
        
        
    # 需注意, 还要在配置文件中配置
    AUTH_USER_MODEL = 'app01.UserInfo'    # 应用名.表名
    
  • 相关阅读:
    JS 获取网页内容高度 和 网页可视高度 支持IE6789 Firefox Chrome
    JS 回车快捷键登陆页面 兼容火狐和IE
    如何设置span宽度
    实现三行布局页面自适应不同分辨率下的屏幕高度
    电脑个别网站打不开 POSTMAN可以请求通
    克隆DataTable
    Microsoft Visual SourceSafe 6.0 关联VS
    asp.net 网站设置访问超时时长
    sql server management studio(ssms)连接多个数据库注意事项
    ASP.NET Core 开发中间件(StaticFiles)使用
  • 原文地址:https://www.cnblogs.com/setcreed/p/11992366.html
Copyright © 2011-2022 走看看