Tôi muốn các hàm khác nhau có thể thực thi chỉ khi người dùng đã đăng nhập có cấp quyền cần thiết.trang trí để đặt thuộc tính của hàm
Để làm cho cuộc sống của tôi phức tạp hơn, đơn giản là tôi muốn sử dụng trang trí. Dưới đây tôi cho rằng thiết lập thuộc tính permission
trên các chức năng 'được trang trí' - như được hiển thị bên dưới.
def permission(permission_required):
def wrapper(func):
def inner(*args, **kwargs):
setattr(func, 'permission_required', permission_required)
return func(*args, **kwargs)
return inner
return wrapper
@permission('user')
def do_x(arg1, arg2):
...
@permission('admin')
def do_y(arg1, arg2):
...
Nhưng khi tôi làm:
fn = do_x
if logged_in_user.access_level == fn.permission_required:
...
tôi nhận được một lỗi 'function' object has no attribute 'permission_required'
tôi thiếu gì?
Lưu ý: Tôi chắc chắn bạn muốn sử dụng ['functools.wraps'] (http://docs.python.org/2/library/functools.html#functools.wraps) đây. Không trực tiếp giải quyết vấn đề của bạn, nhưng vì không thể gỡ lỗi loại mã này khi mọi hàm kết thúc có tên 'inner', lấy' (* args, ** kwargs) ',' checking' đến nguồn sai, vv – abarnert