ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

17、Falsk装饰器

2022-06-04 02:00:55  阅读:145  来源: 互联网

标签:__ 函数 17 Flask Falsk news 装饰 def


装饰器的定义和基本使用

from flask import Flask  # 导入Flask模块

app = Flask(__name__)  # Flask初始化

# 主页,显示 Hello World
@app.route("/")  # 定义路由
def hello_world():  # 定义函数
    return "Hello World!"  # 返回值


# 1、定义装饰器
def user_login(func):  # 定义函数,使用func接收函数作为参数
    def inner():  # 定义inner()函数
        print("登录操作")  # 打印到终端输出
        func()  # 执行func函数

    return inner  # 返回inner函数,不是返回函数的结果


# 2、使用装饰器
@user_login
def news():  # news 函数作为装饰器的输入
    print("这是新闻详情页")  # 打印到终端输出


# 3、调用news,将回溯到装饰器函数。最终打印 "登录操作\n这是新闻详情页"
news()


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

对带参数的函数使用装饰器

from flask import Flask  # 导入Flask模块
from functools import wraps  # 导入相应模块

app = Flask(__name__)  # Flask初始化

# 主页
@app.route("/")  # 定义路由
def hello_world():  # 定义视图函数
    return "Hello World!"  # 返回值


# 1、定义装饰器
def user_login(func):  # 定义函数user_login
    @wraps(func)  # 使用functools.wraps在装饰器的函数上,把传进来的函数进行包裹
    def inner(*args, **kwargs):  # 定义内部函数inner
        print("登录操作!")  # 打印输出
        func(*args, **kwargs)

    return inner  # 返回inner


# 2、使用无参数的装饰器
@user_login  # 使用装饰器
def news():  # 定义函数news()
    print(news.__name__)  # 打印输出此时的函数名称为 news
    print("这是新闻详情页!")  # 打印输出


# 调用函数news(),然后向上回溯到装饰器函数
news()

# 3、使用有参数的装饰器
@user_login  # 使用装饰器
def news_list(*args):  # 定义函数news_list
    page = args[0]  # 元祖args[0]赋值给page
    print(news_list.__name__)  # 打印输出函数名为 news_list
    print("这是新闻列表页的第" + str(page) + "页!")  # 打印输出


# 调用函数news_list,然后向上回溯到装饰器函数
news_list(5)
if __name__ == "__main__":  # 当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被执行
    app.run()

参考资料

https://weread.qq.com/web/reader/0a932660718ac6bc0a9702e

标签:__,函数,17,Flask,Falsk,news,装饰,def
来源: https://www.cnblogs.com/tiansz/p/16341148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有