flask-get/post/线程隔离g对象/钩子函数

Posted clairexxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-get/post/线程隔离g对象/钩子函数相关的知识,希望对你有一定的参考价值。

get:

通过request.args来获取

from flask import Flask, request
@app.route(/search/)
def search():
    # 获得参数字典
    args = request.args
    print(args)  # ImmutableMultiDict([(‘q‘, ‘hello‘)])
    print(args.get(q))  # hello
    return search

post:

技术分享图片
 1 from flask import Flask, url_for, redirect, render_template, session, request
 2 import config
 3 from db import db
 4 from models import Article
 5 
 6 app = Flask(__name__)
 7 app.config.from_object(config)
 8 
 9 @app.route(/)
10 def index():
11     return render_template(index.html)
12 
13 # 默认的视图函数采用get,如果使用post则需要注明
14 @app.route(/login, methods=[GET, POST])
15 def login():
16     if request.method == GET:
17         return render_template(login.html)
18     else:
19         username = request.form.get(username)
20         password = request.form.get(password)
21         return %s, %s % (username, password)
22 
23 if __name__ == __main__:
24     app.run()
value.py
技术分享图片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>{% block title %}{% endblock %}</title>
 6         <style>
 7         .nav{
 8             background: #DAD435;
 9             height: 65px;
10         }
11         ul{
12             overflow: hidden;
13         }
14         ul li{
15             float: left;
16             list-style: none;
17             padding: 0 10px;
18             line-height: 65px;
19         }
20         ul li a{
21             color: #ffffff;
22         }
23     </style>
24     {% block head %}{% endblock %}   <!--用于加载不同样式-->
25 </head>
26 <body>
27 <div class="nav">
28     <ul>
29         <li><a href="#">首页</a> </li>
30         <li><a href="#">发布问答</a> </li>
31         <li><a href="#">注册</a> </li>
32         <li><a href="{{ url_for(‘login‘) }}">登录</a> </li>
33         <li><a href="{{ url_for(‘search‘)}}">搜索</a> </li>
34     </ul>
35 </div>
36 {% block main %}{% endblock %}
37 
38 </body>
39 </html>
base.html
技术分享图片
 1 {% extends ‘base.html‘ %}
 2 
 3 {% block title %}
 4     登录页面
 5 {% endblock %}
 6 
 7 {% block main %}
 8     <form action="{{ url_for(‘login‘) }}" method="post">
 9         <table>
10             <tbody>
11             <tr>
12                 <td>用户名:</td>
13                 <td><input type="text" placeholder="请输入用户名" name="username"></td>
14             </tr>
15             <tr>
16                 <td>密码:</td>
17                 <td><input type="text" placeholder="请输入密码" name="password"></td>
18             </tr>
19             <tr>
20                 <td></td>
21                 <td><input type="submit" value="登录"></td>
22             </tr>
23 
24 
25             </tbody>
26         </table>
27     </form>
28 {% endblock %}
login.html

post通过flask.request.form获取

线程隔离g对象

from flask import g

绑定对象:

g.username = root    # 把username绑定到全局,所有地方都可以使用

使用:绑定后,会保存数据,在一次请求中所有的代码的地方均可使用,哪怕不是一个文件。只限一次请求内,访问下一个页面就不会存在了。

# 在utils.py
from flask import g
def login_log():
    print(g.username)

钩子函数:

  • before_request: 

装饰器, 可以把需设置为钩子函数的代码放在每一次视图函数执行之前执行

@app.before_request
def my_before_request():
    print(before all request)

 

  • context_processor:
@app.context_processor
def my_context_process():
    username = session.get(username)
    return {username: username}

上下文处理器会返回一个字典,字典中的key会被当成变量来渲染。

(每次请求的html中的username都会被自动填充进这个key的value值)

 

以上是关于flask-get/post/线程隔离g对象/钩子函数的主要内容,如果未能解决你的问题,请参考以下文章

Flask10 登录模块表单框架表单渲染表单验证bookie请求之前钩子g对象编写装饰器

窗口与消息

flask-06 flask上下文和钩子

SQLAlchemy多线程下事务隔离机制详解

SQLAlchemy多线程下事务隔离机制详解

如何优雅的关闭线程池?