Files
pear-admin-flask/migrations/versions/e5f6a7b8c9d0_cookie_user_drop_cookie_fields.py
T
bwstudio 6f4af8664e feat(cookieManager): 登录用户去掉Cookie值/域名,登录网站增加关联用户下拉
登录用户:
- 模型删除 cookie_value / domain 两列(连同 to_dict)
- 列表表头、新增/编辑表单移除对应控件;保存/更新不再校验 Cookie 值
  (改为只校验 用户名 + 网站URL)

登录网站:
- CookieSite 新增 cookie_user_id(关联 admin_cookie_user.id,可空)
- 列表新增「关联用户」列,未关联显示灰色「未关联」标签;查询栏支持按用户筛选
- 新增/编辑页用 layui 下拉框选择登录用户(lay-search 可搜索,显示
  “昵称(用户名)· 网站名”),编辑时自动回显已关联项
- Schema 增加 cookie_username 输出字段,视图一次性查用户表做映射,避免逐行查库

迁移 e5f6a7b8c9d0:
- admin_cookie_user 删 cookie_value、domain(SQLite 用 batch 重建表)
- admin_cookie_site 加 cookie_user_id
- 每步先判断列是否存在,可重复执行;downgrade 可还原

注意:升级会丢弃 admin_cookie_user.cookie_value / domain 的历史数据。

已 Playwright 真机验证(本机 :5000):
列表无 Cookie值/域名列、新增页无对应控件、保存成功;
网站新增选中用户后落库 cookie_user_id=1、列表显示“验证用户”、编辑页正确回显。
2026-09-10 20:19:25 +08:00

72 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""登录用户去掉 Cookie 明细字段;登录网站增加关联登录用户
1. admin_cookie_user:删除 cookie_value、domain 两列
登录用户只登记「账号归属」(用户名/昵称/网站/有效期),
Cookie 明细由「登录网站」承载,故这两列不再需要。
2. admin_cookie_site:新增 cookie_user_id(关联 admin_cookie_user.id
用于把网站挂到某个登录用户下,列表/新增/编辑用下拉框选择。
SQLite 不支持直接 DROP COLUMN,统一用 batch_alter_table 重建表;
每一步都先判断列是否存在,便于重复执行与跨环境差异。
Revision ID: e5f6a7b8c9d0
Revises: d4e5f6a7b8c9
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'e5f6a7b8c9d0'
down_revision = 'd4e5f6a7b8c9'
branch_labels = None
depends_on = None
def _columns(conn, table):
insp = sa.inspect(conn)
return {c['name'] for c in insp.get_columns(table)}
def upgrade():
conn = op.get_bind()
user_cols = _columns(conn, 'admin_cookie_user')
if 'cookie_value' in user_cols:
with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op:
batch_op.drop_column('cookie_value')
if 'domain' in user_cols:
with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op:
batch_op.drop_column('domain')
site_cols = _columns(conn, 'admin_cookie_site')
if 'cookie_user_id' not in site_cols:
with op.batch_alter_table('admin_cookie_site', schema=None) as batch_op:
batch_op.add_column(
sa.Column('cookie_user_id', sa.Integer(), nullable=True,
comment='关联登录用户ID')
)
def downgrade():
conn = op.get_bind()
site_cols = _columns(conn, 'admin_cookie_site')
if 'cookie_user_id' in site_cols:
with op.batch_alter_table('admin_cookie_site', schema=None) as batch_op:
batch_op.drop_column('cookie_user_id')
user_cols = _columns(conn, 'admin_cookie_user')
if 'domain' not in user_cols:
with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op:
batch_op.add_column(
sa.Column('domain', sa.String(length=255), nullable=True,
server_default='', comment='Cookie域名')
)
if 'cookie_value' not in user_cols:
with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op:
batch_op.add_column(
sa.Column('cookie_value', sa.Text(), nullable=True,
comment='Cookie值')
)