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',)]
上一篇下一篇

猜你喜欢

热点阅读