程序停止工作:现在我得到的只是我不理解的服务器错误

时间:2019-05-11 16:17:50

标签: python flask

我一直在遵循有关python和flask的相当标准的介绍,我是flask的新手,但是有几个月编写python的代码。

我得到的错误是:

  

文件“ C:/Users/danny/PycharmProjects/learning_flask/venv/hello.py”,   第26行,登录       session ['用户名'] = request.form.get ['用户名'] TypeError:“方法”对象不可下标   127.0.0.1--[11 / May / 2019 16:45:43]“ POST / login HTTP / 1.1” 500-

我已经完成了这项工作,我认为我对模板做了一些更改,那就是当模板停止工作时。我查看了stacktrace和其他来源的错误,似乎是在说@ app.route登录时有问题(但是每次代码和模板都可以正常工作的情况并没有帮助!如果仅显示了一些错误,如果有一个很棒的网站-会喜欢网址)。

import os

from flask import Flask, render_template, request, redirect, url_for, flash, make_response, session

app=Flask(__name__)
app.secret_key = "SuperSecretKey"

@app.route('/login', methods=['GET','POST'])
def login():
    error = None
    if request.method == 'POST':
    if valid_login(request.form['username'], request.form['password']):
        flash('Sucessfully logged in')
        session['username'] = request.form.get['username']
        return redirect(url_for('welcome'))
        # return redirect(url_for('help'))
    else:
        error = "There was an error with either the username or password"
        return render_template('login.html', error=error)

@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('login'))


@app.route('/')
def welcome():
    if username in session:
        return render_template('welcome.html', 
        username=session['username'])
    else:
        return redirect(url_for('login'))

def valid_login(username, password):
    if username == password:
        return True
    else:
        return False

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

应该加载登录页面,但找不到服务器,如果成功,请允许我进入欢迎页面,下面的模板我认为还可以,

Base.html

<head>
    {% block head %}
    <title>{% block title %}{% endblock %}</title>
    {% endblock %}
</head>

<body>
<h1>Lets Scamperdoodle</h1>

{% with messages = get_flashed_messages() %}

{% if messages %}
    <ul class="flashes">
        {% for message in messages %}
        <li>{{ message }}</li>
        {% endfor %}
    </ul>
{% endif %}

{% endwith %}

<div id="content">
    {% block content %}{% endblock %}
</div>
</body>

<footer>
    {% block footer %}
    &copy; Copyright 2019 <a href="http://scamperdoodle.co.uk"> Scamperdoodle</a>
    {% endblock %}
</footer>

login.html

{% extends "base.html" %}

{% block title %} Login page {% endblock %}

{% block content %}

<form action="{{url_for('login')}}" method="POST">

    {% if error %}
    <p style="color:red"> {{ error }} </p>
    {% endif %}

    <p>
        Username: <input type="text" name="username" />
    </p>

    <p>
        Password: <input type="password" name="password" />
    </p>

    <button type="Submit">Login</button>
</form>

{% endblock %}

1 个答案:

答案 0 :(得分:0)

该错误非常可读且有用:

TypeError: 'method' object is not subscriptable

“不可下标”表示您正在对不支持它的对象调用[keyword]。错误甚至告诉您对象是'method',即.get是您在订阅之前调用的方法。

重复发表的评论(应作为答案发布):

request.form.get['username']应该是request.form['username']request.form.get('username')