web-dev-qa-db-fra.com

Erreur de flacon: "Méthode non autorisée La méthode n'est pas autorisée pour l'URL demandée"

Le message d'erreur suivant s'affiche chaque fois que j'essaie de soumettre des données à mon formulaire Flask:

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

Je pense que le problème est dans le return redirect(url_for('database')) que je fais. J'ai aussi essayé return render_template('database.html) aussi. J'essaie d'appeler la page de base de données une fois que les entrées de formulaire ont été soumises à la base de données. 

Les parties pertinentes de mon code sont les suivantes:

@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 est ...

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>

et database.html ...

THIS IS THE QUERY:

{{query}}
22
Suraj Kapoor

Ce qui se passe ici, c'est que la route de base de données n'accepte aucune méthode d'URL.

Je voudrais essayer de mettre les méthodes d'URL dans la route d'application, tout comme vous avez dans la fonction entry_page:

@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)
31
Wondercricket

J'ai eu un problème similaire lorsque j'ai déployé mon application Flask dans IIS. Apparemment, IIS n'accepte pas les itinéraires comportant un soulignement ("_"). Lorsque j'ai supprimé le soulignement, le problème a été résolu.

2
Hossein

J'ai également eu le même problème où les redirections donnaient 404 ou 405 au hasard sur mon serveur de développement. C'était un problème avec des instances de gunicorn.

Il s'avère que je n'avais pas correctement arrêté l'instance gunicorn avant de commencer une nouvelle instance pour tester . Les deux processus fonctionnaient simultanément, écoutant le même port 8080 et se perturbant l'un l'autre .. j'ai continué à courir en arrière-plan après avoir tué tous mes terminaux . Je devais les tuer manuellement en utilisant fuser -k 8080/tcp

0
thegiantSmiley

Cette erreur peut parfois arriver si vous exécutez votre application Web sans enregistrer le fichier Python.

0
Venu Gopal Tewari