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()
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>
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 %}
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对象/钩子函数的主要内容,如果未能解决你的问题,请参考以下文章