我希望先提交一个帖子请求并移动到flask中的不同页面

问题描述 投票:0回答:1

要求:

我的 html 页面中有一个表单,我们可以在其中上传文件并发布它们。发布文件后,我希望将其保存在后端,然后单击即可进入我的应用程序的下一页。

我的用于提交/发布此表单的 JavaScript 代码。

submitButton.addEventListener("click", function(event) {
                    event.preventDefault();
                    var formData = new FormData(form);  
                    var redirect_url = '{{ url_for("UploadLoads") }}?link=' + link;                  
                    fetch(redirect_url , {
                        method: 'POST',
                        body: formData               
                    })
                    .then(response => {
                        const contentType = response.headers.get("content-type");
                        if (contentType && contentType.includes("application/json")) {
                            return response.json().then(data => {
                                throw new Error(data.message); }  
                        else {
                            throw new Error("Unknown error occurred");
                        }
                    })
                    .then(data => {
                                window.location.href = link;                                 
                        })
                    .catch(error => {
                        console.error('Error:', error);
                    });
                    window.location.href = link;  
                });

烧瓶代码:

@app.route('/loadsupload', methods=['POST'])

def UploadLoads():
    
    if request.method=='POST':
        link = request.args.get('link') 
        if "date_time" not in session or session["date_time"] == None:

            session["date_time"]        = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
            
            if session["date_time"] not in os.listdir(get_session_data("user_dir")):
                os.mkdir(get_session_data("session_dir"))
                description=[]
                for i in range(1,len(request.files)+1):
                    file = request.files.get(f'file{i}')
                    if file:
                        filename = os.path.join(get_session_data("session_dir"), f'file{i}.xlsx')
                        file.save(filename)
                    text = request.form.get(f'description{i}', '')
                    description.append(text)
                session['Optitower load description']=description
                session['Optitower load family']=request.form['family']
                
    return jsonify({'redirect': link}), 200
    @app.route('/CoverForm/<path:variable>', methods=['GET', 'POST'])
    @UserPathChecks(check_name = "User Session")
    # @GetTime(name="Cover Form Without Userpath", level=" Coverform ")
    def CoverForm(variable):           
       tenders = None
       try:
         
        tenders = tender_data()

       except:
        print("not able to fetch tenders")
...............................................

逻辑解释

我正在使用UploadLoads()函数来获取上传的文件并将其保存到后端。 link 变量具有 url 路径,我希望在退出 UploadLoads() 函数后立即转到该路径,这意味着一旦保存我的文件,我希望我的应用程序转到“link”变量指定的下一页。 链接示例 链接=“CoverForm/”+brd+“/”+url

我面临的问题

有时,如果单击提交按钮,此上传加载就会被激活,并且我的文件会按照我想要的方式保存,但页面不会继续前进。第二次点击提交按钮时,页面向前移动,跳过文件保存功能。因此,我最终在后端得到两个文件夹,第一个文件夹包含文件,第二个文件夹包含其他数据。我希望只需单击一次即可保存文件和下一页

javascript python ajax flask
1个回答
0
投票
  1. 您在获取之外重定向
  2. 你的 Flask 也需要返回错误,以便 JavaScript 可以处理它
  3. 为什么在重定向时还要使用 fetch?只需发布并从服务器重定向到下一页。
© www.soinside.com 2019 - 2024. All rights reserved.