Flask小贴士
2017-10-10 本文已影响15人
老男人一枚的博客
404跳转页面
定义404跳转页面
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
手动跳转404
abort(404)
SECRET_KEY的生成
import os
os.urandom(24)
多个url指向
@app.route('/')
@app.route('/index')
不管post/get使用统一的接收
from flask import request
args = request.args if request.method == 'GET' else request.form
a = args.get('a', 'default')
获取post提交中的checkbox
{%for page in pages %}
<tr><td><input type=checkbox name=do_delete value="{{ page['id'] }}"></td><td>
{%endfor%}
page_ids = request.form.getlist("do_delete")
在request开始结束dosomething
from flask import g
app = .....
@app.before_request
def before_request():
g.session = create_session()
@app.teardown_request
def teardown_request(exception):
g.session.close()
注册Jinja2模板中使用的过滤器
@app.template_filter('markdown')
def markdown(value):
u'''
markdown
'''
renderer = HighlightRenderer()
markdown = mistune.Markdown(renderer=renderer)
return markdown(value)
模板中使用多个过滤器
{{ art.content|markdown|safe }}
注册Jinja2模板中使用的全局变量
JINJA2_GLOBALS = {'MEDIA_PREFIX': '/media/'}
app.jinja_env.globals.update(JINJA2_GLOBALS)
定义应用使用的template和static目录
app = Flask(__name__, template_folder=settings.TEMPLATE_FOLDER, static_folder = settings.STATIC_PATH)
上传文件
<form action="/image/upload/" method="post" enctype="multipart/form-data">
<input type="file" name="upload" />
接收
f = request.files.get('upload')
img_data = f.read()
直接返回某个文件
return send_file(settings.TEMPLATE_FOLDER + 'tweet/tweet_list.html')
获取用户真实ip
real_ip = request.headers.get('X-Real-Ip', request.remote_addr)
return json & jsonp
import json
from flask import jsonify, Response, json
data = [] # or others
return jsonify(ok=True, data=data)
jsonp_callback = request.args.get('callback', '')
if jsonp_callback:
return Response(
"%s(%s);" % (jsonp_callback, json.dumps({'ok': True, 'data':data})),
mimetype="text/javascript"
)
return ok_jsonify(data)
在flask中执行sql
sql = 'select * from table'
db.session.connection().execute(sql).fetchall()
返回如下格式
[(u'Wendy Williams, wendy@aol.com',)]