Merge pull request '第六周个人注释作业' (#16) from hyy_branch into develop

pull/17/head
pglktbsn5 3 months ago
commit 3bb4711731

@ -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'<a href="%s">%s</a>' %
(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 src="%s" style="width:50px;height:50px"></img>' %
(img))
u'<img src="%s" style="width:50px;height:50px"></img>' % (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',)

@ -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 样式类,统一表单外观
}
)

Loading…
Cancel
Save