Django的admin后台是个好东西,接业务需求,需要开发一个单独的修改用户名的页面,没有前端支持只能考虑使用admin了。
数据模型
from django.db import models
class Order(models.Model):
""" 订单表 """
serial = CharField(max_length=64, verbose_name="编号", help_text="编号")
class User(models.Model):
""" 用户表 """
order = ForeignKey(Order, on_delete=SET_NULL, verbose_name="关联订单", help_text="关联订单", default=None, null=True)
id_no = CharField(max_length=24, verbose_name="身份证号码", help_text="身份证号码")
name = CharField(max_length=64, verbose_name="姓名", help_text="姓名")
mobile = CharField(max_length=11, verbose_name="手机号", help_text="手机号", default=None, null=True, blank=True)
phone = CharField(max_length=11, verbose_name="还是手机号", help_text="还是手机号", default=None, null=True, blank=True)
remark = CharField(max_length=256, verbose_name="备注", help_text="备注", default=None, null=True, blank=True)
class Meta:
verbose_name_plural = '修改用户名操作'
-
verbose_name_plural
,在admin后台展示的表名。
admin配置
基础配置
from django.contrib import admin
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
form = EditLaborForm
list_display = ['name', 'id_no']
search_fields = ['name', 'order__serial']
fields = ("name", 'id_no', 'mobile', 'phone', 'remark', 'order')
readonly_fields = ("remark")
prepopulated_fields = {'phone': ('mobile',)}
raw_id_fields = ("order")
list_per_page = 10
-
@admin.register(User)
,注册
User
表。
-
list_display
,控制数据列表页显示的字段。
-
search_fields
,查询字段,也可以直接查询外键关联表的字段。
-
fields
,数据详情页显示的字段。
-
readonly_fields
,只读的字段,不能操作修改。
-
prepopulated_fields
,自动填充字段,例:phone会同步显示在mobile输入框中输入的内容,
注
:该方法不能同步中文,只能同步数字或者字母。
-
raw_id_fields
,外键关联的字段输入框会从原来默认的下拉选择框变为输入框,可以点击右面的放大镜图标,查询选择已有数据。
-
list_per_page
,每页展示的数据量。
进阶配置
加数据校验
from django import forms
class UserForm(forms.ModelForm):
remark = CharField(max_length=64, required=True, label='必填的备注')
class Meta:
model = User
exclude = ['id']
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
form = UserForm
list_display = ['name', 'id_no']
search_fields = ['name', 'order__serial']
fields = ("name", 'id_no', 'mobile', 'phone', 'remark', 'order')
readonly_fields = ("remark")
prepopulated_fields = {'phone': ('mobile',)}
raw_id_fields = ("order")
list_per_page = 10
-
原有的
remark
字段是直接根据
model
中的配置进行校验的,是非必填的,但是现在重新定义了
form
,就会使用自定义的
UserForm
进行校验数据。
UserForm
中定义了
remark
的
required
参数为
True
,所以现在
remark
变为了必填字段,用户不填写该字段会在点击保存时在
必填的备注
一栏上显示,该字段为必填项。
自定义报错内容和校验
-
重构
UserForm
的
clean
方法。
class UserForm(forms.ModelForm):
remark = CharField(max_length=64, required=True, label='必填的备注')
class Meta:
model = User
exclude = ['id']
def clean(self):
""" 校验后的数据处理, 和手动处理方法 """
cleaned_data = self.cleaned_data
phone = cleaned_data.get('phone')
mobile = cleaned_data.get('mobile')
errors = {}
if phone != mobile:
errors.update({"phone": '填写的手机号重复', "mobile": '填写的手机号重复'})
self.add_error(field=None, error=errors)
-
self.cleaned_data
,进行校验后的数据。
-
self.add_error()
,添加报错内容,参数
field
为报错字段,参数
error
为报错内容。当
error
字段是一个字典时
field
字段需要填
None
,然后会自动取值
error
参数中的key作为报错字段, value作为报错内容。报错内容会显示在对应字段的输入框上面。
重构创建的方法
-
重构
UserAdmin
的
save_model
方法。
def save_model(self, request, obj, form, change):
""" 创建用户 """
if request.POST:
return super(EditLaborAdmin, self).save_model(request, obj, form, change)
处理详情的数据
-
重构
UserAdmin
的
render_change_form
方法。
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
""" 重构详情里的返回数据 """
# oss地址加上token
if obj and obj.mobile:
obj.mobile = f'+86{obj.mobile}'
return super(EditLaborAdmin, self).render_change_form(request, context, add, change, form_url, obj)
在admin.py文件中声明:❤️
manage的startapp命令在创建post应用的时候会自动创建admin.py文件,想要把自定义的Model注册到管理后台,就需要在这个文件中进行声明:
用户反馈管理功能,是对前端用户反馈的问题进行展示,并可实现删除功能。是一个很实用的功能,也算是当代网站的标配。它可以实时的跟踪到用户对网站的各种意见和吐槽,开发者能及时修缮网站功能或者修改网站bug。
本讲我们会讲到一些关于发邮件的技术。我们知道,订阅功能是一个很常见的功能,当用户订阅某个网站后,网站会通过后台给用户发送网站最新的一些动向,一般是通过邮件来发送的。当你阅读完本节内容,会对发邮件的流程有一个大概的了解。
照例我们先添加评论管理的相关路由
path('comment_list/', views.CommentListView.as_view(), name='comment_list'),
path('comment_delete/', views.comment_delete, name='comment_delete'),
首先是评论列表的展示,我们通过CommentListView视图类来实现,该类依然是继承ListView来实现的。
从本讲开始,我们开始视频管理功能的开发,视频管理包括视频上传、视频列表、视频编辑、视频删除。另外还有视频分类的功能,会一同讲解。这一讲非常重要,因为你将学习到一些之前没有学过的技术,比如大文件上传技术。
从本讲起,我们会介绍后台管理系统的开发,后台管理,主要是对数据库中的数据进行增、删、改、查的操作,满足网站管理员对网站的管理与维护的需求。
其实,django自带的也有一个后台管理系统(/admin),但是自带的后台非常简陋,无论是界面,还是功能上,都无法满足用户的需求,因此,我们自己开发了一套后台管理系统。