from functools import wraps
from flask import session, redirect, url_for
# 登录限制的装饰器
def login_required(func):
@wraps(func)
def wrapper(*args,**kwargs):
if session.get['user_id']:
return func(*args,**kwargs)
else:
return redirect(url_for('login'))
return wrapper()
使用wrapper()时,报异常
Traceback (most recent call last):
File "D:/developer/pycharm/project/myapp/myapp.py", line 15, in <module>
@login_required
File "D:\developer\pycharm\project\myapp\decorators.py", line 23, in login_required
return wrapper() #不能return wrapper()
File "D:\developer\pycharm\project\myapp\decorators.py", line 19, in wrapper
if session.get['user_id']:
File "E:\workspace\virtualenv\venv2\lib\site-packages\werkzeug\local.py", line 347, in __getattr__
return getattr(self._get_current_object(), name)
File "E:\workspace\virtualenv\venv2\lib\site-packages\werkzeug\local.py", line 306, in _get_current_object
return self.__local()
File "E:\workspace\virtualenv\venv2\lib\site-packages\flask\globals.py", line 37, in _lookup_req_object
raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.
This typically means that you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.正确写法:
from functools import wraps
from flask import session, redirect, url_for
# 登录限制的装饰器
def login_required(func):
@wraps(func)
def wrapper(*args,**kwargs):
if session.get['user_id']:
return func(*args,**kwargs)
else:
return redirect(url_for('login'))
return wrapper
本文探讨了Flask框架中装饰器的使用,特别是在遇到wrapper()函数导致异常的情况时,解析了错误原因并提供了相应的解决策略。
476

被折叠的 条评论
为什么被折叠?



