python - 只需在 flask 中登录系统并出现 "Method Not Allowed"错误

标签 python html postgresql heroku flask

我正在尝试用 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/

相关文章:

使用求解器进行 Python 优化

python - 简单的python正则表达式找不到字(在空格字符内)

python - Elasticsearch无法获取python代码中的所有文档

html - div 之间的额外空间从何而来?

javascript - JS CSS 时钟在 IE 中不工作

html - 如何在 CSS 中选择 contentEditable = true 的元素?

mysql - 来自多个模型的包含、选择、排序、限制(单个查询)

python - 从不同的工作目录导入 Python 模块

ruby-on-rails - 在 Rails 应用程序中向 PostgreSQL 提供 SSL 证书

sql - 其他用户能否闯入我的sql操作序列?