import functools
# 导入:
import json
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import redis
redis_store = redis.Redis(host='127.0.0.1', port=6379, db=0) # 操作的redis配置
# 创建对象的基类:
Base = declarative_base()
# 定义User对象:
class Admin(Base):
__tablename__ = "admin"
# 表的结构:
id = Column(String(20), primary_key=True)
username = Column(String(20))
def get_dict(self):
return {"id": self.id, "username": self.username}
# 初始化数据库连接:
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/caiji_dev')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
session = DBSession()
def admin_login_required(view_func):
# wraps 函数的作用是将wrapper内层函数的属性设置为被装饰函数view_func的属性
@functools.wraps(view_func)
def wrapper(*args, **kwargs):
key = "admin:" + str(kwargs["id"])
print(key)
cache_info = redis_store.get(key)
if cache_info:
return json.loads(cache_info)
user_info = view_func(*args, **kwargs)
redis_store.set(key, json.dumps(user_info), ex=100)
return user_info
return wrapper
@admin_login_required
def get_user(id: int):
## 这个写法是错误的,在flask alchemy中可以,但是原生的不行
## aaa = Admin.query().filter(Admin.id == id).one()
user = session.query(Admin).filter(Admin.id == id).one()
return {"id": user.id, "username": user.username}
if __name__ == '__main__':
res = get_user(id=1)
pass