Django Web系列二 自定义权限及简单使用(增删改)

这篇博客介绍了Django中如何自定义权限并进行增加、删除和修改操作。通过创建Alter模型,展示了如何添加自定义权限'can_alter',并提供了@permission_required装饰器的使用方法来限制访问。同时,文章还涵盖了删除特定权限和清空用户所有权限的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你看了上一章的默认权限,那么,下面看起来就比较容易了。
下面Alter是我的Login应用的一个model,如下:

from django.db import models

class Alter(models.Model):
    pass

这个里面确实啥都没写,就是为了自定义创建权限用的。
这里就直接贴核心代码:

def admin_view(request):
    '''
    为管理员注册,并赋予权限
    '''
    username = request.POST['username']
    password = request.POST['password']
    user = User.objects.create_user(username=username, password=password)
    # user.has_perm('Login.change_alter')  #这是用来缓存权限的
    try:
        #这里是创建自定义权限,供下面使用;   注意这里只能运行一次,否则报错UNIQUE
        content_type = ContentType.objects.get_for_model(Alter)
        permission = Permission.objects.create(codename='can_set_alter',content_type=content_type)
        #上面的codenmae的值可以自己命名,下面的是调用Django默认的。
        permission2 = Permission.objects.get(codename='change_alter')
    except Exception as e:
        if 'UNIQUE constraint' in str(e):  #做一个明确的异常处理
            permission = Permission.objects.get(codename='cus_alter')
            permission2 = Permission.objects.get(codename='change_alter')
        else:
            return render(request, 'index.html',{'error':'未知错误,请输入正确的语法!'})
    user.user_permissions.add(permission)                   # 为管理员添加权限
    user.user_permissions.add(permission2)
    print('管理员注册成功!')
    return render(request, 'index.html')

上面的列子添加了自定义权限和默认权限,2个权限。
默认权限:‘add_模型小写名字’;‘change_模型小写名字’;‘delete_模型小写名字’不用自定义创建。。
‘can_alter’这个权限名字是可以自定义命名的。
下面是对权限的使用:

# 管理员权限
@permission_required('Login.can_set_alter',login_url='index')
def alter_admin(request):
    user = User.objects.get(username=request.user)
    print(user.get_all_permissions())  #打印user的所有权限。
    return HttpResponse('管理员才能看见!')

使用方法就是@permission_required(‘应用名_你的权限名’,login_url=‘urlname名’)
看清楚了,就可以自己尝试了。
删除权限,就是:

# 退出,清除浏览器会话
def logout_view(request):
	# 删除指定权限
    # permission = Permission.objects.get(codename='can_set_alter')
    # request.user.user_permissions.remove(permission)
    #删除所有权限
    # request.user.user_permissions.clear()
    print(request.user.get_all_permissions())
    # 清空会话
    logout(request)
    return HttpResponse('成功退出!')

删除指定权限:

user = User.objects.get(username=request.user)
permission = Permission.objects.get(codename='can_set_alter')
user.user_permissions.remove(permission)

删除user下的所有权限:

user = User.objects.get(username=request.user)
user.user_permissions.clear()

修改权限(覆盖):

user = User.objects.get(username=request.user)
permission = Permission.objects.get(codename='change_alter')
permission2 = Permission.objects.get(codename='add_alter')
user.user_permissions.set([permission2, permission])
# 之前的权限是'can_set_alter'和'change_alter',现在直接是覆盖了变成
# 了'change_alter'和'add_alter'。

本篇完,待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值