四 .Flask 模板 中间件 特殊装饰器 基础知识(使用)

一 Flask 模板 中间件 特殊装饰器

1 .Flask 模板语法直接看面效果

https://www.cnblogs.com/lovershowtime/p/11349576.html    模板  和Django模板类似

edit.html<form>
    asdfasdf
    asdfasdf
    asdf
    asdf
    哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
</form>
login.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <h1>模板11111111</h1>
    {% block content %}

    {% endblock %}
</body>
</html>
show.html{% extends "login.html"%}     {#  引入继承模板 语法#}
{% block content %} {#  继承模板 语法#}

    {{users.0}}
    {{users[0]}}
    {{txt}}
    <!--{{txt|safe}}-->
   {{func(6)}}     {#  单个函数使用#}

     {{sb(1,9)}}       {# 这个装饰器  是全局装饰器直接调用 传参数#}

    {{ 1|db(2,3) }}       {#@app.template_filter()   使用这个装饰器 必须这样传参数#}

    {% if 1|db(2,3) %}
          <div>333</div>
    {% else %}
          <div>999</div>
    {% endif %}

    {% include "edit.html" %}    {#引入其他模板#}


{#    这Flask 里面的宏定义(相当一个函数)#}
    {% macro ccccc(name, type=‘text‘, value=‘‘) %}
        <h1>哈哈哈哈</h1>
        <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
        <input type="submit" value="提交">
    {% endmacro %}

     {{ ccccc(‘n1‘) }}    {# 这里相当于调用#}
     {{ ccccc(‘n2‘) }}    {# 这里相当于调用#}
      {{ ccccc(‘n3‘) }}    {# 这里相当于调用#}

{% endblock %}
app.py

from flask import Flask, request,jsonify,json,render_template,redirect,url_for,session,Markup,flash,get_flashed_messages

app=Flask(__name__)

# 全局定义函数
@app.template_global()     #  这个装饰器    装饰的函数可以全局使用  可以不用传参到模板中    而模板中可以直接使用或者调用
def sb(a1, a2):
    # {{sb(1,9)}}
    return a1 + a2
# 全局定义函数
@app.template_filter()   #  这个装饰器过滤    装饰的函数可以全局使用    可以不用传参到模板中    而模板中可以直接使用或者调用
def db(a1, a2, a3):
    # {{ 1|db(2,3) }}    传参方式
    return a1 + a2 + a3

def func(arg):       # 单个函数需要传参数到模板  使用
    return arg + 1

@app.route(‘/tpl/‘)
def tpl():
    context = {
        ‘users‘:[‘李四‘,‘展示给乌鸡‘,‘啦啦啦啦‘],
        ‘txt‘:Markup("<input type=‘text‘ />"),
        ‘func‘:func
    }
    return render_template(‘show.html‘,**context)
if __name__=="__main__":
    app.run()

2 .Flask 中间件

https://www.cnblogs.com/lovershowtime/p/11384508.html     django 中间件 但是和Flask中间件不一样

- call方法什么时候出发?
            - 用户发起请求时,才执行。
        - 任务:在执行call方法之前,做一个操作,call方法执行之后做一个操作。
from flask import Flask
app = Flask(__name__)
@app.route(‘/index‘)
def index():
    print(‘index‘)
    return "Index"

class Middleware(object):
    def __init__(self,old):
        self.old = old
    def __call__(self, *args, **kwargs):
        ret = self.old(*args, **kwargs)
        return ret

if __name__ == ‘__main__‘:
    app.wsgi_app = Middleware(app.wsgi_app)
    app.run()

 3. 特殊装饰器(有点向django中间)

      @app.template_global                 在模板中使用  定义全局使用的装饰器 (使用方法请看上面模板)

     @app.template_filter                  在模板中使用  定义全局使用的装饰器


@app.before_request  重点

@app.after_request   重点

before_request 没有返回 值的情况下 看图

from flask import Flask
app = Flask(__name__)
@app.before_request
def aa():
    print(‘aa1‘)
  

@app.after_request
def bb(cc):
    print(‘bb22‘)
    return cc

@app.route("/index/")
def index():
      print("index")

      return "index1111"
@app.route("/home/")
def home():
      print("home")
      return "home22222222"
if __name__ == ‘__main__‘:
    app.run()

  

before_request 有 返回值的情况下 看图
from flask import Flask
app = Flask(__name__)
@app.before_request
def aa():
    print(‘aa1‘)
    return "哈哈哈哈1111"

@app.after_request
def bb(cc):
    print(‘bb22‘)
    return cc

@app.route("/index/")
def index():
      print("index")

      return "index1111"
@app.route("/home/")
def home():
      print("home")
      return "home22222222"
if __name__ == ‘__main__‘:
    app.run()

  
from flask import Flask
app = Flask(__name__)
@app.before_first_request   不常用 了解
def x1():
    print(‘123123‘)

@app.route(‘/index/‘)
def index():
    print(‘index‘)
    return "Index"

@app.route(‘/home/‘)
def order():
    print(‘order‘)
    return "order"

@app.errorhandler(404)         不常用 了解
def not_found(arg): print(arg) return "没找到" 

if __name__ == ‘__main__‘:    app.run()

   

原文地址:https://www.cnblogs.com/lovershowtime/p/11735954.html

时间: 2024-10-13 21:32:45

四 .Flask 模板 中间件 特殊装饰器 基础知识(使用)的相关文章

Python开发基础-Day7-闭包函数和装饰器基础

补充:全局变量声明及局部变量引用 python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 global关键字用来在函数或其他局部作用域中使用全局变量,声明后可以在其他作用于中修改和使用 x=1 #全局赋值变量 def foo(): global x #函数内部全局声明变量x x=1111111 #函数内部修改全局变量x print(x) foo() print(x) global声明的变量在任何作用域都能够修改,所以一般非必要情

Python——装饰器基础

装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自己编写新的装饰器的更多高级语法. ================================================================================= 什么是装饰器 装饰是为函数和类指定管理代码的一种方式.Python装饰器以两种形式呈现: [1]函数装饰器在函数定义的时候进行名称重绑定,提供一个逻辑层来管理函数和方法或随后对它们的调

python学习系列之python装饰器基础(2)---装饰含返回值的函数

在上篇基础(1)中,我写了一个装饰器及使用方法,但是如果遇到一个函数带返回值的话,就不好使了,因此重写一个装饰器如下: #basic2.py #coding:utf-8 def auth(func):     def inner(*arg, **kwargs):         print 'before'         temp = func(*arg,**kwargs) #这行是关键,func相当于fetch_server_list         print 'after'       

Flask之基于route装饰器的路由系统(源码阅读解析)

一 路由系统 1. 在flask中配置URL和视图函数的路由时,首先需要在main.py中实例化一个app对象: 1 from flask import Flask, render_template 2 3 app = Flask(__name__) 2. 然后通过app实例的route方法装饰视图函数,实现路由的配置: 1 @app.route('/') 2 def hello_world(): 3 return 'Hellow World!' 3. 所有这里需要关注在Flask类里定义的ro

装饰器基础

1.示例 import time print(time.time()) #1559635927.77328...从 time.sleep(5) #让程序在执行到此位置停n秒 print('aaa') 2.在这个基础上,我们写一个函数 def func(): #计算函数执行时间(合并) start=time.time() list1=[1,2,3,4,5] s=int(input("请输入一个值:")) list1.append(s) for i in list1: print(i,en

python学习系列之python装饰器基础(1)

创建装饰器 # basic.py #首先定义一个装饰器auth: #一般装饰器 def auth(func):     def inner():         print 'before'         func()         print 'after'     return inner #带1个参数的装饰器 def auth_arg(func):     def inner(arg):         print 'before'         func(arg)         

python学习系列之python装饰器基础(5)---多装饰器的使用

有些时候,可能实际工作中需要同时使用多个装饰器,具体怎么用,见代码: #basic5.py def auth1(func):     def inner():         print 'before 1'         func()         print 'after 1'     return inner def auth2(func):     def inner():         print 'before 2'         func()         print '

python学习系列之python装饰器基础(6)---装饰器加参数

一.常规的装饰器,比如 @auth,执行2步操作: 1.执行auth函数,并传参func进来 2.获取返回值,并赋值给被装饰器的函数的函数名(如让fetch_server_list等于返回值) 二.而带参数的装饰器,比如 @auth(before,after),则执行3步操作: 1.执行auth(before,after)这个函数,得到返回值ret(假设返回值为ret) 2.创建装饰器,获取返回值,拼接为@ret 3.相当于@auth函数的2个步骤: 1)执行ret函数 2)将ret函数的返回值

四.Python迭代器生成器和装饰器

迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 凡是可作用于for循环的对象都是Iterable类型: 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象. Pyt