- 拆分应用工厂、业务服务与路由,保留原有 HTTP/SSE 和存储入口 - 分离页面资源,重排客服工作台并完善响应式导航、草稿和附件交互 - 整理维护脚本、请求示例和贡献指南,移除启动脚本中的密钥配置 - 上传文件改为仅本地保留,补充隔离的后端与前端回归验证 验证:46 项 Python 测试通过,含 14 个已有子测试;12 个 Node 前端场景通过。
34 lines
985 B
Python
34 lines
985 B
Python
"""Explicit local serving entry point; importing it starts no server."""
|
|
|
|
|
|
def local_ips():
|
|
import socket
|
|
ips = set()
|
|
try:
|
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as connection:
|
|
connection.connect(('8.8.8.8', 80))
|
|
ips.add(connection.getsockname()[0])
|
|
except Exception:
|
|
pass
|
|
try:
|
|
for info in socket.getaddrinfo(socket.gethostname(), None, socket.AF_INET):
|
|
ip = info[4][0]
|
|
if not ip.startswith('127.'):
|
|
ips.add(ip)
|
|
except Exception:
|
|
pass
|
|
return sorted(ips)
|
|
|
|
|
|
def serve_app(app):
|
|
host, port = app.config['HOST'], app.config['PORT']
|
|
print(f'Local: http://127.0.0.1:{port}')
|
|
for ip in local_ips():
|
|
print(f'LAN: http://{ip}:{port}')
|
|
try:
|
|
from waitress import serve
|
|
except ImportError:
|
|
app.run(host=host, port=port, debug=True, use_reloader=False)
|
|
else:
|
|
serve(app, host=host, port=port, threads=8)
|