Django实战项目-学习任务系统-自定义URL拦截器
接着上期代码框架,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 -------------------------------------------------
Django实战项目-学习任务系统-自定义URL拦截器的更多相关文章
- Mybatis自定义SQL拦截器
本博客介绍的是继承Mybatis提供的Interface接口,自定义拦截器,然后将项目中的sql拦截一下,打印到控制台. 先自定义一个拦截器 package com.muses.taoshop.com ...
- Struts2学习:interceptor(拦截器)的使用
对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...
- Dubbo自定义日志拦截器
前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- SpringMVC 自定义一个拦截器
自定义一个拦截器方法,实现HandlerInterceptor方法 public class FirstInterceptor implements HandlerInterceptor{ /** * ...
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...
- Web Service学习之七:CXF拦截器
一.用途 CXF拦截器类似Struts2的拦截器,后者是拦截和处理请求,前者是对发送和接收的sope消息进行处理,一般用于WS请求响应中的权限验证.日志记录,Soap消息处理,消息的压缩处理等: 这个 ...
- 框架学习之Struts2(四)---拦截器和标签
一.拦截器概述 1.1 在struts2框架中封装了很多功能,struts2里面封装的功能都是在拦截器里面,struts2里面又很多拦截器,但不是每次这些拦截器都执行,每次执行型默认的拦截器. 默认拦 ...
- Struts2学习第四天——拦截器及文件上传
1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...
随机推荐
- 饿了么组件中el-menu el-submenu el-menu-item三者之间的关系
饿了么组件中el-menu el-submenu el-menu-item三者之间的关系: 1.<el-menu>是菜单标签,里面可以包括:<el-submenu>和&l ...
- U盘或光盘启动的Win7-8-10的PE系统制作步骤
U盘或光盘启动的Win7-8-10的PE系统制作步骤 1.打开http://www.ushendu.com/下载PE制作工具 2.下载完成后安装到我的电脑, 把准备好的U盘插到电脑上,打开U深度PE制 ...
- Java GUI控件SwingX之JXTaskPane的使用示例
JXTaskPane 类似XP 左边的导航栏,在开发Swing应用的时候很好用的.下面两张截图反应了JXTaskPane的动画效果.可以自由的卷起和展开. JXTaskPane的的使用步骤:1.新 ...
- 推荐 5 个 火火火火 的CMS开源.Net项目
下面推荐5个基于.NetCore开发的CMS开源项目. 一.OrchardCore 基于ASP.NET Core 构建的.模块化和多租户应用程序框架,采用文档数据库,非常高性能,跨平台的系统. 1.跨 ...
- 即时通讯技术文集(第34期):IM群聊技术合集(Part1) [共15篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第34 期. [- 1 -] 快速裂变:见证微信强大后台架构从0到1的演进历程(一) [链接] ...
- NVM及NODE开发环境搭建
NVM及NODE开发环境搭建 1. 安装NVM 1.1 下载安装包 下载地址 1.2 安装 双击安装包,一路下一步即可.安装完成后在终端输入nvm version,能查到版本号说明安装成功了. 2. ...
- 展锐Android平台增加gadget 虚拟usb串口
方案一:需要修改展锐现有Windows端驱动,增加一组MI接口.由于无法推动展锐修改Windows驱动,该方案不推荐. SL8541E/device/sprd/sharkle/common/rootd ...
- UE4命令行编译工程入门
注:本文同步发布于微信公众号:stringwu的互联网杂谈UE4命令行编译工程入门 0 背景 笔者是个UE4的小白,本文主要记录了一个小白是如何从零UE4的基础,一步步在命令行打出iOS的ipa包的尝 ...
- 我的c语言笔记
1. 进制转换 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相加".如:1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + ...
- Nukem pg walkthrough Intermediate
nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.105 Starting Nmap 7.94SVN ( https://nmap.org ...