Django加Vue电商项目实战14 权限校验中间件

前言

学无止境,无止境学。大家好,我是张大鹏,之前在抖音有5万多粉丝,不过现在不拍视频,专心写公众号了。笔者目前是高级Python工程师,之前是全栈工程师,主要擅长Golang和Python开发,对于JavaVue,React也有一些研究。工作之余,喜欢学习和分享,希望能够通过此公众号”张大鹏520″,将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。

今天要给大家分享的是《Django加Vue电商项目实战14 权限校验中间件》,这是一个系列的教程,从零基础到项目实战。在本教程中,我会给大家介绍Django如何使用权限校验,如何自定义权限校验中间件并使用等。还会配套相关的练习,大家学完以后可以自行通过练习题巩固和加深对知识点的理解。

如果大家需要本教程的PDF电子书或者完整的源码,可以在文末找到获取方式哈。

模型设计

from django.contrib.auth.models import AbstractUser
from django.db import models


class MyUser(AbstractUser):
    """自定义用户模型"""
    photo = models.CharField('用户头像', max_length=50)
    wechat = models.CharField('微信', max_length=30)
    level = models.CharField('用户等级', max_length=1)

    def __str__(self):
        return self.username

    class Meta(AbstractUser.Meta):
        # 自定义权限
        permissions = (
            ['check_myuser''审核用户信息'],
        )

创建权限中间件

import re

from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin


class PermissionMiddleWare(MiddlewareMixin):
    """权限校验中间件"""

    def process_request(self, request):
        """处理请求的方法"""

        # 获取当前路径
        curr_path = request.path

        # 白名单处理
        white_list = ["/login/""/register/"]
        for w in white_list:
            if re.search(w, curr_path):
                return None  # 通过

        # 验证是否登陆
        print(request.user.is_authenticated)
        if not request.user.is_authenticated:
            return redirect("/login/")

        # 这里还可以继续处理一些权限细节,不在展开
        # 比如晚上12点以后关闭商城

配置中间件

# 中间件列表
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # CSRF跨域攻击中间件
    'django.middleware.csrf.CsrfViewMiddleware',
    # 内置权限中间件
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 消息中间件
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 自定义权限校验中间件
    'index.middlewares.PermissionMiddleWare',
]

视图函数单独使用权限校验

核心代码:

  • @permission_required:校验是否具备某个具体的权限,比如app.view_myuser,表示是否具备app应用下查看myuser表数据的权限
  • @login_required:表示只有登录以后才具备访问权限

示例代码:

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.urls import reverse

from .models import MyUser


# Django会给每张表都添加增删改查的权限,分别对象add,delete,change,view
# 用 add_表名 的格式来指定是否具备某种权限
@permission_required("app.view_myuser")
@login_required
def index(request):
    users = MyUser.objects.all()
    return render(request, "index.html", {"users": users})

模板中使用权限校验

核心代码:

{% if perms.myuser.delete_myuser %}
 <td>删除</td>
{% endif %}

解析:perms.myuser.delete_myuser

  • perms代表用户当前所有的权限
  • myuser代表当前用户对myuser表的权限
  • delete_myuser代表当前用户是否具备删除myuser表数据的权限

完整代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Django权限示例</title>
</head>
<body>
<h1>Django权限示例</h1>
<h2>路由列表</h2>
<ul>
    <li><a href="{% url 'index:index' %}">/</a></li>
    <li><a href="{% url 'index:register' %}">/register/</a></li>
    <li><a href="{% url 'index:login' %}">/login/</a></li>
</ul>

<div class="content">
    欢迎{{ request.user }}来到商城系统!

    <a href="#">用户退出</a>
    <br>
    用户信息列表
    <table border=1>
        <tr>
            <td>账号</td>
            <td>用户姓名</td>
            <td>email</td>
            <td>操作</td>
        </tr>
        {% for user in users %}
            <tr>
                <td>{{ user.username }}</td>
                <td>{{ user.truename }}</td>
                <td>{{ user.email }}</td>
                <td><a href="#">修改</a></td>
                {% if perms.myuser.delete_myuser %}
                    <td>删除</td>
                {% endif %}
            </tr>
        {% endfor %}
    </table>
</div>
</body>
</html>

结语

关注我不迷路,欢迎关注我的微信公众号”张大鹏520″,如果您对此文章感兴趣,欢迎点赞收藏,留言评论。

文中所有代码,只需要打赏20元,然后留言评论“已打赏”,即可获取哦。

本文的PDF电子书版,只需要打赏3元,然后留言评论“已打赏”,即可获取哦。

写文章不容易,不喜勿喷哈,如果有想要学编程,学项目,或者在工作中有项目难以单独完成需要提供帮助的同学,欢迎私信我哈。生活不易,想要利用学到的编程知识,业余赚点零花钱。

接项目:网站开发,APP开发,各种管理系统开发。

带徒弟:Python编程教学,Golang编程教学,前端编程教学。

谢谢您!!!


原文始发于微信公众号(张大鹏520):Django加Vue电商项目实战14 权限校验中间件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48588.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!