From f45bfa5dede53c75464a14fef417484af72c115a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E6=B6=B5?= Date: Sun, 2 Nov 2025 16:21:08 +0800 Subject: [PATCH] =?UTF-8?q?yx:=E5=AF=B9oauth=E7=9A=84=E7=B2=BE=E8=AF=BB?= =?UTF-8?q?=E5=92=8C=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth/migrations/0001_initial.py | 58 +++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/src/DjangoBlog/oauth/migrations/0001_initial.py b/src/DjangoBlog/oauth/migrations/0001_initial.py index 3aa3e03..bb26801 100644 --- a/src/DjangoBlog/oauth/migrations/0001_initial.py +++ b/src/DjangoBlog/oauth/migrations/0001_initial.py @@ -1,3 +1,17 @@ +""" +OAuth应用数据库迁移文件 + +本迁移文件由Django自动生成,用于创建OAuth认证相关的数据库表结构。 +包含OAuth配置和OAuth用户两个主要模型,支持多种第三方登录方式。 + +生成的表结构: +- oauth_oauthconfig: OAuth服务提供商配置表 +- oauth_oauthuser: OAuth用户信息表 + +迁移依赖: +- 依赖于Django内置的用户模型(AUTH_USER_MODEL) +""" + # Generated by Django 4.1.7 on 2023-03-07 09:53 from django.conf import settings @@ -7,51 +21,87 @@ import django.utils.timezone class Migration(migrations.Migration): + """ + OAuth应用初始迁移类 + + 继承自migrations.Migration,定义数据库表结构的创建操作。 + initial = True 表示这是该应用的第一个迁移文件。 + """ initial = True dependencies = [ + # 声明对Django用户模型的依赖 migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ + # 创建OAuth配置表 migrations.CreateModel( name='OAuthConfig', fields=[ + # 主键字段 - 使用BigAutoField作为自增主键 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('type', models.CharField(choices=[('weibo', '微博'), ('google', '谷歌'), ('github', 'GitHub'), ('facebook', 'FaceBook'), ('qq', 'QQ')], default='a', max_length=10, verbose_name='类型')), + # OAuth类型字段 - 使用选择框限定支持的第三方登录类型 + ('type', models.CharField( + choices=[('weibo', '微博'), ('google', '谷歌'), ('github', 'GitHub'), ('facebook', 'FaceBook'), + ('qq', 'QQ')], default='a', max_length=10, verbose_name='类型')), + # AppKey字段 - 存储OAuth应用的密钥标识 ('appkey', models.CharField(max_length=200, verbose_name='AppKey')), + # AppSecret字段 - 存储OAuth应用的密钥 ('appsecret', models.CharField(max_length=200, verbose_name='AppSecret')), - ('callback_url', models.CharField(default='http://www.baidu.com', max_length=200, verbose_name='回调地址')), + # 回调地址字段 - 默认设置为百度首页 + ('callback_url', + models.CharField(default='http://www.baidu.com', max_length=200, verbose_name='回调地址')), + # 启用状态字段 - 控制该OAuth配置是否可用 ('is_enable', models.BooleanField(default=True, verbose_name='是否显示')), + # 创建时间字段 - 自动记录创建时间 ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), + # 最后修改时间字段 - 自动记录最后修改时间 ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), ], options={ + # 管理后台显示名称 'verbose_name': 'oauth配置', 'verbose_name_plural': 'oauth配置', + # 默认排序规则 - 按创建时间倒序 'ordering': ['-created_time'], }, ), + # 创建OAuth用户表 migrations.CreateModel( name='OAuthUser', fields=[ + # 主键字段 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + # 第三方平台用户唯一标识 ('openid', models.CharField(max_length=50)), + # 用户在第三方平台的昵称 ('nickname', models.CharField(max_length=50, verbose_name='昵称')), + # OAuth访问令牌 - 可为空 ('token', models.CharField(blank=True, max_length=150, null=True)), + # 用户头像URL - 可为空 ('picture', models.CharField(blank=True, max_length=350, null=True)), + # OAuth类型 - 标识来自哪个第三方平台 ('type', models.CharField(max_length=50)), + # 用户邮箱 - 可为空 ('email', models.CharField(blank=True, max_length=50, null=True)), + # 元数据字段 - 存储额外的用户信息(JSON格式) ('metadata', models.TextField(blank=True, null=True)), + # 创建时间 ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), + # 最后修改时间 ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), - ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='用户')), + # 外键关联到本地用户 - 建立第三方账号与本地账号的关联 + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, verbose_name='用户')), ], options={ + # 管理后台显示名称 'verbose_name': 'oauth用户', 'verbose_name_plural': 'oauth用户', + # 默认排序规则 'ordering': ['-created_time'], }, ), - ] + ] \ No newline at end of file