javascript - Flask 重定向混合内容错误,url 不是 https
问题描述
我正在开发一个 Flask 应用程序。我的一个观点包含动态创建的元素。为了收集值并将它们写入我的 MongoDB 数据库,我创建了一个 JS 脚本,它遍历元素并将值提取到 JS 变量中。之后,我通过 AJAX $.post()方法将它们发布到我的 Flask 后端。该部分工作正常,但是当我的@app.route
功能结束时,我尝试重定向到另一个登录页面,我收到以下错误:
混合内容:“ https://cocktail-recipe-book-gabyguedezh.c9users.io/get_add_cocktail_form ”页面通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“ http://cocktail-recipe-book-gabyguedezh.c9users ” .io/get_my_recipes '。此请求已被阻止;内容必须通过 HTTPS 提供。
POST 本身被执行并且表单将文档发送到我的数据库,但是,重定向不会发生。
整个后端路由如下所示:
@app.route('/write_to_cocktail_database', methods=['POST'])
def write_to_cocktail_database():
recipes = mongo.db.recipes
recipes.insert_one(request.json)
return redirect(url_for('get_my_recipes'))
以防万一,AJAX 函数如下所示:
$.ajax({
url: formUrl,
// data: {'data': steps},
data: JSON.stringify({recipe_name, recipe_url, recipe_description,
recipe_image, is_vegan, ingredients, steps,
base_spirit, cocktail_type, flavour_profile,
author_name, recipe_rating, number_of_votes}, null, '\t'),
type: 'POST',
contentType: 'application/json;charset=UTF-8',
success: function(response) {
console.log('success');
},
error: function(error) {
console.log('error', error);
}
});
我尝试了以下方法:
SSL 用于特定视图,如这里所示
我试图在我的应用程序开头复制该代码(包括导入),然后使用@ssl_required
下面的装饰器,如下所示@app.route
:
@app.route('/write_to_cocktail_database', methods=['POST'])
@ssl_required
def write_to_cocktail_database():
<rest of function>
return redirect(url_for('get_my_recipes'))
get_my_recipes
我要重定向到的路线在哪里。这没有用
我还尝试使用函数内部的替换方法来解决它,如下所示:
if request.url.startswith('http://'):
request.url = request.url.replace('http://', 'https://', 1)
这也不起作用,因为我不知道如何将修改后的 URL 提供给重定向url_for
(并且简单地做redirect(modified_url_as_string)
也不起作用)。
现在,我知道该get_my_recipes
路线适用于其他重定向,例如:
@app.route('/delete_cocktail/<recipe_id>')
def delete_cocktail(recipe_id):
mongo.db.recipes.remove({'_id': ObjectId(recipe_id)})
return redirect(url_for('get_my_recipes'))
以上,删除一个食谱并重定向到“我的食谱”页面。
我不确定为什么我编写的 AJAX 函数中的 POST 不会重定向我,但来自常规 HTML 的 POST<form>
确实有效。
我也不确定如何使用我找到的片段中的装饰器(在上面的链接中),因为我只是在路由工作之前添加了装饰器。
我还尝试了其他解决方法,例如通过 jQuery 在 AJAX 函数的成功部分上进行window.location.href = "https://cocktail-recipe-book-gabyguedezh.c9users.io/get_my_recipes";
重定向(它还抱怨重定向不安全)。我试图通过简单地解决重定向,render_template('my_recipes.html')
但这也不起作用,似乎它必须是路由返回的重定向。
我是 Web 开发和 Flask 的新手,所以我不确定如何使用我在其他 SO 答案中找到的片段(例如,接受的答案似乎是我放置在所有路线之前的一般装饰器,但是这导致“重定向错误太多”,在评论中模糊地解决了,我不知道这意味着什么)。
我一直在寻找我可以使用的答案,但我很沮丧,因为我发现的大多数答案都假设了 Flask 的工作知识,并且大多数没有提供关于如何使用代码的简明示例(例如1)。
我将非常感谢这里的某种方向,我不知道如何继续。
解决方案
推荐阅读
- r - 检查 write_xlsx 是否已正确执行并且文件是否已写入
- amazon-ec2 - 将 scylla 集群切换到大型 aws 实例的简单方法
- sql - 为什么没有在 SQL Server 2008 (Visual Studio 2010) 中创建用户实例?
- python - 是否可以将两个预先存在的数据库合并到一个前端?
- c# - C#异步LCD写
- angular - Angular github 页面路径具有重复的应用程序名称
- django - 如何在保存模型方法 DJANGO 中获取绝对 url?
- angular - Prime NG 的可编辑表上的奇怪行为
- perl - Perl:Windows 与 Unix 上的 exec()
- uilocalnotification - iOS 13本地通知未发送