我正在尝试用 Flask 做一个简单的登录系统。我发现很多教程都对其进行了测试,然后尝试自己做一些事情。我在 Heroku 上运行我的应用程序并使用 postgresql 数据库。我有一些问题,但我不知道为什么?在数据库中有一个用户,当我输入登录名和密码然后提交时,出现如下错误:
Method Not Allowed
The method is not allowed for the requested URL.
这是带有登录表单的 index.html 片段:
<form class="form-signin" action="" method="post" name="login">
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" name="inputEmail" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
运行.py
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager, login_required
from flask import Flask,session, request, flash, url_for, redirect, render_template, abort, Blueprint
from flask.ext.login import login_user , logout_user , current_user , login_required
import views
app = Flask(__name__, template_folder='templates')
#config for Forms
app.config.update(DEBUG = True, SECRET_KEY = 'csefdfdf')
#import aplication views
app.register_blueprint(views.devops)
#conection to database
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ['DATABASE_URL']
db = SQLAlchemy(app)
#flask-login
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'index'
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html', title='DevOps Nokia')
email = request.form['inputEmail']
password = request.form['inputPassword']
admin = models.User.query.fillter_by(email=email, password=password).first()
if admin is None or admin.is_admin == False:
flash('Error, no user!')
return redirect(url_for('index'))
login_user(admin)
flash('Logged in successfully')
return redirect(request.args.get('next') or url_for('test'))
def run():
app.run(debug=True)
有人知道如何解决这个问题吗? 等待你的答案。 :)
最佳答案
您需要确保该函数的两个路由定义都定义了允许的方法:
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
至于400 Bad Request
错误 - 我相信你得到这个是因为你正在尝试访问 request.form['inputPassword']
, 但您的表单中没有带 name
的输入字段inputPassword
的属性.您需要添加 name
属性如下:
<input type="password" name="inputPassword" id="inputPassword" class="form-control" placeholder="Password" required>
此外,fillter
的使用似乎是一个错字:
admin = models.User.query.fillter_by(email=email, password=password).first()
应该是:
admin = models.User.query.filter_by(email=email, password=password).first()
关于python - 只需在 flask 中登录系统并出现 "Method Not Allowed"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43017185/