python Django 用户管理和权限认证

摘要:
它通常用于改变现有模型的行为,例如添加新的方法函数,而不影响现有的数据库结构。当您不需要在数据库中存储其他信息,但需要添加操作方法或更改模型查询方法时,请使用Profile扩展模型User来存储与模型User相关的信息,但不会影响用户的原始身份验证方法。定义字母模型MyUser,并将字段设置为与OneToOneField和User一一关联。当用户的内置方法不能满足开发需求时,使用此方法重新设计用户。它对用户和数据库模式有很大的影响。

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

免责声明:文章转载自《python Django 用户管理和权限认证》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows新终端中玩转ASCII和Emoji游戏的正确姿势U_Net原理及tensorflow的实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python爬取上交所一年大盘数据

前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 半个码农2018 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef...

python-PyCharm几个设置小技巧

1、设置默认建python的模板 如下图所示: 代码如下:记得引用变量是大写 ##!/usr/bin/python3#-*- coding:utf-8 -*-#@Time :${DATE} ${TIME}#@Author :叮当#@File : ${NAME}.py 2、怎样获取当前文件路径 ctrl+shift+C 3、重命名一个文件 右键-ref...

Python中的MySQL接口:PyMySQL & MySQLdb

MySQLdb模块只支持MySQL-3.23到5.5之间的版本,只支持Python-2.4到2.7之间的版本 PyMySQL支持 Python3.0以后的版本 PyMySQL https://pypi.python.org/pypi/PyMySQL https://github.com/PyMySQL/PyMySQL/blob/master/README...

Django解除端口占用

Error: That port is already in use.有两个方法可以解决(假设8000端口被占用):1.使用python manage.py runserver 8001 开一个新的端口。2.kill掉原来的端口(在root条件下)。2.1 在终端输入lsof -i:8000,列出进程信息。2.2 然后,找到进程的PID号,比如我的PID号...

git_stats安装及使用

 git_stats是仓库代码统计工具,今天我们要求用git_stats工具做项目的代码统计,也是一步一坑的找到了一些方法,在这里记录一下 Window环境安装与使用 git_stats可以在windows和linux使用,但是集成方式有点不太一样,我目前尝试的是win版本的,在这里就先记录win版本的安装及使用,Linux环境的后期需要可以再补充 git...

Python用27行代码绘制一幅满天星

前言 每一个孩子都像星空中的一颗星星,散发着自己所特有的光芒照亮着整个夜空。今天就带大家用27行Python代码绘制一幅满天星吧。 全局设置 在绘制满天星的过程中要运用到turtle工具,它是Python的标准库,也可以形象的称它为海龟库,它可以描绘绘图的轨迹,操作简单、快捷。首先,我们要做一些有关全局的设置 这一步主要是对turtle的画笔大小、绘...