Python学习(三十七)—— 模板语言之自定义filter和中间件
一、模板语言之自定义filter
自定义filter文件存放位置
模板中自定义函数- 在已注册的app中创建一个名字叫 templatetags 文件夹- 任意创建一个py文件- 创建名字交 register 的Library类的对象- 定义函数from django.template import Libraryregister = Library()# 调用示例:{{ "a1"|meikai:"n1,n2"}}# 参数最多2# 可以做if的条件 @register.filterdef meikai(a1,a2):n1,n2 = a2.split(',')data = "我的名字叫:%s,我喜欢%s和%s" %(a1,n1,n2)return data# 调用示例:{% wangyan 1 2 3 4 %}# 参数无限制# 无法做if条件 @register.simple_tagdef wangyan(a1,a2,a3,a4):result = a1+a2+a3+a4return 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 Libraryregister = 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_requestprocess_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,redirectclass AuthMiddleware(MiddlewareMixin):def process_request(self,request):# 如果么有返回值;返回None,表示可以继续往下执行# 如果有返回值,执行自己的response以及以上的response。if request.path_info == '/login/':return Noneuser_info = request.session.get('user_info')if not user_info:# return HttpResponse('请登录')return redirect('/login/')def process_response(self,request,response):return response
转载于:https://www.cnblogs.com/Coufusion/p/8379358.html
Python学习(三十七)—— 模板语言之自定义filter和中间件相关推荐
- JavaScript学习(三十七)—实现右键自定义菜单的功能
JavaScript学习(三十七)-实现右键自定义菜单的功能 代码如下: <!DOCTYPE html> <html lang="en"><head& ...
- python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- python学习三-基础语法
python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...
- Polyworks脚本开发学习笔记(十七)-制作宏脚本自定义工具条
Polyworks脚本开发学习笔记(十七)-制作宏脚本自定义工具条 做好的宏脚本程序,每次打开脚本加载程序太多麻烦,为了方便的调用脚本做各种操作,可以使用系统的自定义工具条功能将脚本加载到工具条上. ...
- tensorflow学习笔记(三十七):如何自定义LSTM的initial state
如何初始化LSTM的state LSTM 需要 initial state.一般情况下,我们都会使用 lstm_cell.zero_state()来获取 initial state.但有些时候,我们想 ...
- Python学习笔记——Flask模板
目录 3.1 模板 3.2 过滤器: 3.3 Web表单: 3.4 控制语句 3.5 宏.继承.包含 3.6 Flask中的特殊变量和方法: 3.1 模板 在前面的示例中,视图函数的主要作用是生成请求 ...
- 『Python Kivy』Kivy模板语言KV说明
为什么80%的码农都做不了架构师?>>> 语言概念 KV语言允许你以声明的方式创建控件树,以及绑定控件属性到其他的控件或使用一种自然的方式进行回调. 它允许非常快速并灵活的改变 ...
- Python学习三: 爬虫高级技巧 与 模拟实战练习
三大爬虫技巧 许多网站针对爬虫的访问都设置了一定的障碍,通过这三步技巧,轻松绕过部分的反爬虫限制. (1)设置程序休止时间 import time import random# 休止睡眠 1 秒 这里 ...
- Python学习笔记——Tornado模板
4.1 静态文件 现在有一个预先写好的静态页面文件 (下载静态文件资源), 我们来看下如何用tornado提供静态文件. static_path 我们可以通过向web.Application类的构造函 ...
最新文章
- 第十七单元 Samba服务
- 关于某些 Visual Studio Code 扩展程序无法在浏览器中运行的原因
- SAP云平台部署应用时遇到的502 Updating service failed - Bad Gateway
- C# 消息队列之MSMQ
- 云头条 |华为云发布全新Slogan;AWS推出DocumentDB;FRB信号刷屏
- java中的STL库_C++11 STL线程库实现一个简单的线程池
- 三国历史的教训读后感_历史上伟大的创新者的教训,你永远都不会忘记
- 编程菜鸟的日记-初学尝试编程递归
- 《看见》读后感:跟柴静一起成长,追求独立与真相
- 主板24pin接口详图_老电源也兼容 简单DIY 24Pin转接线
- JAVA抛出异常的三种形式
- 泛函分析(空间部分)知识点总结
- android蓝牙键盘输入法,手机外接蓝牙键盘,用什么输入法好?
- 揭开CVE漏洞挖掘与编号申请那层神秘窗户纸
- linux ffmpeg 合并视频文件,使用ffmpeg合并视频
- UHS-II文档学习
- Excel把一个工作表根据条件拆分成多个工作表
- ubuntu 安装ttf-mscorefonts-installer
- pin assignment
- 关于大学生课余时间分配利用的调查报告
热门文章
- Go 语言 Gin 框架实战项目笔记
- 【SpringMVC笔记】Ajax 入门(jQuery.ajax)
- 【恋上数据结构】布隆过滤器(Bloom Filter)原理及实现
- 【安卓笔记】—— 页面导航 Navigation(2)
- 数据分析没价值?——深思对业务的洞察有多少?
- Gartner2017年数据科学领域最酷供应商出炉,实至名归
- google map flex
- android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...
- python消息队列celery_python—Celery异步分布式
- C# list删除 另外list里面的元素_[Python]列表(list)操作