Django实战项目-学习任务系统-自定义URL拦截器

news2025/2/23 12:40:24

接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。

首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题。

Django框架本身也有URL拦截器,但是因为本系统用户模型跟Django框架本身用户模型不匹配,所以没有用,只好自定义URL拦截器。

第一步:修改项目配置文件

./mysite/mysite/settings.py:

自定义拦截器中间件放置位置很重要,千万不能放错了,不然无法生效。

'''
    将你的自定义拦截器中间件放置在内置的 SessionMiddleware
    和 AuthenticationMiddleware 之后,并根据你的实际情况调整其他中间件的顺序。
    这样,user 属性应该会被正确添加到请求对象中,
    从而解决 'WSGIRequest' object has no attribute 'user' 错误。
'''
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 自定义拦截器
    'study_system.custom_middleware.CustomURLInterceptorMiddleware',
    'study_system.custom_middleware.CustomURLInterceptorMiddleware2',
]

第二步:新增应用自定义URL拦截器

./mysite/study_system/custom_middleware.py:

import re

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

"""
    自定义中间件
    中间件是一个面向对象的类,有五个方法
        1、Request预处理函数:process_request(self, request)
            运行时间:在请求后,在process_view 之前,在执行views之前
        2、View预处理函数: process_view(self, request, callback, callback_args,callback_kwargs)
            运行时间:在process_request之后,在views之前
        3、Template模版渲染函数:process_template_response()
            运行时间:默认不执行,只有在视图函数的返回结果对象中有render方法才会执行,
            并把对象的render方法的返回值返回给用户(注意不返回视图函数的return的结果了,
            而是返回视图函数 return值(对象)中rende方法的结果)
        4、Exception后处理函数:process_exception(self, request, exception)
            运行时间:这个方法只有在 request 处理过程中出了问题
            并且view函数抛出了一个未捕获的异常时才会被调用。这个钩子可以用来发送错误通知,
            将现场相关信息输出到日志文件,或者甚至尝试从错误中自动恢复。
        5、Response后处理函数:process_response(self, request, response)
            运行时间:这个方法的调用时机在 Django 执行 view 函数并生成 response 之后。
            该处理器能修改response 的内容;一个常见的用途是内容压缩,如gzip所请求的HTML页面
"""

'''
通过中间件(Middleware)来实现自定义的 URL 拦截器。
中间件是 Django 处理请求和响应的组件,可以对请求进行处理、拦截和修改

# 中间件使用方法:
#   方法1、
#       --> 首先需要自定义类继承MiddlewareMixin类;然后重写里面的5方法
#       --> setting.py中配置自定义中间件类

'''

# 定义需要登录状态的匹配规则,| 分隔要匹配的多个url,从左到右匹配,有匹配就返回匹配值,否则返回None。
login_pattern = r'^(/study_system/home/?$|/study_system/task/|/study_system/item/|/study_system/user/)'


class CustomURLInterceptorMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print('---------------->1')
        """
            Request预处理函数,重写方法
        """
        # 我们可以通过request对象获取里请求里面的相关值,request对象其实就是view function函数的request
        # 相关获取例如:request.META、request.META['REMOTE_HOST']、request.path
        print(request.META['REMOTE_ADDR'])  # 获取请求的远程地址
        path = request.path  # 拿到当前的请求路径
        # 如果 当前的请求路径h 的开始位置能够找到这个正则样式的任意个匹配,就返回一个相应的匹配对象。
        # 如果不匹配,就返回None
        match = re.search(login_pattern, path)
        if match:  # 匹配成功
            print(request.user)  # AnoymousUser:即匿名对象,未登录
            # 如果在,判断请求user认证是否通过,不通过的话我们就直接重定向到登录界面,类似做了一层拦截访问
            # if not request.user.is_authenticated:
            if not request.session.get('username'):
                return redirect(reverse('study_system:login'))


class CustomURLInterceptorMiddleware2(MiddlewareMixin):
    # 重写方法
    def process_request(self, request):
        print('------------------->2')


第三步:运行测试查看效果

-------------------------------------------------end -------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表的引入

什么是链表 链表一种线性的数据结构,通过指针将一个个零散的内存块连接起来,链表的每个内存块称为结点。结构体指针在这里得到了充分的利用。 为什么要使用链表 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数…

3.13每日一题(分部积分求不定积分)

关键在于看出两类不同类型函数的乘积,要把三角和对数以外的凑到dx上,然后分部积分 注: arctan根号x 的求导为复合求导 根号x分之一的原函数为2*根号x

纳米银线 纳米银纳米线 平均直径: 50-100nm

(西)纳米银线 (安)含量(%):99.9 (瑞)平均直径: 50-100nm (20nm 30nm 60nm ) (禧)长度:10um …

VBA技术资料MF77:组合所选范围中的所有形状

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

照片如何打包?三个方法轻松搞定!

照片打包是一种有效的管理方式,可以提高工作效率、保护照片安全、节省存储空间等。那么如何简单快速地打包照片呢?下面介绍了三种方法~ 方法一:使用嗨格式压缩大师 1、在电脑上打开【嗨格式压缩大师】,点击软件首界面的【图片压缩…

知了汇智为成都理工大学物联网专业学子开展项目实训

随着数字化产业的发展以及产业数字化转型的深入,产业对数字人才的需求也在发生变化。为了培养适应市场需求的高素质物联网专业人才,11月14日,知了汇智携手成都理工大学,为2021级物联网专业学生带来一场别开生面的校内项目实训。 成…

python文件的操作以及简易shadow文件密码破解器

python文件对象以及简易shadow文件密码破解器 文章目录 python文件对象以及简易shadow文件密码破解器文件对象的方法 打开文件关闭文件文件读取文件指针的刷新文件迭代写入文件write()writelines() 案例shawod密码破解脚本 文件对象的方法 常用函数功能f open(‘PATH’)打…

golang工程——opentelemetry简介、架构、概念、追踪原理

opentelemetry 简介 OpenTelemetry,简称OTel,是一个与供应商无关的开源可观测性框架,用于检测、生成、收集和导出 遥测数据,如轨迹、度量、日志。OTel的目标是提供一套标准化的供应商无关SDK、API和工具,用于接 收、…

有哪些项目适合程序员业余时间做,并且短期内能赚点小钱?

要我说,程序员赚点小钱就别指望着自己搞个大项目了。 这几年的市场环境不好,如果你没点家底的话,打工攒的那点积蓄让你创业,一不小心就会血本无归。 对于程序员来说,最合适的还是给别人打工!低风险稳定回款…

盗版gpt去广告

一. 内容简介 盗版gpt去广告 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 就是在 (function() {use strict;// 在这编写自己的脚本 })();脚本,含解析 // UserScript // name 盗版gpt去广告 // namespace …

亿咖通·天穹Pro行泊一体智能驾驶计算平台正式量产

全球出行科技公司亿咖通科技宣布,旗下首款智能驾驶计算平台——亿咖通•天穹Pro行泊一体智能驾驶计算平台(以下简称“该平台”)已向车企正式量产交付。作为亿咖通科技在智能驾驶领域的全新突破,亿咖通•天穹Pro智能驾驶计算平台以…

Centos7安装Docker,安装DockerCompose(集群化部署),Docker私服镜像仓库

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

element-plus的el-tag标签关闭标签时的高亮显示逻辑

1.tag 实战步骤 首页的tag一开始就会存在,而且是不能进行删除的 当点击左侧栏的时候,如果tag没有该菜单名称则新增,如果已经有了那么当前tag背景为蓝色。 删除当前tag,如果是最后一个,那么路由调整到它前面那个标签并且背景变蓝…

LV.12 D13 UART实验 学习笔记

一、UART帧格式详解 UART Universal Asynchronous Receiver Transmitter 即 通用异步收发器,是一种通用的串行、异步通信总线 该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。 通…

奇淫技巧系列之第四篇:如何搜索Jar包中的xml文件

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…

索引创建的原则

索引的创建是数据库优化中非常重要的一部分,正确创建索引可以大大提高查询效率。以下是一些创建索引时需要考虑的原则: 根据查询频率创建索引: 频繁用于检索的列: 那些频繁用于查询的列或经常出现在 WHERE、JOIN、ORDER BY 和 GR…

A股风格因子看板(2023.10 第14期)

该因子看板跟踪A股风格因子,该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子,用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第14期,指数组合数据截止日2023-09-30,要点如下 近1年A股风格因子检验统…

基于springboot实现学生就业管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现学生就业管理系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,学生就业管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人…

python连接clickhouse (CK)

Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…

FreeRTOS_信号量之互斥信号量

目录 1. 互斥信号量 1.1 互斥信号量简介 1.2 创建互斥信号量 1.2.1 函数 xSemaphoreCreateMutex() 1.2.2 函数 xSemaphoreCreateMutexStatic() 1.2.3 互斥信号量创建过程分析 1.2.4 释放互斥信号量 1.2.5 获取互斥信号量 2. 互斥信号量操作实验 2.1 实验程序 2.1.1 …