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