Django快速入门——(三) 项目后台Admin 站点管理

内容发布(后台管理)

  • 站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分
  • “内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。
  • 因此, Django 会根据定义的模型类完全自动地生成管理模块

Django 框架中有一个非常强大的应用功能: 自动管理界面。 常被Web平台管理者使用,去管理整个Web平台。
默认情况下,在 settings.py 配置文件中 INSTALLED_APPS 包含以下应用程序,为了后续的开发,默认这些应用程序都是包含在里面的。

应用程序功能
django.contrib.admin管理网站
django.contrib.auth认证管理
django.contrib.contenttypes内容类型的框架
django.contrib.sessions会话框架
django.contrib.messages消息框架
django.contrib.staticfiles管理静态文件的框架

(1). 管理界面本地化

编辑 settings.py 文件,设置编码、时区

LANGUAGE_CODE = 'zh-Hans' 
TIME_ZONE = 'Asia/Shanghai'

(2). 自定义模型加入后台管理

打开 bookApp/admin.py 文件,注册模型
from models import “自定义model”
admin.site.register(“自定义model”)

from django.contrib import admin 
from models import Book,Hero 
admin.site.register(Book)
admin.site.register(Hero)

问题:后台管理时, Book管理显示的是英文, 如何变成中文?

# bookApp/models.py

class Book(models.Model):
	 # ........此处省略 
	# 字符串的友好展示, 在交互式环境测试的时候生效
    def __repr__(self):
        return '<Book: %s>' % (self.title)
    # 字符串友好展示,在后台管理的时候生效
    def __str__(self):
        return self.title
	 # 自定义对应的表名,默认表名:bookApp_book 
	 class Meta: 
	 		## 对Book数据表重命名为books
	 		db_table = "books" 
	 		# 单数时显示的名称 
	 		+ verbose_name = '图书信息' 
	 		# 复数时显示的名称 
	 		+ verbose_name_plural = '图书信息'

(3) 自定义管理页bookApp/admin.py

Django 提供了 admin.ModelAdmin 类
通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式

from django.contrib import admin
from .models import Book, Hero

##关联对象
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 2

# 书籍自定义管理页面
class BookAdmin(admin.ModelAdmin):
    # list_display:显示字段,可以点击列头进行排序
    list_display = ['id', 'title', 'pub_date']
    # list_filter:过滤字段,过滤框会出现在右侧
    list_filter = ['title', 'pub_date']
    # search_fields:搜索字段,搜索框会出现在上侧
    search_fields = ['title']
    # list_per_page:分页,分页框会出现在下侧
    list_per_page = 3
    inlines =  [HeroInline]

# 人物自定义管理页面
class HeroAdmin(admin.ModelAdmin):
    # 后台管理查询需要的设置信息
    # list_display:显示字段,可以点击列头进行排序
    list_display = ['id', 'name', 'sex', 'content', 'book']
    # list_filter:过滤字段,过滤框会出现在右侧
    list_filter = ['book']
    # search_fields:搜索字段,搜索框会出现在上侧
    search_fields = ['name']
    # list_per_page:分页,分页框会出现在下侧
    list_per_page = 3

    # 属性的先后顺序
    # fields = ['book', 'name', 'content', 'gender']
    # 属性分组
    fieldsets = [('基础信息', {'fields': ['book', 'name']}),
                 ('详细信息', {'fields': ['content','gender']}), ]

# 后台管理的配置文件
# Register your models here.
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)

列表页属性

  • list_display:显示字段,可以点击列头进行排序
    list_display = [‘id’, ‘name’, ‘sex’, ‘content’, ‘book’]
  • list_filter:过滤字段,过滤框会出现在右侧
    list_filter = [‘book’]
  • search_fields:搜索字段,搜索框会出现在上侧
    search_fields = [‘name’]
  • list_per_page:分页,分页框会出现在下侧
    list_per_page = 3

修改页属性

  • 属性的先后顺序
    fields = [‘book’, ‘name’, ‘content’, ‘gender’]
  • 属性分组
    fieldsets = [(‘基础信息’, {‘fields’: [‘book’, ‘name’]}), (‘详细信息’, {‘fields’: [‘content’,‘gender’]}), ]
  • 注意: fields和fieldsets 只能设置一个.

关联对象

对于 Hero 模型类,关联注册
admin.StackedInline : 内嵌关联注册类
admin.TabularInline : 表格关联注册类

+class HeroInline(admin.StackedInline):
+    model = Hero
+    extra = 2
class BookAdmin(admin.ModelAdmin):
    # ....此处省略代码
+ 	 inlines =  [HeroInline]

布尔值的显示

bookApp/models.py 发布性别的显示不是一个直观的结果,可以使用方法进行封装

class Hero(models.Model): 
	# .......此处省略部分重复代码 
+	def sex(self): 
+		if self.gender: 
+			return "男" 
+		else:
+			return "女"

admin.py 注册中使用 sex 代替 gender

 class HeroAdmin(admin.ModelAdmin): 
+ 	list_display = ['id', 'name', 'sex', 'content'] 
 # .......此处省略部分重复代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值