首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask Sijax处理@app.before_request中的回调

Flask Sijax处理@app.before_request中的回调
EN

Stack Overflow用户
提问于 2016-07-22 07:32:13
回答 1查看 448关注 0票数 0

我在Flask应用程序中的@app.before_request中有回调。

代码语言:javascript
复制
@app.before_request
def before_request():

  def alert(response):
    response.alert('Message')

  if g.sijax.is_sijax_request:
    g.sijax.register_callback('alert', alert)
    return g.sijax.process_request()

我这样做的原因是因为Ajax请求出现在我的应用程序的每个页面上。这种方法工作得很好,直到我想要有一个特定于页面的回调,即在一个视图中使用Sijax定义一个AJAX请求,因为if g.sijax.is_sijax_request:被使用了两次,所以我不能注册特定于一个视图的回调。

是否有解决此问题的方法?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-25 22:52:38

在after_request事件中注册您的默认回调,并检查_callback字典是否为空,如果是,则注册默认回调,否则在现有响应上传递。

代码语言:javascript
复制
import os
from flask import Flask, g, render_template_string
import flask_sijax

path = os.path.join('.', os.path.dirname(__file__), 'static/js/sijax/')

app = Flask(__name__)
app.config['SIJAX_STATIC_PATH'] = path
app.config['SIJAX_JSON_URI'] = '/static/js/sijax/json2.js'

flask_sijax.Sijax(app)


@app.after_request
def after_request(response):

    def alert(obj_response):
        print 'Message from standard callback'
        obj_response.alert('Message from standard callback')

    if g.sijax.is_sijax_request:
        if not g.sijax._sijax._callbacks:
            g.sijax.register_callback('alert', alert)
            return g.sijax.process_request()
        else:
            return response
    else:
        return response

_index_html = '''
<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="/static/js/sijax/sijax.js"></script>
    <script type="text/javascript"> {{ g.sijax.get_js()|safe }}</script>
</head>
<body>
    <a href="javascript://" onclick="Sijax.request('alert');">Click here</a>
</body>
</html>
'''

_hello_html = '''
<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="/static/js/sijax/sijax.js"></script>
    <script type="text/javascript"> {{ g.sijax.get_js()|safe }}</script>
</head>
<body>
    <a href="javascript://" onclick="Sijax.request('say_hi');">Click here</a>
</body>
</html>
'''


@app.route('/')
def index():
    return render_template_string(_index_html)


@flask_sijax.route(app, '/hello')
def hello():
    def say_hi(obj_response):
        print 'Message from hello callback'
        obj_response.alert('Hi there from hello callback!')

    if g.sijax.is_sijax_request:
        g.sijax._sijax._callbacks = {}
        g.sijax.register_callback('say_hi', say_hi)
        return g.sijax.process_request()

    return render_template_string(_hello_html)


if __name__ == '__main__':
    app.run(port=7777, debug=True)   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38515970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档