def permission_required(permission):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.can(permission):
abort(403)
return f(*args, **kwargs)
return decorated_function
return decorator
def admin_required(f):
return permission_required(Permission.SMY)(f)
def page():
if user == 'admin':
form = Form()
if request.method=='POST':
db.session.add(form)
db.session.commit()
flash("success")
return 0
@admin_check
def page():
form = Form()
if request.method=='POST':
db.session.add(form)
db.session.commit()
flash("success")
return 0
def admincheck(func):
if user=='admin':
return func
def page():
form = Form()
if request.method=='POST':
db.session.add(form)
db.session.commit()
flash("success")
return 0
page = admincheck(page())
def admincheck(func):
def inner(arg):
if user == 'admin':
if arg == 'false':
abort(403)
return func(arg)
return inner
def admin_required(f): return permission_required(Permission.SMY)(f)
def permission_required(permission):
#通过形参实现了一个装饰器类。对于不同针对性的装饰器,都可以调用这个函数的实现,而只需要做最小的改动(传递形参)
def decorator(f):
#这个才是装饰器开始执行的第一步
@wraps(f)
#这个装饰器实际上是为了保证函数的原始属性不发生改变。所谓原始属性,指的是__name__ 这种属性
def decorated_function(*args, **kwargs):
#这个装饰器方法把原函数的形参继承了。因此实际上相当于在原函数开头增加了这个函数的内容
if not current_user.can(permission):
#这个地方很明显。current_user是从内存中取(服务端),然后permission就会根据我们实际需要验证的permission进行形参到实参的转化
abort(403)
#明显的异常处理,当然,403是一个粗暴的方法。更粗暴的方法,我会用redirect(url_for(logout))...
return f(*args, **kwargs)
#结束判断,把参数传递给原函数(此处的f()即是原函数(更具体的权限验证装饰器),只是f是个丑陋的形参而已)
return decorated_function
return decorator
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有