完成代码泛读报告第一项及第二项

pull/8/head
p7opzmxku 4 months ago
commit 4359e3ffa8

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

@ -0,0 +1,22 @@
graph TD
subgraph DjangoBlog Project
A[accounts] -->|用户体系| B[blog]
A -->|用户登录| C[comments]
A -->|用户绑定| D[oauth]
A -->|用户轨迹| E[owntracks]
B -->|文章内容| C
B -->|搜索功能| F[djangoblog]
B -->|插件扩展| G[plugins]
B -->|API接口| H[servermanager]
F -->|搜索引擎| B
F -->|站点地图| B
G -->|插件功能| B
H -->|邮件/命令| B
H -->|微信处理| B
D -->|第三方登录| A
end

@ -0,0 +1,133 @@
---
config:
layout: elk
---
classDiagram
%% 模型类
class BlogUser {
+String nickname
+DateTime creation_time
+DateTime last_modify_time
+String source
+get_absolute_url()
+get_full_url()
}
%% 表单类
class BlogUserCreationForm {
+CharField password1
+CharField password2
+clean_password2()
+save()
}
class BlogUserChangeForm {
+__init__()
}
class LoginForm {
+__init__()
}
class RegisterForm {
+__init__()
+clean_email()
}
class ForgetPasswordForm {
+CharField new_password1
+CharField new_password2
+EmailField email
+CharField code
+clean_new_password2()
+clean_email()
+clean_code()
}
class ForgetPasswordCodeForm {
+EmailField email
}
%% 视图类
class RegisterView {
+form_valid()
}
class LogoutView {
+get()
}
class LoginView {
+get_context_data()
+form_valid()
+get_success_url()
}
class ForgetPasswordView {
+form_valid()
}
class ForgetPasswordEmailCode {
+post()
}
%% 认证后端
class EmailOrUsernameModelBackend {
+authenticate()
+get_user()
}
%% 应用配置
class AccountsConfig
%% 测试类
class AccountTest
%% 工具函数
class utils {
+send_verify_email()
+verify()
+set_code()
+get_code()
}
%% 继承关系
BlogUser --|> AbstractUser
BlogUserCreationForm --|> ModelForm
BlogUserChangeForm --|> UserChangeForm
LoginForm --|> AuthenticationForm
RegisterForm --|> UserCreationForm
ForgetPasswordForm --|> Form
ForgetPasswordCodeForm --|> Form
RegisterView --|> FormView
LogoutView --|> RedirectView
LoginView --|> FormView
ForgetPasswordView --|> FormView
ForgetPasswordEmailCode --|> View
EmailOrUsernameModelBackend --|> ModelBackend
AccountsConfig --|> AppConfig
AccountTest --|> TestCase
%% 关联关系
BlogUserCreationForm --> BlogUser : 创建
BlogUserChangeForm --> BlogUser : 修改
RegisterForm --> BlogUser : 注册
ForgetPasswordForm --> BlogUser : 重置密码
RegisterView --> RegisterForm : 使用
LoginView --> LoginForm : 使用
ForgetPasswordView --> ForgetPasswordForm : 使用
ForgetPasswordEmailCode --> ForgetPasswordCodeForm : 使用
EmailOrUsernameModelBackend --> BlogUser : 认证
AccountTest --> BlogUser : 测试
AccountTest --> utils : 测试
ForgetPasswordForm --> utils : 验证
ForgetPasswordEmailCode --> utils : 发送邮件
RegisterView --> utils : 发送邮件
%% 依赖关系
views ..> utils : 导入
forms ..> BlogUser : 导入
tests ..> BlogUser : 导入
tests ..> utils : 导入
admin ..> BlogUser : 导入

@ -0,0 +1,266 @@
---
config:
layout: elk
---
classDiagram
%% 基础模型类
class BaseModel {
<<abstract>>
+id
+creation_time
+last_modify_time
+save()
+get_full_url()
+get_absolute_url()*
}
%% 核心模型类
class Article {
+title
+body
+pub_time
+status
+comment_status
+type
+views
+article_order
+show_toc
+body_to_string()
+get_category_tree()
+viewed()
+comment_list()
+get_admin_url()
+next_article()
+prev_article()
+get_first_image_url()
}
class Category {
+name
+parent_category
+slug
+index
+get_category_tree()
+get_sub_categorys()
}
class Tag {
+name
+slug
+get_article_count()
}
class Links {
+name
+link
+sequence
+is_enable
+show_type
}
class SideBar {
+name
+content
+sequence
+is_enable
}
class BlogSettings {
+site_name
+site_description
+site_seo_description
+site_keywords
+article_sub_length
+sidebar_article_count
+sidebar_comment_count
+article_comment_count
+show_google_adsense
+google_adsense_codes
+open_site_comment
+global_header
+global_footer
+beian_code
+analytics_code
+show_gongan_code
+gongan_beiancode
+comment_need_review
+clean()
}
%% 枚举类型
class LinkShowType {
<<enumeration>>
I, L, P, A, S
}
%% 表单类
class BlogSearchForm {
+querydata
+search()
}
%% 管理类
class ArticlelAdmin {
+list_display
+list_filter
+actions
+link_to_category()
+get_form()
+get_view_on_site_url()
}
class TagAdmin
class CategoryAdmin
class LinksAdmin
class SideBarAdmin
class BlogSettingsAdmin
%% 视图类
class ArticleListView {
<<abstract>>
+page_type
+link_type
+get_queryset_cache_key()*
+get_queryset_data()*
+get_queryset()
+get_context_data()
}
class IndexView
class ArticleDetailView {
+get_context_data()
}
class CategoryDetailView
class AuthorDetailView
class TagDetailView
class ArchivesView
class LinkListView
class EsSearchView
%% 中间件类
class OnlineMiddleware {
+__call__()
}
%% 搜索索引类
class ArticleIndex {
+text
+get_model()
+index_queryset()
}
%% Elasticsearch 文档类
class GeoIp {
+continent_name
+country_iso_code
+country_name
+location
}
class UserAgentBrowser
class UserAgentOS
class UserAgentDevice
class UserAgent
class ElapsedTimeDocument {
+url
+time_taken
+log_datetime
+ip
+geoip
+useragent
}
class ElaspedTimeDocumentManager {
+build_index()
+delete_index()
+create()
}
class ArticleDocument {
+body
+title
+author
+category
+tags
+pub_time
+status
+comment_status
+type
+views
+article_order
}
class ArticleDocumentManager {
+create_index()
+delete_index()
+convert_to_doc()
+rebuild()
+update_docs()
}
%% 应用配置类
class BlogConfig
%% 测试类
class ArticleTest
%% 继承关系
BaseModel <|-- Article
BaseModel <|-- Category
BaseModel <|-- Tag
ArticleListView <|-- IndexView
ArticleListView <|-- CategoryDetailView
ArticleListView <|-- AuthorDetailView
ArticleListView <|-- TagDetailView
ArticleListView <|-- ArchivesView
ArticleDetailView --|> DetailView
LinkListView --|> ListView
EsSearchView --|> SearchView
UserAgentOS --|> UserAgentBrowser
%% 关联关系
Article --> Category : Foreign Key
Article --> Tag : Many-to-Many
Article --> settings.AUTH_USER_MODEL : Foreign Key
Category --> Category : Self-reference (Parent Category)
Links --> LinkShowType : Uses
ArticleDocument --> Article : Mapping
ElapsedTimeDocument --> GeoIp : Contains
ElapsedTimeDocument --> UserAgent : Contains
UserAgent --> UserAgentBrowser : Contains
UserAgent --> UserAgentOS : Contains
UserAgent --> UserAgentDevice : Contains
%% 管理关系
ArticlelAdmin --> Article : 管理
TagAdmin --> Tag : 管理
CategoryAdmin --> Category : 管理
LinksAdmin --> Links : 管理
SideBarAdmin --> SideBar : 管理
BlogSettingsAdmin --> BlogSettings : 管理
%% 视图与模型关系
IndexView --> Article : 查询
ArticleDetailView --> Article : 详情
CategoryDetailView --> Category : 查询
AuthorDetailView --> Article : 查询
TagDetailView --> Tag : 查询
ArchivesView --> Article : 查询
LinkListView --> Links : 查询
%% 搜索关系
ArticleIndex --> Article : 索引
BlogSearchForm --> SearchForm : 继承
%% 文档管理关系
ArticleDocumentManager --> ArticleDocument : 管理
ElaspedTimeDocumentManager --> ElapsedTimeDocument : 管理
%% 测试关系
ArticleTest --> Article : 测试
ArticleTest --> Category : 测试
ArticleTest --> Tag : 测试
ArticleTest --> SideBar : 测试
ArticleTest --> Links : 测试

@ -0,0 +1,77 @@
---
config:
layout: elk
---
classDiagram
%% 模型类
class Comment {
+body
+creation_time
+last_modify_time
+is_enable
+__str__()
}
%% 表单类
class CommentForm {
+parent_comment_id
}
%% 视图类
class CommentPostView {
+dispatch()
+get()
+form_invalid()
+form_valid()
}
%% 管理类
class CommentAdmin {
+list_display
+list_filter
+actions
+link_to_userinfo()
+link_to_article()
}
%% 应用配置类
class CommentsConfig
%% 测试类
class CommentsTest
%% 工具函数
class utils {
+send_comment_email()
}
%% 继承关系
CommentForm --|> ModelForm
CommentPostView --|> FormView
CommentAdmin --|> ModelAdmin
CommentsConfig --|> AppConfig
CommentsTest --|> TransactionTestCase
%% 关联关系
Comment --> AUTH_USER_MODEL : author
Comment --> Article : article
Comment --> Comment : parent_comment
CommentForm --> Comment : create
CommentPostView --> CommentForm : use
CommentPostView --> Comment : create
CommentAdmin --> Comment : manage
CommentsTest --> Comment : test
%% 依赖关系
CommentPostView ..> BlogUser : import
CommentPostView ..> Article : import
CommentsTest ..> BlogUser : import
CommentsTest ..> Article : import
CommentsTest ..> Category : import
utils ..> Comment : import
CommentAdmin ..> Comment : import
%% 方法调用关系
CommentPostView --> utils : possible_call
CommentsTest --> utils : test_call

@ -0,0 +1,264 @@
---
config:
layout: elk
---
classDiagram
%% 管理站点类
class DjangoBlogAdminSite {
+site_header
+site_title
+has_permission()
}
%% 应用配置类
class DjangoblogAppConfig {
+ready()
}
%% 信号处理器
class blog_signals {
<<module>>
+send_email_signal
+oauth_user_login_signal
+send_email_signal_handler()
+oauth_user_login_signal_handler()
+model_post_save_callback()
+user_auth_callback()
}
%% 搜索引擎相关类
class ElasticSearchBackend {
+manager
+search()
+get_suggestion()
+_create()
+_delete()
+_rebuild()
+update()
+remove()
+clear()
}
class ElasticSearchQuery {
+_convert_datetime()
+clean()
+build_query_fragment()
+get_count()
+get_spelling_suggestion()
}
class ElasticSearchModelSearchForm {
+search()
}
class ElasticSearchEngine
class WhooshSearchBackend {
+RESERVED_WORDS
+RESERVED_CHARACTERS
+setup()
+build_schema()
+update()
+remove()
+clear()
+delete_index()
+optimize()
+search()
+more_like_this()
+_process_results()
+create_spelling_suggestion()
}
class WhooshSearchQuery {
+_convert_datetime()
+clean()
+build_query_fragment()
}
class WhooshEngine
class WhooshHtmlFormatter {
+template
}
%% RSS订阅类
class DjangoBlogFeed {
+feed_type
+description
+title
+link
+author_name()
+author_link()
+items()
+item_title()
+item_description()
+feed_copyright()
+item_link()
+item_guid()
}
%% 日志管理类
class LogEntryAdmin {
+list_filter
+search_fields
+list_display
+has_add_permission()
+has_change_permission()
+has_delete_permission()
+object_link()
+user_link()
+get_queryset()
+get_actions()
}
%% 站点地图类
class StaticViewSitemap {
+priority
+changefreq
+items()
+location()
}
class ArticleSiteMap {
+changefreq
+priority
+items()
+lastmod()
}
class CategorySiteMap {
+changefreq
+priority
+items()
+lastmod()
}
class TagSiteMap {
+changefreq
+priority
+items()
+lastmod()
}
class UserSiteMap {
+changefreq
+priority
+items()
+lastmod()
}
%% 蜘蛛通知类
class SpiderNotify {
<<static>>
+baidu_notify()
+notify()
}
%% 测试类
class DjangoBlogTest
%% 工具类
class CommonMarkdown {
<<static>>
+_convert_markdown()
+get_markdown_with_toc()
+get_markdown()
}
%% 设置类(配置)
class settings {
<<module>>
+INSTALLED_APPS
+MIDDLEWARE
+DATABASES
+HAYSTACK_CONNECTIONS
+CACHES
+LOGGING
}
%% URL配置
class urls {
<<module>>
+urlpatterns
+handler404
+handler500
+handle403
}
%% WSGI配置
class wsgi {
<<module>>
+application
}
%% 继承关系
DjangoBlogAdminSite --|> AdminSite
DjangoblogAppConfig --|> AppConfig
ElasticSearchBackend --|> BaseSearchBackend
ElasticSearchQuery --|> BaseSearchQuery
ElasticSearchEngine --|> BaseEngine
WhooshSearchBackend --|> BaseSearchBackend
WhooshSearchQuery --|> BaseSearchQuery
WhooshEngine --|> BaseEngine
WhooshHtmlFormatter --|> HtmlFormatter
DjangoBlogFeed --|> Feed
LogEntryAdmin --|> ModelAdmin
StaticViewSitemap --|> Sitemap
ArticleSiteMap --|> Sitemap
CategorySiteMap --|> Sitemap
TagSiteMap --|> Sitemap
UserSiteMap --|> Sitemap
DjangoBlogTest --|> TestCase
%% 关联关系
DjangoBlogAdminSite --> ArticlelAdmin : 注册
DjangoBlogAdminSite --> CategoryAdmin : 注册
DjangoBlogAdminSite --> TagAdmin : 注册
DjangoBlogAdminSite --> LinksAdmin : 注册
DjangoBlogAdminSite --> SideBarAdmin : 注册
DjangoBlogAdminSite --> BlogSettingsAdmin : 注册
DjangoBlogAdminSite --> CommandsAdmin : 注册
DjangoBlogAdminSite --> EmailSendLogAdmin : 注册
DjangoBlogAdminSite --> BlogUserAdmin : 注册
DjangoBlogAdminSite --> CommentAdmin : 注册
DjangoBlogAdminSite --> OAuthUserAdmin : 注册
DjangoBlogAdminSite --> OAuthConfigAdmin : 注册
DjangoBlogAdminSite --> OwnTrackLogsAdmin : 注册
DjangoBlogAdminSite --> SiteAdmin : 注册
DjangoBlogAdminSite --> LogEntryAdmin : 注册
ElasticSearchBackend --> ArticleDocumentManager : 使用
ElasticSearchModelSearchForm --> ElasticSearchBackend : 配置
WhooshSearchBackend --> ChineseAnalyzer : 使用
blog_signals --> Comment : 信号处理
blog_signals --> OAuthUser : 信号处理
blog_signals --> LogEntry : 信号处理
blog_signals --> EmailSendLog : 记录
DjangoBlogFeed --> Article : 获取内容
ArticleSiteMap --> Article : 映射
CategorySiteMap --> Category : 映射
TagSiteMap --> Tag : 映射
UserSiteMap --> Article : 映射
%% 依赖关系
DjangoblogAppConfig ..> plugin_manage.loader : 导入
blog_signals ..> comments.utils : 导入
blog_signals ..> djangoblog.utils : 导入
blog_signals ..> djangoblog.spider_notify : 导入
ElasticSearchBackend ..> blog.documents : 导入
WhooshSearchBackend ..> jieba.analyse : 导入
utils ..> bleach : 导入
utils ..> markdown : 导入
%% 配置关系
settings --> INSTALLED_APPS : 包含所有应用
settings --> MIDDLEWARE : 包含中间件
urls --> admin_site : 包含管理路由
urls --> blog.urls : 包含博客路由
urls --> comments.urls : 包含评论路由
urls --> accounts.urls : 包含账户路由
urls --> oauth.urls : 包含OAuth路由
urls --> servermanager.urls : 包含服务器管理路由
urls --> owntracks.urls : 包含位置跟踪路由

@ -0,0 +1,194 @@
---
config:
layout: elk
---
classDiagram
%% Models
class OAuthUser {
+ForeignKey author
+CharField openid
+CharField nickname
+CharField token
+CharField picture
+CharField type
+CharField email
+TextField metadata
+DateTimeField creation_time
+DateTimeField last_modify_time
+__str__()
}
class OAuthConfig {
+CharField type
+CharField appkey
+CharField appsecret
+CharField callback_url
+BooleanField is_enable
+DateTimeField creation_time
+DateTimeField last_modify_time
+clean()
+__str__()
}
%% Admin Classes
class OAuthUserAdmin {
+search_fields
+list_per_page
+list_display
+list_display_links
+list_filter
+readonly_fields
+get_readonly_fields()
+has_add_permission()
+link_to_usermodel()
+show_user_image()
}
class OAuthConfigAdmin {
+list_display
+list_filter
}
%% Forms
class RequireEmailForm {
+EmailField email
+IntegerField oauthid
+__init__()
}
%% Views
class RequireEmailView {
+form_class
+template_name
+get()
+get_initial()
+get_context_data()
+form_valid()
}
%% OAuth Manager Classes
class BaseOauthManager {
<<Abstract>>
+AUTH_URL
+TOKEN_URL
+API_URL
+ICON_NAME
+access_token
+openid
+is_access_token_set
+is_authorized
+get_authorization_url()
+get_access_token_by_code()
+get_oauth_userinfo()
+get_picture()
+do_get()
+do_post()
+get_config()
}
class ProxyManagerMixin {
+proxies
+do_get()
+do_post()
}
class WBOauthManager {
+client_id
+client_secret
+callback_url
+get_authorization_url()
+get_access_token_by_code()
+get_oauth_userinfo()
+get_picture()
}
class GoogleOauthManager {
+client_id
+client_secret
+callback_url
+get_authorization_url()
+get_access_token_by_code()
+get_oauth_userinfo()
+get_picture()
}
class GitHubOauthManager {
+client_id
+client_secret
+callback_url
+get_authorization_url()
+get_access_token_by_code()
+get_oauth_userinfo()
+get_picture()
}
class FaceBookOauthManager {
+client_id
+client_secret
+callback_url
+get_authorization_url()
+get_access_token_by_code()
+get_oauth_userinfo()
+get_picture()
}
class QQOauthManager {
+client_id
+client_secret
+callback_url
+get_authorization_url()
+get_access_token_by_code()
+get_open_id()
+get_oauth_userinfo()
+get_picture()
}
%% Test Classes
class OAuthConfigTest {
+setUp()
+test_oauth_login_test()
}
class OauthLoginTest {
+setUp()
+init_apps()
+get_app_by_type()
+test_weibo_login()
+test_google_login()
+test_github_login()
+test_facebook_login()
+test_qq_login()
+test_weibo_authoriz_login_with_email()
+test_weibo_authoriz_login_without_email()
}
%% Exception Class
class OAuthAccessTokenException {
<<Exception>>
}
%% Relationships
OAuthUserAdmin --> OAuthUser : 管理
OAuthConfigAdmin --> OAuthConfig : 管理
RequireEmailView --> RequireEmailForm : 使用
BaseOauthManager <|-- WBOauthManager : 继承
BaseOauthManager <|-- QQOauthManager : 继承
BaseOauthManager <|-- GoogleOauthManager : 继承
ProxyManagerMixin <|.. GoogleOauthManager : 混入
BaseOauthManager <|-- GitHubOauthManager : 继承
ProxyManagerMixin <|.. GitHubOauthManager : 混入
BaseOauthManager <|-- FaceBookOauthManager : 继承
ProxyManagerMixin <|.. FaceBookOauthManager : 混入
BaseOauthManager --> OAuthUser : 创建
BaseOauthManager --> OAuthConfig : 配置依赖
OAuthConfigTest --> OAuthConfig : 测试
OauthLoginTest --> BaseOauthManager : 测试
OauthLoginTest --> OAuthConfig : 测试
OauthLoginTest --> OAuthUser : 测试

@ -0,0 +1,71 @@
---
config:
layout: elk
---
classDiagram
%% Models
class OwnTrackLog {
+CharField tid
+FloatField lat
+FloatField lon
+DateTimeField creation_time
+__str__()
}
%% Admin Classes
class OwnTrackLogsAdmin {
# 空管理类,使用默认配置
}
%% App Config
class OwntracksConfig {
+name
}
%% Test Classes
class OwnTrackLogTest {
+setUp()
+test_own_track_log()
}
%% Views (作为功能模块表示)
class ViewFunctions {
<<Module>>
+manage_owntrack_log()
+show_maps()
+show_log_dates()
+convert_to_amap()
+get_datas()
}
%% URL Patterns
class URLConfig {
<<Module>>
+logtracks
+show_maps
+get_datas
+show_dates
}
%% External Dependencies
class BlogUser {
<<External>>
+create_superuser()
}
class AMapAPI {
<<External>>
+坐标转换服务
}
%% Relationships
OwnTrackLogsAdmin --> OwnTrackLog : 管理
OwnTrackLogTest --> OwnTrackLog : 测试
OwnTrackLogTest --> BlogUser : 创建测试用户
ViewFunctions --> OwnTrackLog : 创建/查询
ViewFunctions --> AMapAPI : 调用坐标转换
URLConfig --> ViewFunctions : 路由映射
OwntracksConfig ..> OwnTrackLog : 应用配置

@ -0,0 +1,155 @@
---
config:
layout: elk
---
classDiagram
%% Models
class commands {
+CharField title
+CharField command
+CharField describe
+DateTimeField creation_time
+DateTimeField last_modify_time
+__str__()
}
class EmailSendLog {
+CharField emailto
+CharField title
+TextField content
+BooleanField send_result
+DateTimeField creation_time
+__str__()
}
%% Admin Classes
class CommandsAdmin {
+list_display
}
class EmailSendLogAdmin {
+list_display
+readonly_fields
+has_add_permission()
}
%% WeChat Robot Components
class MemcacheStorage {
+prefix
+cache
+is_available
+key_name()
+get()
+set()
+delete()
}
class MessageHandler {
+message
+session
+userid
+userinfo
+is_admin
+is_password_set
+save_session()
+handler()
}
class WxUserInfo {
+isAdmin
+isPasswordSet
+Count
+Command
}
%% External API Classes
class BlogApi {
<<External>>
+search_articles()
+get_category_lists()
+get_recent_articles()
}
class CommandHandler {
<<External>>
+run()
+get_help()
}
class ChatGPT {
<<External>>
+chat()
}
class WeRoBot {
<<External>>
+token
+config
+filter()
+handler()
}
%% Test Classes
class ServerManagerTest {
+setUp()
+test_chat_gpt()
+test_validate_comment()
}
%% App Config
class ServermanagerConfig {
+name
}
%% URL Configuration
class URLConfig {
+robot
}
%% External Models (for testing)
class BlogUser {
<<External>>
+create_superuser()
}
class Category {
<<External>>
}
class Article {
<<External>>
+title
+body
+get_full_url()
}
%% Relationships
CommandsAdmin --> commands : 管理
EmailSendLogAdmin --> EmailSendLog : 管理
MemcacheStorage ..> WeRoBot : 会话存储实现
MessageHandler o-- WxUserInfo : 组合
MessageHandler --> CommandHandler : 使用
MessageHandler --> ChatGPT : 使用
WeRoBot --> MessageHandler : 消息处理
WeRoBot --> BlogApi : 博客API调用
WeRoBot --> MemcacheStorage : 会话存储
%% Robot Filter Functions
WeRoBot ..> search : 注册过滤器
WeRoBot ..> category : 注册过滤器
WeRoBot ..> recents : 注册过滤器
WeRoBot ..> help : 注册过滤器
WeRoBot ..> weather : 注册过滤器
WeRoBot ..> idcard : 注册过滤器
%% Test Relationships
ServerManagerTest --> commands : 测试
ServerManagerTest --> MessageHandler : 测试
ServerManagerTest --> CommandHandler : 测试
ServerManagerTest --> BlogUser : 测试依赖
ServerManagerTest --> Category : 测试依赖
ServerManagerTest --> Article : 测试依赖
URLConfig --> WeRoBot : 路由配置

@ -1 +1 @@
Subproject commit 6854347d35f6619d9e16852d0d6b133ca645c6c5
Subproject commit df6020cd44f39affee81f58088380b23a5fb0c96
Loading…
Cancel
Save