如何在Python中创建两个装饰器来执行以下操作?
@makebold
@makeitalic
def say():
return "Hello"
Run Code Online (Sandbox Code Playgroud)
...应该返回:
"<b><i>Hello</i></b>"
Run Code Online (Sandbox Code Playgroud)
我不是试图HTML在一个真实的应用程序中这样做 - 只是试图了解装饰器和装饰器链是如何工作的.
我正在使用login_required装饰器和另一个分页输出数据的装饰器.重要的是哪一个先来?
我装饰了一个方法login_required,但我很惊讶它根本没有执行,允许匿名用户.current_user在方法内打印返回:
<flask_login.AnonymousUserMixin object at 0xb67dbd4c>
Run Code Online (Sandbox Code Playgroud)
是不是应该拒绝那些返回false的用户user.is_autheticated()?我做错了什么?
我这样设置了FL:
lm = LoginManager(app)
lm.login_view = 'root'
Run Code Online (Sandbox Code Playgroud)
在views.py中:
@lm.user_loader
def load_user(id):
return User.query.get(int(id))
Run Code Online (Sandbox Code Playgroud)
实际观点:
@login_required
@app.route("/messages")
def messages():
print "current user", current_user
return "hello world"
Run Code Online (Sandbox Code Playgroud) 我创建了一个处理身份验证的蓝图.此蓝图使用Flask-Login.并具有以下内容,以及未显示的更多代码.
在蓝图中我有以下内容:
from flask.ext.login import LoginManager
from flask.ext.login import UserMixin
from flask.ext.login import current_user
from flask.ext.login import login_required
from flask.ext.login import login_user
from flask.ext.login import logout_user
auth_print = Blueprint('auth_print', __name__)
login_manager = LoginManager()
login_manager.login_view = '/login'
class User(UserMixin):
user_store = {} # Stores the users that are already logged in.
def __init__(self, user_id):
self.user_store[user_id] = self # add the user to the user_store
self.username = user_id # the user_id is in fact the username
self.id = unicode(user_id)
def sign_out(self):
logout_user() …Run Code Online (Sandbox Code Playgroud)