diff --git a/oauth/admin.py b/oauth/admin.py
index 57eab5f..c5bf611 100644
--- a/oauth/admin.py
+++ b/oauth/admin.py
@@ -5,50 +5,69 @@ from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
+# 获取日志记录器,用于调试或记录错误
logger = logging.getLogger(__name__)
+# 自定义 OAuthUser 模型在 Django 后台的展示方式
class OAuthUserAdmin(admin.ModelAdmin):
+ # 可搜索字段(后台右上角搜索框)
search_fields = ('nickname', 'email')
+ # 每页显示的记录数
list_per_page = 20
+ # 在后台列表页显示的字段列
list_display = (
'id',
'nickname',
- 'link_to_usermodel',
- 'show_user_image',
+ 'link_to_usermodel', # 自定义方法:显示关联的用户链接
+ 'show_user_image', # 自定义方法:显示头像缩略图
'type',
'email',
)
+ # 列表中可点击进入详情页的字段
list_display_links = ('id', 'nickname')
+ # 右侧筛选器
list_filter = ('author', 'type',)
+ # 只读字段(此处先留空,稍后在 get_readonly_fields 动态设置)
readonly_fields = []
+ # 动态设置只读字段:让所有字段都变为只读,禁止编辑
def get_readonly_fields(self, request, obj=None):
return list(self.readonly_fields) + \
[field.name for field in obj._meta.fields] + \
[field.name for field in obj._meta.many_to_many]
+ # 禁止在后台手动添加 OAuthUser
def has_add_permission(self, request):
return False
+ # 在后台列表中显示用户模型的跳转链接
def link_to_usermodel(self, obj):
if obj.author:
+ # 获取关联用户的 app_label 和 model_name,用于反向生成后台编辑页面链接
info = (obj.author._meta.app_label, obj.author._meta.model_name)
link = reverse('admin:%s_%s_change' % info, args=(obj.author.id,))
+ # 返回带 HTML 的超链接
return format_html(
u'%s' %
- (link, obj.author.nickname if obj.author.nickname else obj.author.email))
+ (link, obj.author.nickname if obj.author.nickname else obj.author.email)
+ )
+ # 在后台列表中显示用户头像(缩略图)
def show_user_image(self, obj):
img = obj.picture
return format_html(
- u'
' %
- (img))
+ u'
' % (img)
+ )
+ # 修改后台列标题显示名称
link_to_usermodel.short_description = '用户'
show_user_image.short_description = '用户头像'
+# 自定义 OAuthConfig 模型在后台的展示方式
class OAuthConfigAdmin(admin.ModelAdmin):
+ # 在后台列表中显示的字段
list_display = ('type', 'appkey', 'appsecret', 'is_enable')
+ # 右侧筛选器
list_filter = ('type',)
diff --git a/oauth/forms.py b/oauth/forms.py
index 0e4ede3..ebe2946 100644
--- a/oauth/forms.py
+++ b/oauth/forms.py
@@ -2,11 +2,21 @@ from django.contrib.auth.forms import forms
from django.forms import widgets
+# 定义一个表单类,用于在 OAuth 登录时补充或验证邮箱信息
class RequireEmailForm(forms.Form):
+ # 邮箱字段,必填
email = forms.EmailField(label='电子邮箱', required=True)
+ # OAuth 用户 ID(隐藏字段,用于在后台提交时识别用户)
oauthid = forms.IntegerField(widget=forms.HiddenInput, required=False)
+ # 构造函数,用来自定义表单字段的显示样式
def __init__(self, *args, **kwargs):
+ # 调用父类初始化方法
super(RequireEmailForm, self).__init__(*args, **kwargs)
+ # 自定义 email 输入框的 HTML 样式与属性
self.fields['email'].widget = widgets.EmailInput(
- attrs={'placeholder': "email", "class": "form-control"})
+ attrs={
+ 'placeholder': "email", # 输入框占位提示文字
+ "class": "form-control" # Bootstrap 样式类,统一表单外观
+ }
+ )