用户权限管理——Djiango

本文介绍了一个用户权限管理系统的设计实现,包括用户模型与权限模型的定义、权限装饰器的使用及如何在视图函数中应用这些装饰器进行权限验证。

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

一、用户模型和权限模型

  • user/models.py
from django.db import models
from django.contrib.auth.hashers import make_password


class User(models.Model):
    nickname = models.CharField(max_length=64, unique=True, null=False, blank=False)
    password = models.CharField(max_length=64, null=False, blank=False)
    head = models.ImageField()
    age = models.IntegerField()
    sex = models.IntegerField()
    pid = models.IntegerField(default=1)  # 权限 ID

    def save(self):
        if not self.password.startswith('pbkdf2_'):
            self.password = make_password(self.password)
        super().save()

    @property
    def permission(self):
        return Permission.objects.get(self.pid)


class Permission(models.Model):
    perm = models.IntegerField()
    name = models.CharField(max_length=64, unique=True)

二、权限装饰器

  • user/helper.py
from django.shortcuts import render

from user.models import Permission


def check_permission(user, perm_name):
    '''检查用户是否具有该权限'''
    user_perm = Permission.objects.get(id=user.pid)
    need_perm = Permission.objects.get(name=perm_name)
    return user_perm.perm >= need_perm.perm


def permit(perm_name):
    '''权限检查装饰器'''
    def wrap1(view_func):
        def wrap2(request, *args, **kwargs):
            user = getattr(request, 'user', None)
            if user is not None:
                if check_permission(user, perm_name):
                    return view_func(request, *args, **kwargs)
            return render(request, 'blockers.html')
        return wrap2
    return wrap1

三、在视图函数使用权限装饰器

  • posts/views.py
@permit('admin')
def create(request):
    ...

@permit('user')
def comment(request):
    ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值