mirror of
https://github.com/KingHWJ/WeReadBoard.git
synced 2026-11-03 18:24:58 +08:00
merge: 发布 v0.1 版本显示
This commit is contained in:
commit
82cc0ed487
8 files changed
+29
-4
No files matched your search
@@ -74,6 +74,8 @@ DEPLOY_BRANCH=master ./deploy.sh
|
|||||||
|
|
||||||
运行端口、Python 环境、HTTPS 证书和接口故障的诊断方法见 [日常维护与故障排查](docs/troubleshooting.md)。
|
运行端口、Python 环境、HTTPS 证书和接口故障的诊断方法见 [日常维护与故障排查](docs/troubleshooting.md)。
|
||||||
|
|
||||||
|
当前应用版本保存在根目录 `VERSION`,网页底部和登录页会显示该版本号。
|
||||||
|
|
||||||
## 功能模块
|
## 功能模块
|
||||||
|
|
||||||
| 模块 | 说明 |
|
| 模块 | 说明 |
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import time
|
|||||||
import urllib.request
|
import urllib.request
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
import pymysql
|
import pymysql
|
||||||
|
|
||||||
@@ -45,6 +46,16 @@ from reading_api import reading_bp
|
|||||||
# ======================================================================
|
# ======================================================================
|
||||||
app = Flask(__name__, static_folder="static", template_folder="templates")
|
app = Flask(__name__, static_folder="static", template_folder="templates")
|
||||||
|
|
||||||
|
try:
|
||||||
|
APP_VERSION = Path(__file__).with_name("VERSION").read_text(encoding="utf-8").strip()
|
||||||
|
except FileNotFoundError:
|
||||||
|
APP_VERSION = "unknown"
|
||||||
|
|
||||||
|
|
||||||
|
@app.context_processor
|
||||||
|
def inject_app_version():
|
||||||
|
return {"app_version": APP_VERSION}
|
||||||
|
|
||||||
# 注册当前看板数据接口,并保留旧客户端兼容路径。
|
# 注册当前看板数据接口,并保留旧客户端兼容路径。
|
||||||
app.register_blueprint(reading_bp)
|
app.register_blueprint(reading_bp)
|
||||||
register_auth(app)
|
register_auth(app)
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ GitHub Actions 的 `.github/workflows/deploy.yml` 只做验证,不登录服务
|
|||||||
|
|
||||||
例:正式域名为 `laohang.space`、备案号为 `浙ICP备202607916号-1`,首页页脚显示该备案号;点击后打开 `https://beian.miit.gov.cn/`。截图里的公安联网备案数据码不是公安备案号,不作为备案号码展示。
|
例:正式域名为 `laohang.space`、备案号为 `浙ICP备202607916号-1`,首页页脚显示该备案号;点击后打开 `https://beian.miit.gov.cn/`。截图里的公安联网备案数据码不是公安备案号,不作为备案号码展示。
|
||||||
|
|
||||||
|
## 应用版本显示
|
||||||
|
|
||||||
|
根目录 `VERSION` 保存面向用户的版本号,例如输入 `v0.1`,Flask 在启动时读取并通过模板上下文注入 `app_version`。首页页脚和登录页显示“版本 v0.1”。版本号不包含分支名或提交号;发布新版本时修改 `VERSION` 后随 `master` 一起部署。
|
||||||
|
|
||||||
应用未内置登录尝试限流;公网部署应在可信反向代理上为 `POST /auth/login` 设置频率限制,且不要直接信任未校验的 `X-Forwarded-For`。
|
应用未内置登录尝试限流;公网部署应在可信反向代理上为 `POST /auth/login` 设置频率限制,且不要直接信任未校验的 `X-Forwarded-For`。
|
||||||
|
|
||||||
## 示例与真实接口的边界
|
## 示例与真实接口的边界
|
||||||
|
|||||||
@@ -138,6 +138,8 @@ DEPLOY_BRANCH=master ./deploy.sh
|
|||||||
|
|
||||||
正式网站域名 `laohang.space` 的页脚展示工信部 ICP 备案号 `浙ICP备202607916号-1`,点击后跳转至工信部备案查询平台。公安联网备案数据码不是公安备案号,因此不在页脚作为公安备案信息展示。
|
正式网站域名 `laohang.space` 的页脚展示工信部 ICP 备案号 `浙ICP备202607916号-1`,点击后跳转至工信部备案查询平台。公安联网备案数据码不是公安备案号,因此不在页脚作为公安备案信息展示。
|
||||||
|
|
||||||
|
网站页脚和登录页显示版本文件 `VERSION` 的内容,例如 `v0.1`。发布新版本时修改该文件并随代码合并到 `master`;部署后可直接在网页底部确认当前应用版本。
|
||||||
|
|
||||||
保存失败会保留表单并提示重试;读取失败显示错误和重试按钮,不冒充空列表。若新建提示 ID 已存在,刷新目标列表确认上次请求是否已经保存。数据库不可用或尚未执行迁移时,目标接口返回 503,不退回浏览器保存。
|
保存失败会保留表单并提示重试;读取失败显示错误和重试按钮,不冒充空列表。若新建提示 ID 已存在,刷新目标列表确认上次请求是否已经保存。数据库不可用或尚未执行迁移时,目标接口返回 503,不退回浏览器保存。
|
||||||
|
|
||||||
验证命令:
|
验证命令:
|
||||||
|
|||||||
@@ -19,6 +19,10 @@
|
|||||||
gap: 12px
|
gap: 12px
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-version {
|
||||||
|
white-space: nowrap
|
||||||
|
}
|
||||||
|
|
||||||
.icp-link {
|
.icp-link {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-decoration: none
|
text-decoration: none
|
||||||
@@ -123,7 +127,7 @@
|
|||||||
id="conn-state">正在连接微信读书…</span></span><span>阅读目标跨浏览器保存</span></div>
|
id="conn-state">正在连接微信读书…</span></span><span>阅读目标跨浏览器保存</span></div>
|
||||||
<div id="page-content"></div>
|
<div id="page-content"></div>
|
||||||
<footer class="footer"><span>阅间 · 与好书相伴,与自己相遇</span>
|
<footer class="footer"><span>阅间 · 与好书相伴,与自己相遇</span>
|
||||||
<div class="footer-meta"><span class="footer-state" id="footer-state">数据来自微信读书个人账号</span><a class="icp-link"
|
<div class="footer-meta"><span class="footer-state" id="footer-state">数据来自微信读书个人账号</span><span class="app-version">版本 {{ app_version }}</span><a class="icp-link"
|
||||||
href="https://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">浙ICP备202607916号-1</a>
|
href="https://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">浙ICP备202607916号-1</a>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
@@ -162,4 +166,4 @@
|
|||||||
<script src="/static/js/app.js"></script>
|
<script src="/static/js/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -42,8 +42,8 @@
|
|||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
<p class="login-foot">阅间 · 与好书相伴,与自己相遇</p>
|
<p class="login-foot">阅间 · 与好书相伴,与自己相遇 · 版本 {{ app_version }}</p>
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -92,6 +92,7 @@ class AuthTests(unittest.TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn(b"https://beian.miit.gov.cn/", response.data)
|
self.assertIn(b"https://beian.miit.gov.cn/", response.data)
|
||||||
self.assertIn("浙ICP备202607916号-1".encode(), response.data)
|
self.assertIn("浙ICP备202607916号-1".encode(), response.data)
|
||||||
|
self.assertIn("版本 v0.1".encode(), response.data)
|
||||||
|
|
||||||
def test_first_account_requires_setup_token_and_is_stored_as_hash(self):
|
def test_first_account_requires_setup_token_and_is_stored_as_hash(self):
|
||||||
page = self.client.get("/login")
|
page = self.client.get("/login")
|
||||||
|
|||||||
Reference in new issue
Block a user