flask的常用功能


###判断用户是否登录

@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)

YOU MIGTH ENJOY

  • System design 4 - How to design a rate limiter
  • How I brought my cat to Canada 如何把猫咪带去加拿大
  • System Design 3 - 知乎匿名系统设计