chore(bug/qa): 归档测试清单、bug 报告与 QA 诊断脚本
- core/bug: 各轮电商项目测试清单 xlsx + 验证报告/套图提示词梳理 md - core/qa: consumption_summary / diag_login / diag_sessions / probe_usage 诊断脚本 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import os, sys
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "backend"))
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "airshelf.settings.development")
|
||||
import django; django.setup()
|
||||
from django.contrib.auth import get_user_model
|
||||
from apps.accounts.models import Team, TeamMember
|
||||
|
||||
U = get_user_model()
|
||||
|
||||
print("=" * 60)
|
||||
print("一、用户整体状态分布")
|
||||
print("=" * 60)
|
||||
total = U.objects.count()
|
||||
print(f" 用户总数 = {total}")
|
||||
print(f" is_active=True = {U.objects.filter(is_active=True).count()}")
|
||||
print(f" is_active=False = {U.objects.filter(is_active=False).count()} <-- Django 登录直接拒")
|
||||
print(f" status=active = {U.objects.filter(status='active').count()}")
|
||||
print(f" status=disabled = {U.objects.filter(status='disabled').count()} <-- is_disabled 拒登")
|
||||
# 密码可用性
|
||||
unusable = sum(1 for u in U.objects.all() if not u.has_usable_password())
|
||||
print(f" 无可用密码(密码被清/损坏) = {unusable}")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("二、团队状态")
|
||||
print("=" * 60)
|
||||
print(f" 团队总数 = {Team.objects.count()} active={Team.objects.filter(status='active').count()} disabled={Team.objects.filter(status='disabled').count()}")
|
||||
for t in Team.objects.filter(status='disabled'):
|
||||
print(f" 停用团队: {t.name} (id={t.id})")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("三、ZWQ 相关账号详情")
|
||||
print("=" * 60)
|
||||
qs = U.objects.filter(username__icontains="zwq") | U.objects.filter(username__icontains="ZWQ")
|
||||
qs = qs.distinct()
|
||||
if not qs:
|
||||
print(" 没找到 username 含 zwq 的用户,列出全部用户名供你认:")
|
||||
for u in U.objects.all().order_by("username")[:60]:
|
||||
print(f" {u.username}")
|
||||
for u in qs:
|
||||
print(f"\n username={u.username!r}")
|
||||
print(f" is_active={u.is_active} status={u.status} has_usable_password={u.has_usable_password()}")
|
||||
print(f" is_platform_admin={u.is_platform_admin} is_superuser={u.is_superuser}")
|
||||
print(f" last_login={u.last_login} date_joined={u.date_joined}")
|
||||
print(f" password_hash_prefix={u.password[:25]!r}")
|
||||
mems = TeamMember.objects.filter(user=u).select_related("team")
|
||||
for m in mems:
|
||||
print(f" 团队成员: team={m.team.name!r} team_status={m.team.status} member_status={m.status} role={m.role}")
|
||||
Reference in New Issue
Block a user