2013-12-19 5 views
15

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, Daten zu meiner Flask Form einreichen:Flask Fehler: „Methode nicht erlaubte Das Verfahren ist für die angeforderte URL nicht erlaubt“

Method Not Allowed The method is not allowed for the requested URL. 

Ich denke, die Frage ist, in der return redirect(url_for('database')) mache ich. Ich habe auch versucht. Ich versuche, die Datenbankseite aufzurufen, sobald Formulareinträge an die Datenbank gesendet wurden.

Relevante Teile meines Codes sind wie folgt:

@app.route('/entry', methods=['GET', 'POST']) 
def entry_page(): 
    if request.method == 'POST': 
     date = request.form['date'] 
     title = request.form['blog_title'] 
     post = request.form['blog_main'] 
     post_entry = models.BlogPost(date = date, title = title, post = post) 
     db.session.add(post_entry) 
     db.session.commit() 
     return redirect(url_for('database')) 
    else: 
     return render_template('entry.html') 

@app.route('/database')   
def database(): 
    query = [] 
    for i in session.query(models.BlogPost): 
     query.append((i.title, i.post, i.date)) 
    return render_template('database.html', query = query) 

entry.html ist ...

THIS IS THE BLOG ENTRY PAGE 

blog: 
<html> 
    <form action='/database' method = "post"> 
     date<input name = "date" type = "text" class="text"> 
     title<input name = "blog_title" type = "text" class="text"> 
     main<input name = "blog_main" type = "text" class="text"> 
     <input type = "submit"> 
    </form> 
</html> 

und database.html ...

THIS IS THE QUERY: 

{{query}} 

Antwort

23

Was ist Hier passiert, dass die Datenbankroute keine URL-Methoden akzeptiert.

Ich würde versuchen, die URL-Methoden in der App Route setze genauso wie Sie in der entry_page Funktion haben:

@app.route('/entry', methods=['GET', 'POST']) 
def entry_page(): 
    if request.method == 'POST': 
     date = request.form['date'] 
     title = request.form['blog_title'] 
     post = request.form['blog_main'] 
     post_entry = models.BlogPost(date = date, title = title, post = post) 
     db.session.add(post_entry) 
     db.session.commit() 
     return redirect(url_for('database')) 
    else: 
     return render_template('entry.html') 

@app.route('/database', methods=['GET', 'POST'])   
def database(): 
    query = [] 
    for i in session.query(models.BlogPost): 
     query.append((i.title, i.post, i.date)) 
    return render_template('database.html', query = query) 
+0

Danke, das hat den Job gemacht. Obwohl es sich aus irgendeinem Grund nicht mehr um die Datenbank kümmert. –

+1

Das liegt daran, dass die Funktionalität zum Übergeben der Datenbank in der Funktion "entry_page" liegt, während Sie das Post-Formular für die Weiterleitung an die Datenbankfunktion verwenden. Sie können diese Logik aus der Funktion entry_page verschieben und in die Datenbankfunktion einfügen – Wondercricket

+0

Danke nochmal, das hat funktioniert! Ich bin mir nicht sicher, warum ich das verstehe. Ich bitte darum, Daten an die Datenbank zu senden, bevor die Weiterleitung erfolgt. Dies funktioniert, wenn ich auf eine andere Seite als '/ database' umadressiere. Wie auch immer, schätze deine Hilfe. –

1

Ich hatte ein ähnliches Problem, wenn ich meinen Flask App in der IIS-Einsatz. Anscheinend akzeptiert IIS keine Route, die eine Unterstreichung ("_") enthält. Als ich die Unterstreichung entfernte, wurde das Problem gelöst.

Verwandte Themen