在flask中处理javascript输出后重新加载页面

car*_*arl 5 javascript python ajax flask

我有一个 javascript 片段,它使用 ajax 将电子邮件地址发送到我的flask views.py 脚本。如果电子邮件不在我的数据库中,我想向该地址发送一条消息,或者以其他方式重新加载网站并显示该电子邮件地址的用户信息。这是我的 javascript 代码,它将数据发送到我的 views.py

<script type='text/javascript'>
    $(".send_invite_message").click(function(evt) {

        var Toemail = document.getElementById('To').value
        $.ajax({
            url: "/send_invitation_member",
            type: "GET",
            async: true,
            cache: false,
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            data: { email: Toemail}, 
            success: function(data) {
                ///do something
            },
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

在烧瓶中,我现在可以选择发送电子邮件,如果数据库中已经存在电子邮件以重新加载站点

@app.route('/send_invitation_member', methods=['GET'])
def send_invitation_member():

    if request.method == 'GET':
        email = request.args.get('email')

        search_result = check database for email entry
        if search_result:
            return render_template('show_members.html')
        else:
            send message and return json object
Run Code Online (Sandbox Code Playgroud)

但是 ajax 脚本需要返回一个 json 对象,所以我不知道如何重新加载站点并显示用户信息。有什么方法可以直接在烧瓶中执行此操作,还是需要扩展我的 javascript 代码并从那里加载站点?谢谢卡尔

F B*_*aut 3

由于 AJAX 响应无法直接影响调用它的页面,因此您需要稍微扩展您的 javascript(但只是一点点)。

在您的成功函数中,我们添加以下内容:

success: function(data) {
    if (data['url'] != null) document.location = data['url'];
    else console.log('Got a valid JSON response, but no URL!');
}
Run Code Online (Sandbox Code Playgroud)

此代码会将页面重定向到 JSON 使用其“url”键指定的位置。现在剩下的就是将其添加到我们的 Flask 代码中。

@app.route('/show_members')
def show_members():
    return render_template('show_members.html')

@app.route('/somewhere_else')
def some_other_route():
    return "It all works!"

@app.route('/send_invitation_member', methods=['GET'])
def send_invitation_member():

        email = request.args.get('email')
        search_result = check database for email entry

        if search_result:
            destination = url_for('.show_members')
        else:
            destination = url_for('.some_other_route')
            send message and return json object

        return Response(response=json.dumps({'url': destination}, mimetype='text/json')
Run Code Online (Sandbox Code Playgroud)

我发现使用 Flask 时,最好根据 HTTP 方法将路由分成不同的函数。那么 url_for 方法呢?这是一个救星。你可以在这里找到它的文档http://flask.pocoo.org/docs/0.10/api/#flask.url_for