###判断用户是否登录
@app.route('/login', methods = ['GET', 'POST'])
@oid.loginhandler
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
Flask 中的 g 全局变量是一个在request生命周期中用来存储和共享数据。
传全局变量到模板
向 “模板” 里发送全局变量的方法
@app.context_processor
def global_variable():
return dict(globalvar='xxx')
对应的模板里 ``
配置文件的变量导入
#__init__.py
app = Flask(__name__)
app.config.from_object('config')
id = app.config['ID']
#/config/MyConfig.py
ID = '123456'
使用blueprint
需要先注册:
app.register_blueprint(blog, url_prefix='/group')
然后才能使用:
blog = Blueprint('blog', __name__, template_folder='templates', static_folder='static')
blog.route('/admin', methods=['GET', 'POST'])
def admin():
pass
这样,app的url_map就变成了’/blog/admin’。这样在nginx的配置里,再把blog.xxx.com/admin的请求,转发到/blog/admin,就能解决二级域名的问题。
session
Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。
from datetime import timedelta
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=5)
session['key'] = value
全局变量g
from flask import g
flask.g需要运行在app context中。(还有request, seesion都是在request context中。)而application context是可以快速创建和销毁的。
g now lives in the application context.Every request pushes a new application context.
before_request
@app.before_request
def before_request():
g.session = create_session()
@login_require
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if g.user is None:
return redirect(url_for('login', next=request.url))
return f(*args, **kwargs)
return decorated_function
@app.route('/secret_page')
@login_required
def secret_page():
pass
转义
使用escape进行转义
from flask import escape
str = escape(some_content)