Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Flask重定向混合内容错误,url不是https_Javascript_Python_Redirect_Flask_Https - Fatal编程技术网

Javascript Flask重定向混合内容错误,url不是https

Javascript Flask重定向混合内容错误,url不是https,javascript,python,redirect,flask,https,Javascript,Python,Redirect,Flask,Https,我正在开发一个烧瓶应用程序。我的一个视图包含动态创建的元素。为了收集值并将其写入我的MongoDB数据库,我创建了一个JS脚本,该脚本遍历元素并将值提取到JS变量中。之后,我通过AJAX$.POST()方法将它们发布到Flask后端。该部分工作正常,但当到达我的@app.route功能的末尾时,我尝试重定向到另一个登录页,出现以下错误: 混合内容:通过HTTPS加载了“”处的页面,但请求了不安全的XMLHttpRequest终结点“”。此请求已被阻止;内容必须通过HTTPS提供 POST本身会被

我正在开发一个烧瓶应用程序。我的一个视图包含动态创建的元素。为了收集值并将其写入我的MongoDB数据库,我创建了一个JS脚本,该脚本遍历元素并将值提取到JS变量中。之后,我通过AJAX$.POST()方法将它们发布到Flask后端。该部分工作正常,但当到达我的
@app.route
功能的末尾时,我尝试重定向到另一个登录页,出现以下错误:

混合内容:通过HTTPS加载了“”处的页面,但请求了不安全的XMLHttpRequest终结点“”。此请求已被阻止;内容必须通过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({
    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);
    }
});
@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'))
if request.url.startswith('http://'):
        request.url = request.url.replace('http://', 'https://', 1)
为了以防万一,AJAX函数如下所示:

@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({
    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);
    }
});
@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'))
if request.url.startswith('http://'):
        request.url = request.url.replace('http://', 'https://', 1)
我尝试了以下方法:

如图所示,特定视图的SSL

我尝试在我的应用程序开始时复制该代码(包括导入),然后使用
@ssl\u required
装饰器在
@app下面。路径如下:

@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({
    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);
    }
});
@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'))
if request.url.startswith('http://'):
        request.url = request.url.replace('http://', 'https://', 1)
这也不起作用,因为我不知道如何将修改后的URL提供给重定向的
URL\u for
(而简单地执行
redirect(modified\u URL\u as\u 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'))
@app.route('/delete_鸡尾酒会/'))
def delete_鸡尾酒(配方id):
mongo.db.recipes.remove({''u-id':ObjectId(recipe-id)})
返回重定向(url_for('get_my_recipes'))
如上所述,删除一个配方并重定向到“我的配方”页面

我不确定为什么我编写的AJAX函数中的帖子没有重定向我,但是来自常规HTML
的帖子确实有效

我也不知道如何使用我在上面的链接中找到的代码片段中的decorator,因为我认为只需在路由开始工作之前添加decorator即可

我还尝试了其他解决方法,例如通过jQuery重定向AJAX函数的成功部分,如
window.location.href=”https://cocktail-recipe-book-gabyguedezh.c9users.io/get_my_recipes";(它还抱怨重定向不安全)。我试图通过简单地执行
render\u template('my\u recipes.html')
来解决重定向问题,但这也不起作用,似乎它必须是路线返回时的重定向

我是web开发和Flask的新手,所以我不知道如何使用我在其他so答案中找到的代码片段(例如,我在所有路线之前放置的公认答案似乎是一个通用的装饰器,但这会导致“太多重定向错误”,该错误在注释中被模糊地解决,我不知道它的含义)

我一直在寻找我可以使用的答案,但我很沮丧,因为我发现的大多数答案都假设了Flask的实用知识,并且大多数没有提供关于如何使用代码的简明示例(例如)


我非常希望能在这里提供一些指导,我不知道如何继续。

欢迎来到stackoverflow,非常好的第一个问题,做得很好:-)很遗憾,我没有时间给出完整的答案,但我想了解一些关于AJAX与表单提交重定向行为的提示。