zoukankan      html  css  js  c++  java
  • python Django 用户管理和权限认证

    Auth认证系统

    from django.contrib.auth import login, logout, authenticate
    from django.contrib.auth.models import User
    
    # 用户登陆
    user = authenticate(username, password)
    if user:
        if user.is_active:
        	login(request, user)
        else:
            print('账号密码错误')
    else:
        print("登陆失败")
    # 注销
    logout(request)
        
    # 创建用户
    user = User.objects.create_user(username, password)
    user.savae()
    # 修改密码
    user = authenticate(username, password)
    user.set_password(new_password)
    user.save()
    
    # 对密码加密和检查加密前的密码和加密后的密码是否相等
    from django.contrib.auth.hashers import make_password, check_password
    password = "123456"
    code_password = make_password(password, None, "pbkdf2_sha256")
    check_password(password, code_password)
    

    扩展User模型

    方式 描述
    代理模型 在数据库中无需创建新数据表。一般用于改变现有模型的行为方式,如增加新方法函数,并不影响现有数据库结构。当不需要在数据库中存储额外信息,但需要增加操作方法或更改模型查询方式时使用
    Profile扩展模型User 存储的信息与模型User相关,但是并不影响User原有的认证方法。定义信的模型MyUser,设置某个字段与OneToOneField与User进行一对一关联。
    AbstractBaseUser 当User内置的方法不能满足开发需求时,使用该方法对User重新设计。对User和数据库架构影响很大。
    AbstractUser 内置的User满足开发需求,在不需要改变函数方法的情况下,增加User额外字段,通过AbstractUser实现。
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class MyUser(AbstractUser):
    	tel = models.CharField('手机号', max_length=11)
    

    修改settings.py文件

    AUTH_USER_MODEL = 'user.MyUser'
    

    在admin.py文件中添加数据对象

    from django.contrib import admin
    from user.models import MyUser
    from djangp.contrib.auth.admin import UserAdmin
    from django.utils.translation import gettext_lazy as _
    
    @admin.register(MyUser)
    class MyUserAdmin(UserAdmin):
        # 重写UserAdmin的fieldsets,添加其他属性的录入
        fieldsets[1] = (_('Personal info'), {'fields': ('first_name', 'last_name', 'tel')})    
    

    设置用户权限

    # 检查是否拥有权限
    user.has_perm('index.add_product')
    
    # 查看全部权限
    user.user_permissions.values()
    
    # 添加权限
    permission = Permission.objects.get(codename="add_product")
    user.user_permissions.add(permission)
    
    # 删除权限
    user.user_permissions.remover(permission)
    
    # 自定义Model的权限
    
    class Product(models.Model):
        id = models.AutoField('序号', primary_key=True)
    
    # 检查用户权限
    from django.shortcuts import render
    from django.contrib.auth.decorators import login_required, permission_required
    
    @login_required(login_url="/user/login.html")
    @permission_required(perm='index.visit', login_url="/user/login.html")
    def index(request):
    	return render(request, "index.html")
    

    设置用户组

    from django.contrib.auth.models import Group
    
  • 相关阅读:
    hdu3746Cyclic Nacklace(KMP)
    hdu2087剪花布条(KMP)
    cellspacing cellpadding
    3行3列表格 table实现,div+css实现
    自动办公系统
    (转载)互联网协议入门(二)
    (转载)互联网协议入门(一)
    去掉考勤
    第二次装OA系统
    Windows 7系统下局域网文件共享设置方法
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/13408712.html
Copyright © 2011-2022 走看看