2017-01-25 1 views
-1

Ich habe bereits hier gesucht und einige sehr ähnliche Probleme gefunden, aber da ich neu bei Python bin, fand ich es sehr schwierig, diesen Code zu debuggen.Immer wenn ich mich anmelde, erhalte ich "405: Methode für diese URL nicht erlaubt" Was mache ich falsch?

Ich mache eine einfache Blog-App, mit einer Datenbank für ein Login. Es läuft perfekt auf der IDE, aber wenn ich versuche, mich anzumelden, erhalte ich einen Fehler 405 und dass die "Methode nicht erlaubt ist."

Was habe ich falsch verstanden? Hier

from flask import Flask, render_template, request, session, \ 
flash, redirect, url_for, g 
import sqlite3 


SECRET_KEY = 'abc12345678910111213' 
# configuration 
DATABASE = 'blog.db' 

app = Flask(__name__) 
app.config.from_object(__name__) 

USERNAME = 'admin' 
PASSWORD = 'admin' 

def connect_db(): 
    return sqlite3.connect(app.config['DATABASE']) 

@app.route('/', methods=['GET', 'POST']) 
def login(): 
    error = None 
    status_code = 200 
    if request.method == 'POST': 
     if request.form['username'] != app.config['USERNAME'] or \ 
      request.form['password'] != app.config['PASSWORD']: 
     error = 'Invalid Credentials. Please Try again!' 
    status_code = 401 
else: 
    session['logged_in'] = True 
    return redirect(url_for('main')) 
return render_template('login.html', error=error), status_code 

@app.route('/main') 
def main(): 
    return render_template('login.html') 

@app.route('/logout') 
def logout(): 
    session.pop('logged_in', None) 
    flash('You were logged out') 
    return redirect(url_for('login')) 


if __name__ == '__main__': 
    app.run(debug=True) 

ist die Vorlage:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Welcome, Friends!</title> 
</head> 
<body> 
<div class="container"> 
    {% for message in get_flashed_messages() %} 
     <div class="flash">{{ message }}</div> 
    {% endfor %} 
    {% if error %} 
     <p class="error"><strong>Error:</strong> {{ error }}</p> 
    {% endif %} 
    <!--inheritance--> 
    {% block content %} 
    {% endblock %} 
    <!--end inheritance--> 
</div> 
</body> 
</html> 
+1

Ihr Einzug in login() ist falsch. Wie sieht Ihre Vorlage aus? Ich wette, dass Ihr Problem vom "Haupt" Endpunkt kommt, der keine 'POST' Anfrage erlaubt. Versuchen Sie '@ app.route ('/ main', Methoden = ['GET', 'POST']' – MrLeeh

+0

@MrLeeh Sie waren richtig, ich habe die Methoden get und post nicht angegeben. Danke – Guren

Antwort

0

Sie benötigen die POST Methode in der erlaubten Methoden des main Endpunkt enthalten:

@app.route('/main', methods=['GET', 'POST']) 
def main(): 
    # ... 
    pass 
Verwandte Themen