详细介绍如何使用Django的后台管理Admin

后台管理
一个网站分为前台(普通用户访问)和管理后台(由网站管理员访问)两部分

管理后台由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块,需要按照如下步骤操作

管理界面本地化
创建管理员
注册模型类
自定义管理页面
操作演示:

1)本地化 (语言和时区)

修改settings.py文件。

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'    # 指定语言(注意不要写错,否则无法启动服务器)
 
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'  # 指定时间

2)创建登录后台的管理员

python3 manage.py createsuperuser
需要指定: 用户名,邮箱,密码

3)注册模型类

在应用下的admin.py中注册模型类:告诉djang框架,根据注册的模型类来生成对应表管理页面:

# app01/admin.py:
from app01.models import Department, Employee
 
# 注册Model类
admin.site.register(Department)
admin.site.register(Employee)

4) 启动服务器:

python manage.py runserver

在浏览器上输入以下地址,进入管理后台,对数据库表数据进行管理:


http://127.0.0.1:8000/admin

5)自定义数据模型显示哪些字段信息

自定义模型管理类,作用:告诉django在生成的管理页面上显示哪些内容。

# app01/admin.py:
class DepartmentAdmin(admin.ModelAdmin):
    # 指定后台网页要显示的字段
    list_display = ["id", "name", "create_date"]
 
 
class EmployeeAdmin(admin.ModelAdmin):
    # 指定后台网页要显示的字段
    list_display = ["id", "name", "age", "sex", "comment"]
 
 
# 注册Model类
admin.site.register(Department, DepartmentAdmin)
admin.site.register(Employee, EmployeeAdmin)

Admin站点
内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块,在Django项目中默认启用Admin管理站点。

后台管理准备工作
1、数据库配置:

配置数据库
mysql中创建数据库:db_django05
在项目的__init__文件中import pymysql包
2、模型操作

(1)、创建Area区域模型类;

class Area(models.Model):
    """地区类"""
    title = models.CharField(max_length=50)
    # 外键: 自关联
    parent = models.ForeignKey('self', null=True, blank=True)

(2)、生成迁移文件,再作迁移生成数据库表;

(3)插入测试数据: source area.sql (资料中提供)
3、admin后台管理操作

(1)创建后台管理器账号

python manage.py createsuperuser

按提示填写用户名、邮箱、密码,确认密码。

(2)注册模型类: 要在后台要能看到模型类表,需要在admin.py中注册模型类


from django.contrib import admin
from models import *
 
admin.site.register(Area)

(3)登录到后台: 通过http://127.0.0.1:8000/admin/访问服务器: 输入刚创建的用户名和密码,登录到后台管理界面,登录成功可以看到如下,可以对Area进行增加、修改、删除、查询的管理操作:
在这里插入图片描述

列表页选项
类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式。

在app01/admin.py中,注册模型类前定义管理类AreaAdmin


class AreaAdmin(admin.ModelAdmin):
    pass

打开app01/admin.py文件,注册模型类代码如下


admin.site.register(AreaInfo, AreaAdmin)

接下来介绍如何控制列表页、增加修改页展示效果

1、每页显示多少条

打开booktest/admin.py文件,修改AreaAdmin类如下:

class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10  # 默认为100条

在浏览器中查看区域信息的列表页面,效果如下图:

在这里插入图片描述

设置操作选项的位置

app01/admin.py


    class AreaAdmin(admin.ModelAdmin):
        ...
        # 显示顶部的选项
        actions_on_top = True
        # 显示底部的选项
        actions_on_bottom = True

在浏览器中刷新效果如下图:

在这里插入图片描述
列表中的列操作

定义列表中要显示哪些字段

# app01/admin.py
class AreaAdmin(ModelAdmin):
 
    # 定义列表中要显示哪些字段
    list_display = ['id', 'title']

点击列头可以进行升序或降序排列

模型类中定义的方法也可以作为列显示(通过此方式可访问关联对象的属性)

# models.py
class Area(models.Model):
    """区域显示"""
    ...
 
    def parent_area(self):
        """返回父级区域名"""
        if self.parent is None:
            return ''
 
        return self.parent.title

注册列:

class AreaAdmin(ModelAdmin):
    ...
    # 定义列表中要显示哪些字段(也可以指定方法名)
    list_display = ['id', 'title', 'parent_area']

修改显示的列的名字

列标题默认为属性或方法的名称,可以通过属性设置。对于模型属性,通过verbose_name设置,对于方法,通过short_description设置,如下:

# models.py
class Area(models.Model):
    """区域显示"""
 
    # 设置verbose_name属性
    title = models.CharField(verbose_name='名称', max_length=30)  # 区域名
 
    def parent_area(self):
        """返回父级区域名"""
        if self.parent is None:
            return ''
 
        return self.parent.title
 
    # 指定方法列显示的名称
    parent_area.short_description = '父级区域'

  # 方法列默认不能排序,需要指定方法列按id进行排序
  parent_area.admin_order_field = 'id'

右侧栏过滤器

使用list_filter指定过滤,只能接收字段,会将对应字段的值列出来,用于快速过滤。一般用于有重复的字段。

# admin.py
class AreaAdmin(ModelAdmin):
    ...
    # 右侧栏过滤器
    list_filter = ['title']

刷新效果如下:
在这里插入图片描述

搜索框

使用search_fields属性, 对指定字段的值进行搜索,支持模糊查询

# admin.py
class AreaAdmin(ModelAdmin):
    ...
 
    # 要搜索的列的值 
    search_fields = ['title']

刷新效果如下:

在这里插入图片描述

编辑页选项
1、显示字段顺序

# admin.py
class AreaAdmin(ModelAdmin):
    ...
    # 表单中字段显示的顺序
    fields = ['parent', 'title']

修改对象显示的字符串: 重写__str__方法

# models.py
class Area(models.Model):
    """区域显示"""
    ... 
    # 重写方法
    def __str__(self):
        return self.title

刷新效果如下:
在这里插入图片描述

字段分组显示

格式如下:


fieldsets=(
    ('组1标题',{'fields':('字段1','字段2')}),
    ('组2标题',{'fields':('字段3','字段4')}),
)

注意:fieldsets和fields,只能使用其中的一个

代码:

# admin.py  
class AreaAdmin(ModelAdmin):
    ...
    # 字段分组显示
    fieldsets = (
        ('基本', {'fields': ('title',)}),
        ('高级', {'fields': ('parent',)}),
    )

编辑关联对象

在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种
类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
子类TabularInline:以表格的形式嵌入
子类StackedInline:以块的形式嵌入
在app01/admin.py文件中添加如下代码:

class AreaStackedInline(admin.StackedInline):
    model = AreaInfo    # 关联子对象(多类对象)
 
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

下面再来看下表格的效果:
在这里插入图片描述

class AreaTabularInline(TabularInline):
    model = Area   # 多类的名字
    ...
 
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]

刷新效果如下:
在这里插入图片描述

修改预留新增选项


class AreaTabularInline(TabularInline):
    ...
    extra = 2      # 额外预留新增选项默认为3个

在这里插入图片描述

重写后台管理模板
1、进入到django的admin应用的模板目录,如下:

/home/python/.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/templates/admin

找到base-site.html文件,复制到当前项目的templates/admin目录下(admin目录需要自行创建出来)

修改base-site.html内容:

新增一行代码,如下图:
在这里插入图片描述

         刷新结果:

在这里插入图片描述

choices选项和富文本编辑器
一、choices选项使用

创建测试模型类


 # apps/user/models.py
 class TestModel(models.Model):
     """测试"""
 
     ORDER_STATUS_CHOICES = (
         (1, "待支付"),
         (2, "待发货"),
         (3, "待收货"),
         (4, "待评价"),
         (5, "已完成"),
     )
 
     status = models.SmallIntegerField(default=1,
                                       verbose_name='订单状态',
                                       choices=ORDER_STATUS_CHOICES)
 
     class Meta(object):
         db_table = 'df_test'
         # 指定模型在后台显示的名称
         verbose_name = '测试模型'
         # 去除后台显示的名称默认添加的 's'
         verbose_name_plural = verbose_name

在后台注册


 # apps/users/admin.py
 from django.contrib import admin
 from apps.users.models import TestModel
 
 admin.site.register(TestModel)

创建django后台登录账号,并登录到后台

在这里插入图片描述

二、富文本编辑器使用

HTMLField富文本控件的显示效果:

使用方式:

1、安装依赖:


 pip install django-tinymce==2.6.0

2、setting.py文件中配置

 INSTALLED_APPS = (
   ...
   'tinymce',   # 使用应用
 )
 
 # 配置控件显示样式
 TINYMCE_DEFAULT_CONFIG = {
   'theme': 'advanced', # 丰富样式
   'width': 600,
   'height': 400,
 }

项目/urls.py中配置url


 import tinymce.urls
 
 urlpatterns = [
       ...
 
     # 包含tinymce urls配置文件
       url(r'^tinymce/', include('tinymce.urls')),
 ]

在模型类中使用HTMLField

 class TestModel(models.Model):
     """测试"""
 
     # 富文本控件
     desc = HTMLField(verbose_name='商品描述', null=True)
 
     ...

重新迁移数据库,登录到后台进行测试

三、修改 GoodsSPU 模型类的商品详情

1、把GoodsSPU模型类的 商品详情 字段类型 改为 HTMLField 类型

 class GoodsSPU(BaseModel):
     """商品SPU表"""
 
     desc = HTMLField(verbose_name="商品描述", default="", blank=True)
     ...

2、重新迁移数据库,生成表

3、注册: GoodsSPU 模型类,让它在后台显示,使用富文本录入 商品详情


 # 注册模型类,让它在后台显示
 from apps.goods.models import GoodsSPU
 
 admin.site.register(GoodsSPU)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值