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 代码并从那里加载站点?谢谢卡尔
由于 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