Django管理后台

这篇具有很好参考价值的文章主要介绍了Django管理后台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

第一种注册model的方法

认识后台管理页面

第二种注册model的方法

ModelAdmin的常用属性

利用actions丰富动作工具栏

利用list_display修改显示列

利用search_fields添加搜索框

利用list_filter添加过滤器

利用ordering重新定义Model实例的顺序

分页相关的属性

利用fields自定义显示Model的字段

利用exclude 自定义显示Model的字段

利用fieldsets将字段分组显示

利用readonly_fields将部分字段设置为只读


在Django中,框架为我们自动添加了后台管理系统,在管理后台中可以实现对Model实例对象的增加、删除和修改,这是非常简单且方便的,但同时这又是非常危险的,不应该每个用户都有这样的权限。

在进入管理系统之前,则需要注册管理员账号。

python manage.py createsuperuser

输入上面命令后,安装提示输入用户名、邮箱地址、密码,这就完成了注册管理元账号的操作,在这里就不演示了。

然后启动服务器,输入http://127.0.0.1:8000/admin/ 网址,就可以看到管理员登录界面了。

Django管理后台

输入你注册的账号和密码,则就进入 Django 管理页面的索引页。

Django管理后台

此时在后台中只有用户和组两个Model,在两个是Django中自动添加的,而应用的model则需要我们自己手动进行注册才可以使用。一共有两种方法可以对model进行注册。

第一种注册model的方法

只需要给register方法传递Model对象的列表就完成了注册过程如:

admin.site.register(blog)

则是将blog模型注册到了后台,这种方法没有附加定制化的功能,但是这对于简单的增删改操作已经足够了。此时页面就成了下图效果,已经多了blog的管理入口,点击后则可以对数据进行增删改查操作。这个就不演示了

Django管理后台

 默认情况下,管理入口的名字是Model的名字后面加上字母s显示。如果要自定义这个名称,可以在Model的Meta中声明。

    class Meta:
        verbose_name_plural = '博客'

声明后,显示效果则为

Django管理后台

认识后台管理页面

Django管理后台 默认的ChangeList页面看上去比较“简陋”,它主要包含4个区域。

  • 动作工具栏:常被用于对实例对象的批处理操作。目前只有“删除所选的话题”一个动作可以使用,勾选实例,单击“执行”按钮,可以将其从数据表中删除。
  • Model实例对象列表:这里会展示Topic对应数据表的数据记录,数据记录的名称取自Model中的__str__函数的返回值。这个区域会自动分页展示,默认每页100条数据。另外需要注意,这里展示的数据记录除了会按照自定义的顺序排序之外,还会自动地加上按照主键倒序排列。
  • Model实例对象总数:位于实例列表的下方(如图中显示的“3话题”),Django会使用SELECT COUNT(*)的方式获取记录总数。
  • 增加Model实例对象:位于页面的右上角,单击此按钮即可跳转到Model的添加页面。

需要注意,页面的标题“选择话题来修改”和Model实例对象上面的加粗“话题”都是由Topic中Meta的verbose_name指定的。

指定方式与上面的修改入口名字一样。变量名为verbose_name即可。

点击添加后,则会出现下面的页面

Django管理后台

 需要注意的是:

  • 这个表单是从注册的Model中自动生成的
  • 字段展示的顺序与在Model中定义的顺序相同,但是需要注意,主键和不可编辑的字段不会显示。
  • 字段展示的控件由字段类型决定,
  • 字段下方的文字提示由字段定义的help_text参数指定
  • 对字段的修改内容如果不合法,页面会给出错误提示。

第二种注册model的方法

则是使用admin.register装饰器注册,这种方式能够实现与register方法同样的功能,并且这种方式可以通过配置对应的属性构建一个自己想要的管理后台。

ModelAdmin的常用属性

利用actions丰富动作工具栏

ChangeList中的动作工具栏默认只包含“删除所选的XX”,它可以实现批量删除Model实例对象的操作。批量操作是一个非常有用的特性,例如针对用户发布的Topic,如果能在动作工具栏中实现批量地上线和下线(对应is_online字段),会给管理员操作多个Topic时带来很多方便。这时,可以选择使用actions属性来实现。

from django.contrib import messages
from django.utils.translation import ngettext

class ArticleAdmin(admin.ModelAdmin):
    ...

    @admin.action(description='Mark selected stories as published')
    def make_published(self, request, queryset):
        updated = queryset.update(status='p')
        self.message_user(request, ngettext(
            '%d story was successfully marked as published.',
            '%d stories were successfully marked as published.',
            updated,
        ) % updated, messages.SUCCESS)
    actions = ['make_published']

上面的是官方文档中的例子,其中 queryset.update(status='p')语句则表示需要修改的数据,可以根据需求进行修改。

description='Mark selected stories as published'中的Mark selected stories as published则表示行为描述

actions = ['make_published']定义完动作后还需要在actions列表中加入修改的函数,否则是不会生效的!

利用list_display修改显示列

默认情况下,Model的ChangeList页面只会显示一列,内容是实例对象的__str__()函数返回值。如果想多显示一些列值数据,那么可以通过ModelAdmin的list_display属性来实现。

list_display是一个列表,列表内的数据可以是modle的字段名,每一个元素表示一个列,列的名称与字段名称是对应的,点击每一列还可以根据则一个列的数据进行升序或者降序

如:

list_display = ['name', 'age', 'sex']

同时,该列表中的值也可以是一个函数。该函数返回一个html代码的字符串,可以对显示字段进一步的自定义。如:

@admin.register(Avatars)
class AvatarsAdmin(admin.ModelAdmin):
    def getAvatars(self):
        avatars = Avatars.objects.get(nid=self.nid)
        return mark_safe(f"<img src='{avatars.url.url}' style='width: 100px;height: 80px'></img>")

    getAvatars.short_description = '头像'

    list_display = [getAvatars]

需要注意的是,使用函数返回html文本时,需要导入一下函数

from django.utils.safestring import mark_safe

 用来标记该html语句的安全。使用short_description属性可以自定义该函数显示字段位置的标题,默认为函数名。

利用search_fields添加搜索框

根据某个字段或者某几个字段的值对当前的实例列表进行搜索是很有意义的,Django考虑到了这一点,提供了search_fields属性,在ChangeList中表现为一个搜索框,查询的字段可以是CharField或TextField类型的,也可以是对ForeignKey或ManyToManyField字段类型的引用查询,使用双下画线引用字段名。

list_display是一个列表,列表内的数据必须是modle的字段名,表示可以查询添加,也支持模糊查询。如:

search_fields = ['name', 'age', ]

利用list_filter添加过滤器

配置list_filter属性,可以在Model的ChangeList页面的右侧添加过滤器,且各个过滤条件是AND的关系。list_filter是列表或者元组类型,通常使用它会传递两类元素:Model的字段名或继承自django.contrib.admin.SimpleListFilter的类。对于Model的字段名,字段类型必须属于BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey或ManyToManyField中的一种。同样也可以使用双下画线实现跨表关联。 如:

list_filter = ['name']

利用ordering重新定义Model实例的顺序

这个属性用于定义ChangeList中展示的Model实例的顺序,属性的值可以是元组或者列表,定义的方式与Model中Meta的ordering声明是相同的。如果没有指定的话,则默认按照Model的排序规则。如:

ordering = ['-age']

分页相关的属性

  • list_per_page
    • 指定每页显示多少条数据记录,默认为100
  • list_max_show_all
    • 当Model的总数据记录数小于等于它的时候就会出现“显示全部”的链接。默认值为200
  • get_queryset
    • ChangeList页面中的数据记录由get_queryset方法返回,如果想要定制返回特定的数据记录,就需要重写这个方法。

利用fields自定义显示Model的字段

默认情况下ChangeForm页面中会显示除了主键和不可编辑字段之外所有的字段,但是有些时候可能想隐藏一些敏感的字段或者不需要显示的字段,此时可以使用fields属性指定哪些字段可以显示。

该字段也是一个列表,列表内的每一个元素表示需要显示的字段,其他的字段则不会显示。同时显示的字段顺序也会按照列表内元素的顺序排列。如:

fields = ['age','name']

如果需要让多个字段显示在同一行的话,只需要将在一行中显示的字段组合放在元组中就可以了。如:

fields = [('age','name')]

利用exclude 自定义显示Model的字段

与fields类似,但是这个属性列表的元素是不显示的字段,这不会影响字段的显示顺序

利用fieldsets将字段分组显示

fieldsets可以实现将Model中的字段分组显示在ChangeForm中(同样会影响“增加”页面),它的配置方式也显得相对复杂。fieldsets是一个二元组的列表,其中的每一个二元组都是一个字段分组,且二元组的格式为:(name,field_options)。name标识分组的名称,field_options是字段分组信息的字典,其中包括了当前分组的字段列表。

利用readonly_fields将部分字段设置为只读

默认情况下,ChangeForm中显示的所有字段都是可编辑的,这本身并没有什么问题,但是,对于业务系统而言,这可能会导致一些错误。

ModelAdmin为此提供了readonly_fields,它是一个列表或元组,可以将字段的名称置于其中,这些字段将不可编辑。它还可以接收Model中的方法或ModelAdmin的方法,这将会在页面中展示这些方法的返回值。如:

readonly_fields = ('name',)

自定义admin方法

  • save_model(requestobjformchange)
    • 保存时调用的方法
  • delete_model(requestobj)
    • 删除时调用的方法
  • has_add_permission(request)
    • 如果允许添加对象,应返回 True,否则返回 False
  • has_change_permission(requestobj=None)
    • 如果允许添加对象,应返回 True,否则返回 False

​​​​​​​由于这类方法过多了,就不过多详解了,详细看官网链接。

Django 管理站点 | Django 文档 | Django (djangoproject.com)https://docs.djangoproject.com/zh-hans/4.0/ref/contrib/admin/#modeladmin-methods文章来源地址https://www.toymoban.com/news/detail-425874.html

到了这里,关于Django管理后台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Django】使用xadmin构建后台管理系统

    在github搜索xadmin并下载源码 由于xadmin报错实在是太多了,我前前后后改了三十多个报错,查阅了数百篇博客以及文献。为了以后不去重复处理报错,我fork了原来的xadmin项目,新建了自己的xadmin版本:MyXadmin,因此我建议你使用该仓库的xadmin版本。 在setting的INSTALLED_APPS中添加

    2024年02月09日
    浏览(50)
  • 使用Django自带的后台管理系统进行数据库管理的实例

    Django自带的后台管理系统主要用来对数据库进行操作和管理。它是Django框架的一个强大功能,可以让你快速创建一个管理界面,用于管理你的应用程序的数据模型。 使用Django后台管理系统,你可以轻松地进行以下操作: 数据库管理:你可以查看、添加、编辑和删除数据库中

    2024年02月15日
    浏览(55)
  • Django搭建图书管理系统03:编写博客文章的Model模型

    Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。 它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 模板(Template),即业务逻

    2024年02月12日
    浏览(42)
  • django后台管理中导出Excel表格与其它表格数据等功能

    需求,在django admin后台中添加导出excel表格功能 需求人群:财务,董事 该插件允许导出文件的格式为:xls,xlsx,csv,tsv,ods,json,yaml,html 执行该命令将会安装以下插件 ![[Pasted image 20240119043040.png]] ![[Pasted image 20240119043224.png]] 3在订单models.py相同路径中创建resources.py文件 ![[Pasted image 2

    2024年01月25日
    浏览(52)
  • Python学习笔记-Django框架基础,APP,数据模型,后台管理,路由

    Django框架是Python的常用web框架,遵循 MVC 设计模式的框架,采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的

    2024年02月16日
    浏览(41)
  • Vue_Django 登录注册+图书管理系统

    点击查看代码 点击查看代码 点击查看代码 点击查看代码 点击查看代码

    2024年02月08日
    浏览(39)
  • Django框架中models对象转换为json的方法

    在django框架中输出api接口时一般都是输出json数据但是通过orm获取的数据库数据一般都是object所以需要转换成json数据,一般有一下3种情况 1.models对象使用“all()”时 2.models对象为单个值\\\"get()\\\"时: 3.models对象使用values或者values_list时:  

    2024年02月08日
    浏览(73)
  • Django后台和微信小程序之间使用session方法,出现小程序访问404,Django后台找不到指定的URL问题解决

    在Django后台开启session中间件,小程序端请求Django后台的session属性,在Django中执行session会话操作,并响应应答给小程序,在小程序端执行cookie的缓存和读取操作。 在上述的功能完成后,小程序端访问时出现404错误,Django后台找不到指定的URL路径。 1、排查Django后台的URL路径是

    2024年02月06日
    浏览(46)
  • Vue3+element-plus 后台管理系统(含登陆注册功能页面)

    最近在学习Vue3,记录一下自己从0开始搭建后台框架,并获取远程接口数据对页面的渲染 本次功能实现主要包括:连接后端的远程接口数据进行登录注册功能实现 : 1.本次登陆注册合并为了一个页面,页面都使用了element-plus中的组件渲染,更加美观 2.用route路由实现不同页面逻辑跳

    2023年04月26日
    浏览(54)
  • 使用Django框架+SIMPLEUI+import_export设计公司后台管理系统

    本文详细介绍了如何在Windows系统上,使用PyCharm和Python的web开发框架Django,结合SIMPLEUI插件和import_export,来搭建一个功能全面的公司后台管理系统。

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包