OiO.lk Community platform!

Oio.lk is an excellent forum for developers, providing a wide range of resources, discussions, and support for those in the developer community. Join oio.lk today to connect with like-minded professionals, share insights, and stay updated on the latest trends and technologies in the development field.
  You need to log in or register to access the solved answers to this problem.
  • You have reached the maximum number of guest views allowed
  • Please register below to remove this limitation

I wish to first submit a post request and move to different page in flask

  • Thread starter Thread starter R.S4697
  • Start date Start date
R

R.S4697

Guest
Requirement:

There is form in my html page where we can upload files and post them. After posting the files I wish to save it in the backend and then proceed to the next page of my application in a single click.

my javascript code for submit/posting this form.

Code:
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;  
                });

flask code:

Code:
@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")
...............................................

Logic Explaination

I am using this UploadLoads() function to get the uploaded files and save it the backend. The link variable has url path which I would like to go to as soon as I have exited my UploadLoads() function meaning as soon I as my files are saved, I want my application to go the next page specified by 'link' variable. example of link link="CoverForm/" +brd + "/" + url

Problem that I am facing

Sometimes if a click on submit button this uploadloads get activated and my files are saved the way I want them to but the page doesnt move ahead. The second time I hit the submit button the page moves forward skipping the file saving function. So I end up getting two folders in the backend first one which has the files and second which some other data. I want both saving the files and next page to happen in a single click only
<p><strong>Requirement:</strong></p>
<p>There is form in my html page where we can upload files and post them. After posting the files I wish to save it in the backend and then proceed to the next page of my application in a single click.</p>
<p>my javascript code for submit/posting this form.</p>
<pre><code>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;
});
</code></pre>
<p>flask code:</p>
<pre><code>@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")
...............................................
</code></pre>
<p><strong>Logic Explaination</strong></p>
<p>I am using this UploadLoads() function to get the uploaded files and save it the backend. The link variable has url path which I would like to go to as soon as I have exited my UploadLoads() function meaning as soon I as my files are saved, I want my application to go the next page specified by 'link' variable.
example of link
link="CoverForm/" +brd + "/" + url</p>
<p><strong>Problem that I am facing</strong></p>
<p>Sometimes if a click on submit button this uploadloads get activated and my files are saved the way I want them to but the page doesnt move ahead. The second time I hit the submit button the page moves forward skipping the file saving function. So I end up getting two folders in the backend first one which has the files and second which some other data. I want both saving the files and next page to happen in a single click only</p>
 

Latest posts

M
Replies
0
Views
1
Mohit Pant
M
Top