Python学习(三十七)—— 模板语言之自定义filter和中间件
一、模板语言之自定义filter
自定义filter文件存放位置
模板中自定义函数
- 在已注册的app中创建一个名字叫 templatetags 文件夹
- 任意创建一个py文件
- 创建名字交 register 的Library类的对象
- 定义函数
from django.template import Library
register = Library() # 调用示例:{{ "a1"|meikai:"n1,n2"}}
# 参数最多2
# 可以做if的条件
@register.filter
def meikai(a1,a2):
n1,n2 = a2.split(',')
data = "我的名字叫:%s,我喜欢%s和%s" %(a1,n1,n2)
return data # 调用示例:{% wangyan 1 2 3 4 %}
# 参数无限制
# 无法做if条件
@register.simple_tag
def wangyan(a1,a2,a3,a4):
result = a1+a2+a3+a4
return result

注意事项
py文件必须写上:
from django.template import Library
register = Library() 自定义函数的两种方式:
@register.filter
缺点:最多只能传两个参数,在模板使用方法{{ 参数1|函数名:参数2 }}
优点:可以在if判断中使用 @register.simple_tag
优点:可以传递多个参数,在模板使用方法{% 函数名 参数1 参数2 参数3 ... %} 在模板中想要使用自定义函数,必须先导入py文件,在模板的开头加上一句:
{% load py文件名(不用.py后缀) %}
代码示例:
from django.template import Library register = Library() @register.filter
def t1(arg):
return arg.upper() @register.simple_tag
def melody(n1, n2, n3):
str = "I'am {},I like {},my dream is to be a {}".format(n1, n2, n3)
return str
二、中间件
概念:
中间件是一个类 定义:
以后想要对所有的请求做统一操作时,用中间件。(几个例外)
只是对少量的视图函数做操作时,用装饰器。 任务:
1. 对用户请求记录日志
2. 用户登录验证(只有login) 梳理:
1. 类
- 继承MiddlewareMixin
- 两个方法
process_request
process_response,必须设置返回值
2. 应用中间件 MIDDLEWARE = [
...
'xxxx.md.M1',
] 3. 示例:
1. 对用户请求记录日志
2. 用户登录验证 (只有login)
3. 权限验证 PS: 图+方法+参数
Django的生命周期

浏览器发送请求,经过wsgi,对请求数据进行解析,并封装成request,
然后经过中间件,执行中间件的process_request方法: 1.如果没有返回值或者返回值为None,则到路由系统,然后到视图系统,执行视图函数,通过ORM调用数据库,通过template调用模板语言,并把response返回 2.如果有返回值,则不经过路由系统和视图系统,直接执行中间件的process_response方法,然后经过wsgi进行数据封装,最后返回给浏览器进行渲染
自定义中间件—登陆验证
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect class AuthMiddleware(MiddlewareMixin):
def process_request(self,request):
# 如果么有返回值;返回None,表示可以继续往下执行
# 如果有返回值,执行自己的response以及以上的response。 if request.path_info == '/login/':
return None user_info = request.session.get('user_info')
if not user_info:
# return HttpResponse('请登录')
return redirect('/login/') def process_response(self,request,response):
return response
Python学习(三十七)—— 模板语言之自定义filter和中间件的更多相关文章
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- python学习三十七天函数的作用域查找顺序LEGB
python函数的作用域查找顺序LEGB,分别为 locals eclosing globals builtins .了解作用域的范围,可以更好的操作你想要的业务,分别介绍一下. 1,local ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- Python Django 之 Template 模板语言简介
一.什么事模板语言 html+逻辑控制语句 二.模板语言的作用 帮助前端处理后端发来的数据,方便前端展示(杂糅渲染) 三.模板语言语法 1.{{变量}} 变量使用双大括号{{}} 2.万能的句点号. ...
- Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静态文件的加载load static),自定义simple_tag和inclusion_tag
Django---MTV和MVC的了解,Django的模版语言变量和逻辑,常见的模板语言过滤器,自定义过滤器,CSRF了解,Django的母版(继承extends,块block,组件include,静 ...
- Django学习之 - 基础模板语言
模板语言if/else/endif {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} &l ...
- Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类
一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...
- Python学习笔记之map、zip和filter函数
这篇文章主要介绍 Python 中几个常用的内置函数,用好这几个函数可以让自己的代码更加 Pythonnic 哦 1.map map() 将函数 func 作用于序列 seq 的每一个元素,并返回处理 ...
- Python - Django - 模板语言之自定义过滤器
自定义过滤器的文件: 在 app01 下新建一个 templatetags 的文件夹,然后创建 myfilter.py 文件 这个 templatetags 名字是固定的,myfilter 是自己起的 ...
随机推荐
- python之继承、抽象类、新式类和经典类
一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...
- 【XSY3048 】Polynominal 数学
题目描述 给你三个正整数 \(a,b,c\),求有多少个系数均为非负整数的多项式 \(f(x)\) 满足 \(f(a)=b\) 且 \(f(b)=c\) \(a,b,c\leq {10}^{18}\) ...
- consul如何限制注册的ip
假设当前服务器的ip是:192.168.56.130 允许 所有ip 注册 consul agent -server -ui -bootstrap-expect=1 -data-dir=/usr/lo ...
- Codeforces 629D Babaei and Birthday Cakes DP+线段树
题目:http://codeforces.com/contest/629/problem/D 题意:有n个蛋糕要叠起来,能叠起来的条件是蛋糕的下标比前面的大并且体积也比前面的大,问能叠成的最大体积 思 ...
- Meterpreter提权详解
0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpr ...
- 【Noip2015】斗地主
题目 #include<bits/stdc++.h> using namespace std; int pai[20],T; //pai[]统计牌的数量 int n; int ans; v ...
- 应用调试(五)侵入式SWI
目录 应用调试(五)侵入式SWI 场景应用 测试程序 修改APP的bin 修改SWI 获得当前进程的寄存器 测试运行 恢复代码 进程间内存拷贝 TODO 更多参考文献 title: 应用调试(五)侵入 ...
- JDK1.8 HashMap源码分析
一.HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时 ...
- VMWare的host-only/bridged/NAT连接图文介绍
1 VMware简介 VMWare虚拟机软件是一个“虚拟PC”软件,它使我们可以在一台机器上同时运行二个或更多Windows.Linux等系统. 如果我们需要使用多个系统的话,传统的方式有两种: .使 ...
- PyQt5之布局管理
目录 一 写在开头 1.1 本文内容 二 绝对布局 三 布局类 3.1 水平布局(QHBoxLayout)和垂直布局(QVBoxLayout) 3.2 水平布局和垂直布局实例 3.3 网格布局(QGr ...