一)对于admin的初了解
1.简介
Django是一种流行的Python Web开发框架,它提供了一个功能强大且易于使用的admin界面,用于管理网站的后台数据和功能。Django的admin界面是自动生成的,它根据你的模型类自动创建表单和列表视图。你只需将模型类注册到admin界面,就可以轻松地管理和操作数据库中的数据。
admin界面提供了各种功能,包括:
- 列表视图:以表格形式展示数据库中的数据,支持分页、搜索和排序功能,方便快速浏览和筛选数据。
- 表单视图:用于创建、编辑和删除数据库中的数据。Django的表单视图提供了丰富的表单字段类型,例如文本框、下拉列表、日期选择等,同时支持数据验证和错误提示。
- 权限控制:admin界面支持基于角色的权限控制,你可以定义不同的用户角色,并为每个角色分配不同的权限,从而限制用户对数据和功能的访问权限。
- 自定义界面:Django的admin界面可以通过自定义模板和样式进行个性化定制,你可以根据自己的需求修改界面的布局、颜色和图标等。
- 插件扩展:Django的admin界面支持插件扩展,你可以通过安装第三方插件来增加额外的功能和特性,例如图表展示、导入导出数据等。
总的来说,Django的admin界面为开发者提供了一个方便、快速和安全地管理和操作后台数据的工具,极大地提高了开发效率和用户体验。无论是小型项目还是大型企业应用,admin界面都是一个不可或缺的组成部分。
2.admin的位置
在我们创建了Django的项目后,我们在最原始的urls.py中就可以看见关于admin的路径:
如果要访问admin后台我们只需要输入以下网址:
http://127.0.0.1:8000/admin/
页面会自动跳转,读者也可根据自身的需求去改变urls.py中的路径。
二)admin的相关功能
1.创建超级用户
在创建超级用户前我们需要保证项目已经创建成功,连接了数据库并且成功执行力数据库的生成和迁移命令。
在启动Django项目后我们首次进入admin后台管理界面是需要用户名与密码的创建,我们需要在命令终端通过以下命令去创建超级用户,即管理员:
python manage.py createsuperuser
注意,这里的Password(密码)两次需要输入相同密码,长度至少八个字符(非强制要求),输入的密码不会显现。创建好的超级用户我们可以在auth_user表中看见:
2.管理界面的本地化
在初次进入admin后台界面的时候我们会发现页面全是英文,有太多的操作不便,我们可以操作控制将admin界面的语言本地化。
这里有两种方式都可以执行:
- 在seetings.py文件中将配置项LANGUAGE_CODE的值设置为"zh-Hans",TIME_ZONE的值设置为"Asia/Shanghai"
- 在seetings.py文件中配置项MIDDLEWARE(中间件)中添加本地化中间件"django.middleware.locale.LocaleMiddleware"
两种方式各有千秋,如果只是想要用本地语言来运行Django,并且该语言的语言文件存在,只需要第一种方式即可。如果要让每一个使用者各自指定语言偏好,就需要使用第二种方式。LocaleMiddleware 使得Django基于请求的数据进行语言选择,从而为每一位用户定制内容。它为每一个用户定制内容。
3.有关模型类
a.模型类的创建与注册
模型类的创建在前文《Django之ORM操作初了解》已经讲过,感兴趣的读者可以翻看前文,这里将给出一个例子给大家参考:
#借阅人模型
class taker(models.Model):
taker_name = models.CharField(verbose_name="借阅人姓名",max_length=20,unique=True)
taker_number = models.IntegerField(verbose_name="借阅人ID",default='0000')
taker_identity = models.CharField(verbose_name="借阅人身份",choices=(("0","学生"),("1","教师")),max_length=20,default="0")
我们如果想要将其在admin后台显现处理啊,就需要在应用的admin.py文件中将其注册到后台,在这里同样也有两个方式将其注册:
- 装饰器:
from django.contrib import admin
from .models import Goods
@admin.register(Goods)
class xxx
一般需要操作展示数据或者定制时会使用此方式注册,不是很好理解是吧,给大家一个具体的例子:
@admin.register(taker)
class TakerAdmin(ImportExportModelAdmin):
list_display = ("taker_name","taker_number","taker_identity")
search_fields = ("taker_name","taker_number")
这里的xxx也就是我们在models.py中创建的类的名字,而之后如果我们想要控制这个类展现怎样的数据和其他功能的自定义我们就需要用装饰器的方式。
- 使用admin.site.register()注册模型
# 语法 admin.site.register(模型名)
admin.site.register(xxxx)
同样,这里的xxxx也是我们在models.py中创建的类的名字,如果我们没有什么需要自定义的就只需要用这个方式注册模型。
注册了之后我们就可以在admin界面上查看到数据:
b.修改展示的名称
这样的模型名称与应用名称很不好让人理解,我们可以根据实际的情况修改。
我们先修改应用的名称,我们需要在应用的init.py文件中添加如下代码:
default_app_config = 'xxxx.apps.xxxxConfig'
这里的xxxx是应用的名称,apps是应用的包路径,而xxxxConfig是应用的配置类。
然后我们在应用的apps.py文件中使用verbose_name设置应用的名称:
from django.apps import AppConfig
class xxxxConfig(AppConfig):
name = 'xxxx'
verbose_name = '商品信息'
这里的xxxx意义相信大家都知道,而verbose_name中的就是我们需要展示出来的名称。
同样,修改模型名称也很简单,我们只需要在models.py文件中操作,如下:
from django.db import models
# Create your models here.
class xxxx(models.Model):
...
class Meta:
verbose_name = '商品' # 模型名称(单数)
verbose_name_plural = verbose_name # 模型名称(复数)
请注意Meta的缩进,其被我们的模型类所包括,在这使用verbose_name等命令去控制显示的名称:
c.数据的增删查改
我们的admin页面是自己携带了增删查改的界面,我们只需要去跟着操作就行,例如增加数据:
这里的操作数据库会自动同步,完全不用担心是否会造成数据混乱的问题。
d.定制列表页数据
前面我提到过,可以自定义展示的数据与功能,这里我简单给大家一些选项:
代码 | 功能 |
---|---|
list_display | 展示的数据字段 |
search_fields | 搜索的数据字段 |
list_filter | 过滤的数据字段 |
ordering | 排序的数据字段 |
exclude | 不显示的数据字段 |
那么如何使用呢,只需要在应用的admin.py文件中进行:
@admin.register(book)
class BookAdmin(admin.ModelAdmin):
# 页面上展示的内容
list_display = ("book_name","author", "book_price")
当然,也可用另外一个方式:
class BookAdmin(admin.ModelAdmin):
list_display = ('id','name', 'price', 'stock', 'sales', 'create_time', 'update_time')
admin.site.register(Book,BookAdmin)
当然,我个人较为推荐第一种方式,从我主观的角度来看较为清晰代码的解构。
e.定制编辑页数据
如果数据的展示我们可以自定义功能,那么编辑数据的编辑页我们自然也可控制,这里也给大家举一些例子:
代码 | 功能 |
---|---|
fields | 显示的数据字段; |
支持以二维元组形式设置字段分栏显示,在fileds中一个元组表示一栏数据 | |
fieldsets | 对可编辑的数据字段分组; |
不可与fields一起用 | |
readonly_fields | 只读的数据字段 |
save_on_top | 设置在这编辑页上面是否展现保存、删除等按钮,默认为False,不显示 |
f.自定义字段
自定义字段指与模型相关,但并不包含在模型中的字段,这种字段是定义在应用的admin.py文件中的一些函数,这些函数会将模型实例作为参数。也就是说假如我们类里设置了商品的单价与销售的数量,但是我们没有设置其销售额,该如何得到?利用自定义字段就可以解决:
def sales_volume(g):
total = g.price * g.sales
return f'{g.name}销售额为:{total}'
sales_volume.short_description = '商品销售额' # 设置字段描述
@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'sales', 'create_time', 'update_time',sales_volume)
4.认证与授权
Admin提供管理用户与组、用户与组权限的功能,使用超级用户登录后台管理系统后可以对用户或组进行增加,或变更用户与组的权限。