恭喜您,您已成功绑定邮箱。您可以使用%(oauth_type)s直接登录本站,无需密码。
@@ -166,11 +177,11 @@ def emailconfirm(request, id, sign):请点击下面的链接完成邮箱绑定
@@ -223,14 +236,14 @@ class RequireEmailView(FormView): """) % {'url': confirm_url} send_email(emailto=[email, ], title=_('绑定邮箱'), content=content) - redirect_url = reverse('oauth:bindsuccess', kwargs={'oauthid': oauth_id}) + redirect_url = reverse('oauth:bind_success', kwargs={'oauth_id': oauth_id}) redirect_url += '?type=email' return HttpResponseRedirect(redirect_url) -def bindsuccess(request, oauthid): - notify_type = request.GET.get('type', None) # 修复:重命名type为notify_type - oauth_user = get_object_or_404(OAuthUser, pk=oauthid) +def bind_success(request, oauth_id): # 修复:函数名加下划线,符合蛇形命名 + notify_type = request.GET.get('type', None) # 明确为"通知类型",避免与其他type重名 + oauth_user = get_object_or_404(OAuthUser, pk=oauth_id) if notify_type == 'email': title = _('绑定邮箱') diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py b/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py index fa1075a..7c569d6 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py @@ -15,13 +15,13 @@ class Migration(migrations.Migration): options={ 'get_latest_by': 'creation_time', 'ordering': ['creation_time'], - 'verbose_name': 'owntrack日志', # 修复:统一为中文命名 - 'verbose_name_plural': 'owntrack日志' # 修复:统一为中文命名 + 'verbose_name': 'owntrack日志', + 'verbose_name_plural': 'owntrack日志列表' # 复数形式明确化 }, ), migrations.RenameField( model_name='owntracklog', old_name='created_time', - new_name='creation_time', + new_name='creation_time', # 与项目中时间字段命名统一(如creation_time/last_modify_time) ), ] \ No newline at end of file diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/urls.py index 25b54f2..829ec00 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/owntracks/urls.py @@ -6,11 +6,11 @@ app_name = "owntracks" urlpatterns = [ # 日志管理(新增/查看/删除轨迹日志) - path('logs/manage/', views.manage_owntrack_log, name='manage_logs'), + path('logs/manage/', views.manage_owntrack_log, name='manage_owntrack_logs'), # 名称更精准 # 地图展示(可视化轨迹) path('maps/show/', views.show_maps, name='show_maps'), # 数据接口(获取轨迹数据用于渲染) - path('data/get/', views.get_datas, name='get_data'), + path('data/get/', views.get_data, name='get_data'), # 视图函数名修正为单数 # 日期筛选(展示可查询的日志日期列表) - path('dates/show/', views.show_log_dates, name='show_dates'), + path('dates/show/', views.show_log_dates, name='show_log_dates'), ] \ No newline at end of file diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/MemcacheStorage.py b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/MemcacheStorage.py index 119f36a..bea19a4 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/MemcacheStorage.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/MemcacheStorage.py @@ -5,28 +5,35 @@ from djangoblog.utils import cache class MemcacheStorage(SessionStorage): + """Memcache会话存储实现(继承自Werobot的SessionStorage)""" def __init__(self, prefix='ws_'): self.prefix = prefix self.cache = cache # 保持缓存对象引用 @property def is_available(self): - test_value = "1" # 修复:明确变量为测试值 - self.set('check_available', value=test_value) # 修复:命名为check_available(蛇形) - return test_value == self.get('check_available') - - def get_key_name(self, session_id): # 修复:方法名改为get_key_name(蛇形),参数明确为session_id - return f'{self.prefix}{session_id}' # 使用f-string简化格式 - - def get(self, session_id): # 修复:参数名id→session_id(明确为会话ID) - cache_key = self.get_key_name(session_id) # 修复:变量名id→cache_key(明确为缓存键) + """检查缓存是否可用(通过写入/读取测试值验证)""" + test_value = "1" + check_key = 'check_available' # 单独定义检查键名,提升可读性 + self.set(check_key, test_value) + return test_value == self.get(check_key) + + def get_key_name(self, session_id): + """生成带前缀的缓存键名(前缀+会话ID)""" + return f'{self.prefix}{session_id}' + + def get(self, session_id): + """根据会话ID获取会话数据(默认返回空字典)""" + cache_key = self.get_key_name(session_id) session_json = self.cache.get(cache_key) or '{}' return json_loads(session_json) - def set(self, session_id, value): # 修复:参数名id→session_id - cache_key = self.get_key_name(session_id) # 修复:变量名id→cache_key + def set(self, session_id, value): + """根据会话ID存储会话数据(自动序列化为JSON)""" + cache_key = self.get_key_name(session_id) self.cache.set(cache_key, json_dumps(value)) - def delete(self, session_id): # 修复:参数名id→session_id - cache_key = self.get_key_name(session_id) # 修复:变量名id→cache_key + def delete(self, session_id): + """根据会话ID删除会话数据""" + cache_key = self.get_key_name(session_id) self.cache.delete(cache_key) \ No newline at end of file diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py index 72d77b1..43b159e 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py @@ -14,23 +14,23 @@ class Migration(migrations.Migration): name='emailsendlog', options={ 'ordering': ['-creation_time'], - 'verbose_name': '邮件发送日志', # 修复:统一为中文命名 - 'verbose_name_plural': '邮件发送日志' # 修复:统一为中文命名 + 'verbose_name': '邮件发送日志', + 'verbose_name_plural': '邮件发送日志列表' # 复数形式明确化 }, ), migrations.RenameField( model_name='commands', old_name='created_time', - new_name='creation_time', + new_name='creation_time', # 与项目时间字段命名统一(creation_time) ), migrations.RenameField( model_name='commands', old_name='last_mod_time', - new_name='last_modify_time', + new_name='last_modify_time', # 与项目时间字段命名统一(last_modify_time) ), migrations.RenameField( model_name='emailsendlog', old_name='created_time', - new_name='creation_time', + new_name='creation_time', # 保持与其他模型时间字段命名一致 ), ] \ No newline at end of file diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/robot.py b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/robot.py index 604a020..e78ad80 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/robot.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/robot.py @@ -27,7 +27,7 @@ else: os.remove(session_path) robot.config['SESSION_STORAGE'] = FileStorage(filename='werobot_session') -blogapi = BlogApi() +blog_api = BlogApi() # 修复:变量名更明确 cmd_handler = CommandHandler() logger = logging.getLogger(__name__) @@ -51,28 +51,28 @@ def convert_to_article_reply(articles, message): # 微信机器人消息处理装饰器 @robot.filter(re.compile(r"^\?.*")) def search(message, session): - searchstr = message.content.replace('?', '') - result = blogapi.search_articles(searchstr) + search_str = message.content.replace('?', '') # 修复:变量名更明确 + result = blog_api.search_articles(search_str) if result: - articles_list = [x.object for x in result] # 修复:变量名更明确 - return convert_to_article_reply(article_list, message) + articles_list = [x.object for x in result] + return convert_to_article_reply(articles_list, message) # 修复:参数名一致 return '没有找到相关文章。' @robot.filter(re.compile(r'^category\s*$', re.I)) def category(message, session): - categories = blogapi.get_category_lists() # 修复:单词拼写统一为categories + categories = blog_api.get_category_lists() return '所有文章分类目录:' + ','.join([x.name for x in categories]) @robot.filter(re.compile(r'^recent\s*$', re.I)) def recents(message, session): - articles_list = blogapi.get_recent_articles() # 修复:变量名更明确 - return convert_to_article_reply(article_list, message) if article_list else "暂时还没有文章" + articles_list = blog_api.get_recent_articles() + return convert_to_article_reply(articles_list, message) if articles_list else "暂时还没有文章" # 修复:变量名一致 @robot.filter(re.compile('^help$', re.I)) -def help(message, session): +def help_command(message, session): # 修复:函数名避免与内置help重名 return '''欢迎关注! 默认会与图灵机器人聊天~~ 你可以通过下面这些命令来获得信息 @@ -101,16 +101,16 @@ def idcard(message, session): @robot.handler def echo(message, session): handler = MessageHandler(message, session) - return handler.handle() # 修复:方法名改为handle(符合动词命名规范) + return handler.handle() @dataclass class WxUserInfo: """用户信息数据类,支持安全序列化""" - is_admin: bool = False # 修复:使用蛇形命名(统一风格) - is_password_set: bool = False # 修复:使用蛇形命名 - count: int = 0 # 修复:使用蛇形命名且小写开头 - command: str = '' # 修复:使用蛇形命名 + is_admin: bool = False + is_password_set: bool = False + count: int = 0 + command: str = '' def to_dict(self) -> Dict: """转换为字典用于JSON序列化""" @@ -131,8 +131,8 @@ class MessageHandler: def __init__(self, message, session): self.message = message self.session = session - self.user_id = message.source # 修复:使用蛇形命名 - self.user_info = self._load_user_info() # 修复:使用蛇形命名 + self.user_id = message.source + self.user_info = self._load_user_info() def _load_user_info(self) -> WxUserInfo: """加载用户信息(使用JSON序列化)""" @@ -160,8 +160,8 @@ class MessageHandler: except json.JSONEncodeError as e: logger.error(f"保存用户信息失败: {e}") - def handle(self): # 修复:方法名改为handle(符合动词命名规范) - content = self.message.content # 修复:变量名更明确 + def handle(self): + content = self.message.content if self.user_info.is_admin and content.upper() == 'EXIT': self.user_info = WxUserInfo() @@ -180,7 +180,7 @@ class MessageHandler: if admin_password.upper() == get_sha256(get_sha256(content)).upper(): self.user_info.is_password_set = True self.save_session() - return "验证通过,请输入命令或者要执行的命令代码:输入help获得帮助" # 修复:hepme→help + return "验证通过,请输入命令或者要执行的命令代码:输入help获得帮助" else: if self.user_info.count >= 3: self.user_info = WxUserInfo() diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/urls.py index 30ee091..3785d7a 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/servermanager/urls.py @@ -5,5 +5,6 @@ from .robot import robot app_name = "servermanager" urlpatterns = [ - path('robot/', make_view(robot)), # 修复:统一使用单引号,补充路径斜杠 + # 微信机器人接口(处理机器人消息交互) + path('robot/', make_view(robot), name='robot_interface'), # 补充name属性,明确接口含义 ] \ No newline at end of file