鱼C论坛

 找回密码
 立即注册
查看: 1245|回复: 18

[技术交流] Python flask hook function

[复制链接]
发表于 2018-8-13 22:59:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 钩子函数
钩子函数是指在执行函数和目标函数之间挂载的函数, 框架开发者给调用方提供一个**point** -挂载点, 至于挂载什么函数有我们调用方决定, 这样大大提高了灵活性
2. 常用的钩子函数
*  `before_first_request` 处理第一次请求之前执行
```python
# 服务器被第一次访问执行的钩子函数
@app.before_first_request
def first_request():
    print("Hello World")
```
* `before_request` 在每次请求之前执行. 通常使用这个钩子函数预处理一些变量, 视图函数可以更好调用
```python
# 在服务器接收的请求还没分发到视图函数之前执行的钩子函数
@app.before_request
def before_request():
    # print("我勾住了每次请求")
    user_id = session.get("user_id")
    if user_id:
        g.user = "DaYe"
```

* `teardown_appcontext` 当APP上下文被移除之后执行的函数, 可以进行数据库的提交或者回滚
```python
@app.teardown_appcontext
def teardown(exc=None):
    if exc is None:
        db.session.commit()
    else:
        db.session.rollback()
    db.session.remove()
```

* `template_filter`, 增加模板过滤器
```python
@app.template_filter
def upper_filter(s):
    return s.upper()
```

* `context_processor` 上下文处理器, 返回的字典可以在全部模板中使用
```python
@app.context_processor()
def context():
    # 必须返回一个字典
    # hasattr(obj, attr) 判断obj是否有attr属性, 注意此时的attr应该是字符串
    if hasattr(g, "user"):
        return {"current_username": "DaYe"}
    else:
        # 注意: 必须返回一个字典
        return {}
```

* `errorhander`, 在发生一些异常时, 比如404错误, 就会自动调用对应的钩子函数
1. 发生请求错误时, 框架会自动调用相对钩子函数, 并向钩子函数传入`error`参数
2. 如果钩子函数没有定义`error`参数, 就会报服务器错误
3. 开发者可以通过`flask.abort`方法手动抛出异常, 比如发现输入的参数错误可以使用`abort(404)`来解决
```python
@app.errorhander(404)
def page_not_found(error):
    return render_template("error400.html"), 404


@app.errorhander(500)
def server_error(error):
    return render_template("error505.html"), 500
```
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 14:46:33 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 15:06:01 | 显示全部楼层

回帖奖励 +3 鱼币

吓得我以为是dll注入。。或者APIhook,进来发现不是。。
原谅我对Python第三方模块的无知
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 13:00:02 | 显示全部楼层
ganxie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 13:00:35 | 显示全部楼层

回帖奖励 +3 鱼币

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-15 16:50:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-20 18:00:55 | 显示全部楼层

回帖奖励 +3 鱼币

我怎么看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 09:11:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-30 09:13:39 | 显示全部楼层

回帖奖励 +3 鱼币

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-30 09:50:15 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-30 10:13:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-1 12:21:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-2 00:37:16 | 显示全部楼层

回帖奖励 +3 鱼币

这是为移动端编程吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-6 22:04:33 | 显示全部楼层

回帖奖励 +3 鱼币

6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 11:31:01 | 显示全部楼层

回帖奖励 +3 鱼币

不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 18:44:09 | 显示全部楼层

回帖奖励 +3 鱼币

看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-12 19:44:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 19:45:29 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 19:57:38 | 显示全部楼层

我怎么也看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 19:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表