站点管理

  • 内容发布的部分由网站的管理员负责,包括查看、添加、修改、删除数据

    • 开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块
  • 在Django项目中默认启用Admin管理站点
    • 列表页选项
    • 编辑页选项
    • 重写模板

1、启动mysql数据库:

  DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bookdb',
'HOST': 'localhost',
'PORT': '',
'USER': 'root',
'PASSWORD': '',
}
}

2、models.py文件中,定义模型类(没有迁移数据表的需要线迁移数据表)

python manage.py makemigrations

python manage.py migrate
from django.db import models

# Create your models here.
#创建作者信息表
class Authors(models.Model):
name = models.CharField(max_length=20)#作者名字
gender = models.BooleanField(default=True)#性别
age = models.IntegerField()#年龄
addr = models.CharField(max_length=60)
tel = models.IntegerField()
#元类修改表名
class Meta:
db_table = "authors"
def __str__(self):
return self.name
#创建书籍信息
class Books(models.Model):
name = models.CharField(max_length=20)#书名
pub_data = models.DateField(null=True)#出版日期
#参数max_digits表示总位数 参数decimal_places表示小数位数
price = models.DecimalField(max_digits=8,decimal_places=2)#价格
publish = models.CharField(max_length=20)
#外键 将字段定义在多的一端中 级联删除
author = models.ForeignKey(Authors,on_delete=models.CASCADE)
#修改表名(元类)
class Meta:
db_table = "books" def __str__(self):
return self.name

3、创建管理员的用户名和密码

python manage.py createsuperuser

4、在admin.py文件中将书籍与作者类名注册到后台站点

from django.contrib import admin
from Book.models import *
# Register your models here.
admin.site.register(Authors) #为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)

5、输入网址http://127.0.0.1:8000/admin/登录后台站点

进去就可以查看、添加、修改、删除操作

6、重写模型的__str__显示各个模型类的name(我上面已经写出来了)

  # 在站点显示name而不是模型类对象
def __str__(self):
return self.name.encode('utf-8')

控制站点管理页的展示

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

1、注册参数:

#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)

2、注册装饰器

 @admin.register(Books)
class BookAdmin(admin.ModelAdmin):
pass

接下来就可以在类BookAdmin中控制列表页、增加修改页展示效果(例如注册参数的例子)

1、列表页选项

  页大小:指定每页多少条数据,默认为每页显示100条数据

list_per_page = 5
#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"]
#在管理站点页大小,指定每页5条
list_per_page = 5
admin.site.register(Books,BookAdmin)

操作选项Action(动作)的位置(默认在管理页的顶部有一个,管理页底部每页)

actions_on_top = True

action_on_bottom = False
#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"]
#在管理站点页大小,指定每页5条
list_per_page = 5
#在底部新加一个Action
actions_on_bottom = True
admin.site.register(Books,BookAdmin)

列表中的列:

 list_display=[字段1, 字段2, ...]
#为了让站点显示书籍完整信息,需要重新注册模型类(列表中的列)
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)

模型方法作为列(地区示例:复制过来的):

  • 模型方法和模型字段都指定为列显示在管理界面上

    • 模型方法作为列无法直接点击列头排序,如果需要排序需要为方法指定排序依据

      # 定义AreaInfo模型方法作为列
      def title(self):
      return self.name
      list_display = ['id', 'name', 'parent', 'title']
  • 浏览效果

  • 方法作为列排序:指定方法作为列的排序依据

      # 定义模型方法作为列
    def title(self):
    return self.name
    # 指定方法作为列的排序依据
    title.admin_order_field = 'name'

***列标题:

  • 列标题默认为属性或方法的名称,可以通过属性设置为其他名称
  • 列标题的设置方式

    • 1.short_description属性设置
    • 2.verbose_name属性设置
  • short_description属性设置

    • 需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用

  • short_description属性
    
    方法名.short_description = '列标题'
    # 定义模型方法作为列
    def title(self):
    return self.name
    # 指定方法作为列的排序依据
    title.admin_order_field = 'name'
    # 修改模型title方法作为列的标题名称
    title.short_description = '区域名称'
  • verbose_name属性设置

    • 定义模型字段时指定该属性的值

      # 地区列表信息
      class AreaInfo(models.Model):
      name = models.CharField(verbose_name='地区标题', max_length=30) #名称
      parent = models.ForeignKey('self',null=True,blank=True) #关系 # 元类信息 :修改表名
      class Meta:
      db_table = 'areainfo'
  • 浏览效果

右侧栏过滤器

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

      list_filter = ['字段1', '字段2', ...]
    class AreaAdmin(admin.ModelAdmin):
    # 右侧栏过滤器
    list_filter = ['name']
  • 浏览效果

搜索框

  • 用于对指定字段的值进行搜索,支持模糊查询

     search_fields = ['字段1', '字段2', ...]
    class AreaAdmin(admin.ModelAdmin):
    # 搜索框
    search_fields = ['name']
  • 浏览效果

2、编辑页选项

进入编辑页面

字段顺序

  • 根据列表顺序指定编辑界面字段顺序

      fields = ['字段1', '字段2', ...]
    class AreaAdmin(admin.ModelAdmin):
    # 显示字段顺序
    fields = ['parent', 'name']
  • 浏览效果

字段分组

  • 字段分组fieldsets与字段顺序fields二选一使用
  • 对字段进行分组管理,有如下两种写法

      fieldsets = (
    ('组1标题', {'fields':('字段1', '字段2')}),
    ('组2标题', {'fields':('字段3', '字段4')}),
    )
    fieldsets = [
    ('组1标题', {'fields':['字段1', '字段2']}),
    ('组2标题', {'fields':['字段3', '字段4']}),
    ]
    class AreaAdmin(admin.ModelAdmin):
    # 字段分组:与fields二选一使用
    fieldsets = [
    ('基本', {'fields':['name']}),
    ('高级', {'fields':['parent']}),
    ]
  • 浏览效果

关联对象

  • 在一对多的关系中,可以在一端的编辑页面中编辑多端的对象

    • 嵌入多端对象的方式包括表格、块两种
  • 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
    • 子类StackedInline:以块的形式嵌入
    • 子类TabularInline:以表格的形式嵌入
  • admin.py文件中,创建AreaStackedInline类,继承自admin.StackedInline

      class AreaStackedInline(admin.StackedInline):
    model = AreaInfo #关联子对象
    extra = 2 #额外编辑2个子对象
    class AreaAdmin(admin.ModelAdmin):
    # 嵌入关联子对象
    inlines = [AreaStackedInline]
  • 浏览效果:以块形式嵌入

  • 浏览效果:以列表形式嵌入

以上站点管理的素材以及教程来源于github:记录下来,以便需要时能迅速查阅,翻看。

3、重写模板

  当我们需要修改站点管理页面的样式时,可以重写站点的模板

步骤:

  1、在templates目录下创建admin目录

 2、打开当前虚拟环境中的Django目录,在向下找到站点页面的模板

 代码如下:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
{#<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>#} {# 自定义内容 #}
<h1 id="site-name"><a href="{% url 'admin:index' %}">welcome use manage!!!</a></h1> {% endblock %} {% block nav-global %}{% endblock %}

11-Django站点管理的更多相关文章

  1. django站点管理

    一.启动django站点管理功能 1.关于django.contrib包   包含了django自带的众多附加组件,主要包括:   1)管理工具: django.contrib.admin   2)用 ...

  2. Django笔记 —— Admin(Django站点管理界面)

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django项目实践4 - Django站点管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  4. Django站点管理--ModelAdmin

    class AuthorAdmin(admin.ModelAdmin): list_display=('name', 'age', 'sex') #指定要显示的字段 search_fields=('n ...

  5. django中的站点管理

    所谓网页开发是有趣的,管理界面是千篇一律的.所以就有了django自动管理界面来减少重复劳动. 一.激活管理界面 1.django.contrib包 django自带了很多优秀的附加组件,它们都存在于 ...

  6. [译]MVC网站教程(三):动态布局和站点管理

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.   自定义操作结果和控制器扩展 1)   OpenFileResult 2)   ImageR ...

  7. Django项目实践4 - Django网站管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  8. django后台管理-ModelAdmin对象

    Django最强大的部分之一是自动生成的管理后台界面. 它从你的模型中读取元数据,以提供一个快速的.以模型为中心的界面,信任的用户可以在这里管理你网站上的内容. 建议管理后台仅作为组织的一个内部管理工 ...

  9. Django admin 管理工具

    admin 组件的使用 Django 提供了基于 web 的管理工具.Django 自动管理工具是 django.contrib 的一部分. INSTALLED_APPS = [ 'django.co ...

  10. django 用户管理相关的表

    Django 用户管理相关的表: create table django_content_type ( /* 内容类型表 */ id ) not null auto_increment, app_la ...

随机推荐

  1. docker容器虚拟化技术

    简单来说,在Windows系统下安装各种运行环境的坑简直不要太多了(● ̄(エ) ̄●),并不仅限于docker.Nginx.PHP.Python等等,我会尽详细写出实际过程中遇到的各种各样的奇葩问题 1 ...

  2. Linux下shell脚本实现mongodb定时自动备份

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...

  3. Glide缓存流程

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/cPLkefpEb3w12-uoiqzTig作者:连凌能 Android上图片加载的解决方案有多 ...

  4. 编译原理 #04# 中缀表达式转化为四元式(JavaScript实现)

    // 实验存档 运行截图: 代码中的总体转化流程:中缀表达式字符串→tokens→逆波兰tokens(即后缀表达式)→四元式. 由后缀表达式写出四元式非常容易,比较繁琐的地方在于中缀转逆波兰,这里采用 ...

  5. Linux系统:centos7下搭建Rocketmq4.3中间件,配置监控台

    本文源码:GitHub·点这里 || GitEE·点这里 一.环境搭建 环境版本 centos7 jdk1.8 已搭建好 rocketmq4.3 1.下载安装包 网址 https://www.apac ...

  6. 指定节点滚动到屏幕中间的js

    父节点的class是slimScrollDiv 子节点的class是fa-warning 执行这个js document.getElementsByClassName("slimScroll ...

  7. .NET Core 实现 腾讯云云解析简单客户端

    一.说明 腾讯云的.NET SDK虽然非常强大,但是对他的产品支持不是很完全,域名的云解析就没有SDK,所以自己写了一个,初衷是用来做动态DNS的,也准备接入多个云厂商,但是我自己本身仅仅只有腾讯云这 ...

  8. three.js实现世界地图城市迁徙图

    概况如下: 1.THREE.CylinderGeometry,THREE.SphereGeometry绘制地图上的标记: 2.THREE.CanvasTexture用于加载canvas绘制的字体: 3 ...

  9. C#之Form表单认证

    原文地址: https://blog.csdn.net/chadcao/article/details/7859394 ASP.NET的安全认证,共有“Windows”.“Form”.“Passpor ...

  10. 资深程序员告诉你为什么要用Python3而不是Python2

    经常遇到这样的问题:<现在开始学习python的话,是学习python2.x还是学习python3.x比较好?>,这也是许多初学者会遇到的问题,我们的答案是python 3.x. 为了帮助 ...