关于Admin的query

来源:8-4 .访问权限控制

Grant_Lian

2017-09-13

def admin_auth(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        admin = Admin.query.join(
            Role
        ).filter(
            Role.id == Admin.role_id,
            Admin.id == session["admin_id"]
        ).first()
        auths = admin.role.auths
        auths = list(map(lambda v: int(v), auths.split(",")))
        auth_list = Auth.query.all()
        urls = [v.url for v in auth_list for val in auths if val == v.id]
        rule = request.url_rule
        if rule not in urls:
            abort(404)
        return f(*args, **kwargs)
    return decorated_function
    
 老师, 这个Admin.query.join(Role)就是把所有的role type全部取出来么?
 后面这个filter(Role.id == Admin.role_id,Admin.id == session["admin_id"]
).first()有点乱,不是很懂这个逻辑,能解释下么,谢谢老师
写回答

1回答

rustgopy

2017-09-14

同学,你好,相当于关联查询,关联查询的具体语句如下:

select * from admin left join role on role.id = admin.role_id where admin.id = 会话的session["admin_id"]

0
2
Grant_Lian
老师你怎么看出来是left join呢,我查了文档这个join就是普通join啊
2017-09-14
共2条回复

Python Flask 构建微电影视频网站

Python 最好用轻量级框架,让你轻松胜任 Python Web 工程师

683 学习 · 663 问题

查看课程