优化代码

develop
djq 3 months ago
parent 9633864a1a
commit f73cd08264

@ -1,46 +1,90 @@
import hashlib
import logging
from functools import wraps
from typing import Optional
# 定义明确业务属性的异常类(通常放在单独的 exceptions.py 中)
class BlogException(Exception):
"""博客系统基础异常类"""
pass
class CacheKeyGenerationError(BlogException):
"""缓存键生成失败(业务属性:缓存相关)"""
pass
class BlogSettingError(BlogException):
"""博客设置获取失败(业务属性:系统配置)"""
pass
class AvatarSaveError(BlogException):
"""用户头像保存失败(业务属性:用户资源)"""
pass
# 导入明确业务属性的异常(假设自定义异常类)
from djangoblog.exceptions import CacheKeyError
logger = logging.getLogger(__name__)
def cache_decorator(expiration):
def cache_decorator(expiration: int):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
def news(*args, **kwargs):
key: Optional[str] = None
try:
# 尝试从视图获取缓存键可能抛出AttributeError
view = args[0]
key = view.get_cache_key()
except AttributeError as e:
# 明确捕获视图无get_cache_key方法的异常
raise CacheKeyGenerationError(
f"视图对象无get_cache_key方法: {str(e)}"
) from e
except Exception as e:
# 使用明确业务属性的异常类型
raise CacheKeyError(f"生成缓存键失败: {str(e)}") from e
# 其他生成缓存键的异常(明确业务属性)
raise CacheKeyGenerationError(
f"缓存键生成失败: {str(e)}"
) from e
if not key:
# 生成替代缓存键
unique_str = repr((func, args, kwargs))
m = hashlib.sha256(unique_str.encode('utf-8'))
key = m.hexdigest()
# 后续缓存逻辑...
key = hashlib.sha256(unique_str.encode('utf-8')).hexdigest()
# 后续缓存逻辑(示例)
return func(*args, **kwargs)
return news(*args, **kwargs)
return wrapper
return decorator
return decorator
def get_blog_setting():
# 假设原逻辑
value = None
def get_blog_setting() -> dict:
"""获取博客设置(返回字典类型)"""
value: Optional[dict] = None
try:
# 业务逻辑获取value
pass
except:
logger.error("获取博客设置失败")
logger.info('set cache get_blog_setting')
# 确保所有分支返回类型一致(假设返回字典)
# 业务逻辑:从数据库或配置获取设置
# 示例value = BlogSettings.objects.first().to_dict()
value = {"site_name": "djangoblog"} # 模拟正常返回
except BlogSettingError:
# 已捕获明确业务异常,直接重新抛出
raise
except Exception as e:
# 其他异常包装为明确业务异常
raise BlogSettingError(f"获取博客设置失败: {str(e)}") from e
finally:
logger.info('set cache get_blog_setting')
# 确保返回类型始终为字典
return value or {}
def save_user_avatar(url):
def save_user_avatar(url: str) -> str:
"""
保存用户头像
:param url: 头像url
@ -48,10 +92,21 @@ def save_user_avatar(url):
"""
local_path = ""
try:
# 下载并保存头像的逻辑
local_path = "generated_local_path"
# 业务逻辑:下载并保存头像
# 示例:
# response = requests.get(url, timeout=5)
# local_path = f"avatars/{uuid.uuid4()}.jpg"
# with open(local_path, 'wb') as f:
# f.write(response.content)
local_path = "generated_local_path" # 模拟正常返回
except (ConnectionError, TimeoutError) as e:
# 捕获网络相关具体异常
raise AvatarSaveError(f"头像下载失败: {str(e)}") from e
except IOError as e:
# 捕获文件操作异常
raise AvatarSaveError(f"头像保存到本地失败: {str(e)}") from e
except Exception as e:
logger.error(f"保存用户头像失败: {str(e)}")
# 异常分支返回空字符串,保证返回类型一致
return ""
# 其他异常包装为明确业务异常
raise AvatarSaveError(f"保存用户头像失败: {str(e)}") from e
return local_path
Loading…
Cancel
Save