站点管理

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

    • 开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,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. django重点url,视图函数,模板语言

    django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...

  2. 基于django的个人博客网站建立(七)

    基于django的个人博客网站建立(七) 前言 网站效果可点击这里访问 这次在原来的基础上添加或修改一些小功能 具体内容 1.代码高亮 在原来的blog-details.html页面添加下面的代码: ...

  3. MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中

    MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...

  4. BZOJ2301/LG2522 「HAOI2011」Problem B 莫比乌斯反演 数论分块

    问题描述 BZOJ2301 LG2522 积性函数 若函数 \(f(x)\) 满足对于任意两个最大公约数为 \(1\) 的数 \(m,n\) ,有 \(f(mn)=f(m) \times f(n)\) ...

  5. Ubuntu18.04 设置开机进入命令行模式

    首先来了解下启动级别(Runlevel): 指 Unix 或 类 Unix 操作系统下不同的运行模式,运行级别通常分为 7 级: 运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启 ...

  6. 范罗士空气净化器PT65评测

    买了一台空气净化器,之前网上查了查,哟,是个知名品牌,做碎纸机的. 你问我为啥找个卖碎纸机的买空气净化器?因为年轻,咱们往下看 包装还可以 一打开就有疑问了,这塑料味道不对呀,三手料也不该这个味儿啊. ...

  7. 围观高手是如何写好 Python 循环,把内存用到极致的?

    0 前言 说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符: lis = ['I', 'love', 'python'] for i in lis:     print( ...

  8. jQuery-实现简单的Ajax请求封装

    封装的意义在于复用,在于减少重复的代码. 我在项目中做了简单的Ajax请求封装,实现方式如下: //封装Ajax请求 $.extend({ ajaxDirect:function(url,type,d ...

  9. ETCD:gRPC代理

    原文地址:gRPC proxy gRPC代理是在gRPC层(L7)运行的无状态etcd反向代理.代理旨在减少核心etcd群集上的总处理负载.对于水平可伸缩性,它合并了监视和租约API请求. 为了保护集 ...

  10. 阿里面试实战题2----ReentrantLock里面lock和tryLock的区别

    ReentrantLock ReentrantLock(轻量级锁)也可以叫对象锁,可重入锁,互斥锁.synchronized重量级锁,JDK前期的版本lock比synchronized更快,在JDK1 ...