站点管理

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

    • 开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,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. python 中model.py详解

    model详解 Django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 创建表 基本结构 from django.db import models # Creat ...

  2. Linux中ps -elf和ps aux的区别

    一.前言 Linux下输入命令man ps查看: 加横线是 standard syntax   -- 比如ps -elf  不加横线是 BSD syntax   -- 比如ps aux To see ...

  3. C++ std::list 基本用法

    #include <iostream> #include <string> #include <list> using namespace std; // http ...

  4. dotnet core 调用electron来开发UI的探索

    先上仓库地址 https://github.com/lightszero/webwindow.netcore dotnet core 很喜欢,问题dotnet core 不包含GUI,经过一些尝试,觉 ...

  5. java之对象类型转换

    基本数据类型之间的转换: 自动类型转换:小的数据类型可以自动转换成大的数据类型: 强制类型转换:可以把大的数据类型转换成小的数据类型:float = (float)32.0; public class ...

  6. Ubuntu16.04重装NVIDIA驱动

    Ubuntu系统 $ sudo apt update $ sudo apt upgrade 之后出现显卡驱动出现故障,nvidia-smi输出有错,检测不到相应的驱动.只好重装,记录一下,太多的教程根 ...

  7. ubuntu 安装谷歌浏览器

    如何在ubuntu 中安装谷歌浏览器, 对于一个刚刚接触ubuntu的人来说,希望安装软件更加的简单,明了.最好能够像在windows下面安装软件一样. 先来介绍一下如何快速的安装谷歌浏览器,以下的方 ...

  8. Nginx图片防盗链配置

    如果我们自己网站内的图片资源被其它网站所盗用,这会增加自己网站的带宽资源,增加很多额外的消耗,而且会对我们系统的稳定性有影响,为了防止自己网站上的图片资源被其它网站所盗用,我们需要给自己的服务器配置防 ...

  9. (六十三)c#Winform自定义控件-箭头(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  10. echarts关系图圆心颜色渐变

    let option = { backgroundColor: '#1a4377', animationDurationUpdate: 1500, // 动画更新变化时间 animationEasin ...