我一直在遵循有关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 %}
© 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 %}
答案 0 :(得分:0)
该错误非常可读且有用:
TypeError: 'method' object is not subscriptable
“不可下标”表示您正在对不支持它的对象调用[keyword]
。错误甚至告诉您对象是'method'
,即.get
是您在订阅之前调用的方法。
重复发表的评论(应作为答案发布):
request.form.get['username']
应该是request.form['username']
或request.form.get('username')