bul*_*117 7 python decorator flask python-decorators
尝试使用Python和Flask设置登录页面并获取错误:(
第33行是with @login_required)
Traceback (most recent call last):
File "routes.py", line 33, in <module>
@login_required
File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 1013, in decorator
self.add_url_rule(rule, endpoint, f, **options)
File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/app.py", line 942, in add_url_rule
endpoint = _endpoint_from_view_func(view_func)
File "/home/pi/FlaskTutorial/local/lib/python2.7/site-packages/flask/helpers.py", line 60, in _endpoint_from_view_func
assert view_func is not None, 'expected view func if endpoint ' \
AssertionError: expected view func if endpoint is not provided.
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,我似乎无法找到问题...任何想法?
from flask import *
from functools import wraps
app = Flask(__name__)
app.secret_key = 'secret key' #Use a random key generator
@app.route('/')
def home():
return render_template('home.html')
@app.route('/welcome')
def welcome():
return render_template('welcome.html')
def login_required(test):
@wraps(test)
def wrap(*args, **kwargs):
if 'logged_in' in session:
return test(*args, **kwargs)
else:
flash('You need to login first.')
return redirect(url_for('log'))
return wrap
@app.route('/logout')
def logout():
session.pop('logged_in', None)
flash('You were logged out')
return redirect (url_for('log'))
@app.route('/hello')
@login_required
def hello():
return render_template('hello.html')
@app.route('/log', methods=['GET', 'POST'])
def log():
error = None
if request.method =='POST':
if request.form['username'] != 'admin' or request.form['password'] != 'admin':
error = 'Invaled Credentials. Please try again.'
else:
session['logged_in'] = True
return redirect(url_for('hello'))
return render_template('log.html', error=error)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9000, debug=True)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 18
您将return wrap线缩进太多,现在您的装饰器返回一个None值.最后一行是Unindent:
def login_required(test):
@wraps(test)
def wrap(*args, **kwargs):
if 'logged_in' in session:
return test(*args, **kwargs)
else:
flash('You need to login first.')
return redirect(url_for('log'))
return wrap
Run Code Online (Sandbox Code Playgroud)
异常指向该@login_required行,因为下一个装饰器@app.route('/hello')在应用于输出时抛出异常@login_required.在AssertionError因为路线装饰传递一个异常明确地抛出None了函数值.
| 归档时间: |
|
| 查看次数: |
4635 次 |
| 最近记录: |