From f31420eb7e260e2816fb45b6fe90fbae48f27c66 Mon Sep 17 00:00:00 2001 From: zhengshunjin <2667579369@qq.com> Date: Tue, 12 May 2026 08:33:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(book=5Fservice):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=B9=A6=E7=B1=8D=E6=9C=8D=E5=8A=A1=E4=B8=AD=E7=9A=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将重复的数据库更新操作提取为私有方法 _update_setting - 修复代码格式化问题,改进长表达式的可读性 - 统一设置更新的数据持久化处理方式 - 减少重复的数据库提交操作,提高性能 - 优化代码结构,增强维护性 --- app/services/book_service.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/services/book_service.py b/app/services/book_service.py index a8d9bd8..3439759 100644 --- a/app/services/book_service.py +++ b/app/services/book_service.py @@ -10,7 +10,8 @@ from app.models import Setting class BookService: def __init__(self): self.setting = Setting.query.filter_by(name="book_download").first().to_dict() - self.setting["targetDate"] = timestamp_to_datetime(datetime_to_timestamp(self.setting["targetDate"]) - 24 * 60 * 60) + self.setting["targetDate"] = timestamp_to_datetime( + datetime_to_timestamp(self.setting["targetDate"]) - 24 * 60 * 60) app_dir = os.path.dirname(os.path.dirname(__file__)) self.download_path = os.path.join(os.path.dirname(app_dir), "download") # 下载目录 self.today_timestamp = get_today_timestamp() @@ -40,7 +41,7 @@ class BookService: def isDownloadTarget(self, soup): # 是否是可以下载的文件 return soup.headers.get('Content-Type') in ['"application/octet-stream"', "application/octet-stream", - "text/plain","application/zip"] + "text/plain", "application/zip"] def post_page(self, name, url): # 帖子页面 print(f"详情页面 {self.setting["baseUrl"]}{url}") @@ -98,9 +99,7 @@ class BookService: if total_page_element is not None: # 总页数元素存在 则更新总页数 new_total_page = int(total_page_element.get("totalpage")) # 获取总页数 if self.setting["totalPage"] != new_total_page: # 总页数有更新 - self.setting["totalPage"] = new_total_page # 更新总页数 - Setting.query.filter_by(name="book_download").update({"totalPage": self.setting["totalPage"]}) - db.session.commit() + self._update_setting(totalPage=new_total_page) yield from self.section_page(new_total_page - self.setting["targetCountdownPage"]) # 重新跳转指点版块页面 return None @@ -133,9 +132,7 @@ class BookService: # yield f"data: 目标时间是{post_date}\n\n" yield from self.post_page(self.legitimate_naming(post_element.string), post_element['href']) # 跳转帖子页面 if post_date_timestamp > target_date_timestamp: # 帖子时间大于目标时间并且没有下一天时间 - self.setting["targetDate"] = post_date - Setting.query.filter_by(name="book_download").update({"targetDate": self.setting["targetDate"]}) - db.session.commit() + self._update_setting(targetDate=post_date) print(f"下一天是 {post_date}") # yield f"data: 下一天是 {post_date}\n\n" self.one_date_loading = False @@ -146,11 +143,8 @@ class BookService: "totalPage"] - 1: print("跳转到下一页") # yield f"data: 跳转到下一页\n\n" - self.setting["targetCountdownPage"] = min(self.setting["targetCountdownPage"] + 1, - self.setting["totalPage"] - 1) - Setting.query.filter_by(name="book_download").update( - {"targetCountdownPage": self.setting["targetCountdownPage"]}) - db.session.commit() + self._update_setting( + targetCountdownPage=min(self.setting["targetCountdownPage"] + 1, self.setting["totalPage"] - 1)) yield from self.section_page(self.setting["totalPage"] - self.setting["targetCountdownPage"]) return None @@ -168,3 +162,9 @@ class BookService: target_page = self.setting["totalPage"] - self.setting["targetCountdownPage"] # 目标页 yield from self.section_page(target_page) # 前往目标页 yield f"event: close\ndata: 已完成\n\n" + + def _update_setting(self, **kwargs): + Setting.query.filter_by(name="book_download").update(kwargs) + db.session.commit() + for key, value in kwargs.items(): + self.setting[key] = value