class UserCache(UserMixin): """用户表缓存""" userid: str username: str alternative_id: str homepage: str permissions: list def get_id(self): """使用替代用户ID,当账号信息发生变化时,替代ID更改为新的随机生成的值,确保他们的旧身份验证会话不再有效。""" return self.alternative_id @staticmethod def add_user_cache(alternative_id: str, **kwargs): """添加user缓存""" user_key = f"{PROJECT_NAME}-{alternative_id}" values = {"alternative_id": alternative_id} values.update(kwargs) redis_client.hmset(user_key, values) redis_client.expire(user_key, SIGNIN_LIFETIME) return True @staticmethod def del_user_cache(alternative_id: str): """删除user缓存""" redis_client.delete(f"{PROJECT_NAME}-{alternative_id}") return True @staticmethod def get_user_cache(alternative_id) -> object: """获取user缓存""" user_cache_dict = redis_client.hgetall(f"{PROJECT_NAME}-{alternative_id}") if user_cache_dict: user_cache = UserCache() user_cache.userid = user_cache_dict.get('userid') user_cache.username = user_cache_dict.get('username') user_cache.alternative_id = user_cache_dict.get('alternative_id') user_cache.homepage = user_cache_dict.get('homepage') user_cache.permissions = user_cache_dict.get('permissions').split(",") # redis里存的是字符串,转为列表 return user_cache 帮我优化并建议这段代码
时间: 2024-02-16 21:04:47 浏览: 74
1. 建议添加类型注解,使代码更加可读和可维护。
2. `add_user_cache` 和 `del_user_cache` 方法返回值可以直接使用 `redis_client.hmset` 和 `redis_client.delete` 方法的返回值,不需要返回 `True`。
3. `get_user_cache` 方法中应该对 `user_cache_dict.get('permissions')` 的返回值进行判断,如果返回 None,应该设置一个默认值,而不是直接使用 `split` 方法。
4. 在 `get_user_cache` 方法中,可以使用字典推导式对 `UserCache` 对象的属性进行赋值,代码更加简洁。
下面是优化后的代码:
```
class UserCache(UserMixin):
"""用户表缓存"""
userid: str
username: str
alternative_id: str
homepage: str
permissions: list[str]
def get_id(self) -> str:
"""使用替代用户ID,当账号信息发生变化时,替代ID更改为新的随机生成的值,确保他们的旧身份验证会话不再有效。"""
return self.alternative_id
@staticmethod
def add_user_cache(alternative_id: str, **kwargs) -> bool:
"""添加user缓存"""
user_key = f"{PROJECT_NAME}-{alternative_id}"
values = {"alternative_id": alternative_id, **kwargs}
return redis_client.hmset(user_key, values) == len(values)
@staticmethod
def del_user_cache(alternative_id: str) -> bool:
"""删除user缓存"""
return redis_client.delete(f"{PROJECT_NAME}-{alternative_id}")
@staticmethod
def get_user_cache(alternative_id: str) -> "UserCache":
"""获取user缓存"""
user_cache_dict = redis_client.hgetall(f"{PROJECT_NAME}-{alternative_id}")
if user_cache_dict:
permissions = user_cache_dict.get('permissions', '').split(",")
return UserCache(
userid=user_cache_dict.get('userid'),
username=user_cache_dict.get('username'),
alternative_id=user_cache_dict.get('alternative_id'),
homepage=user_cache_dict.get('homepage'),
permissions=permissions if permissions != [''] else []
)
```
注意,为了使代码更加简洁,我使用了 Python 3.9 的新特性——字典合并操作符 `**`。如果你使用的是 Python 3.8 或更早版本,可以将 `values` 和 `kwargs` 合并的方式改为 `values.update(kwargs)`。
阅读全文