本节内容

  • 路由系统
  • models模型
  • admin 
  • views视图
  • template模板

Django Admin介绍

admin 是django 自带的用来让你进行数据库管理的web app. 
提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理

启用admin

你用startproject命令创建项目时django admin就默认启用了

For reference, here are the requirements:

  1. Add 'django.contrib.admin' to your INSTALLED_APPS setting.
  2. The admin has four dependencies - django.contrib.auth, django.contrib.contenttypes, django.contrib.messages and django.contrib.sessions. If these applications are not in your INSTALLED_APPS list, add them.
  3. Add django.contrib.auth.context_processors.auth and django.contrib.messages.context_processors.messages to the 'context_processors' option of the DjangoTemplates backend defined in your TEMPLATES as well as django.contrib.auth.middleware.AuthenticationMiddleware and django.contrib.messages.middleware.MessageMiddleware to MIDDLEWARE. These are all active by default, so you only need to do this if you’ve manually tweaked the settings.
  4. Determine which of your application’s models should be editable in the admin interface.

admin 访问地址

http://localhost:yourport/admin/, by default.

为什么会让登录?哪来的用户信息?django自带了一套用户认证系统,admin就用了这个, 所以你想登录,先创建管理员账号。

1
python manage.py createsuperuser

然后你就开心的登录进去了呀

发现只有这么个东西, 什么东东?

这就是django自带的用户认证系统的2张表,用于管理账户和账户组信息。

那接下来要干什么呢? 注意django admin的作用是让你管理各app下的数据库表,实现可以通过Web页面就完成对数据的增删改查噢。 admin不会没事闲的自己把你创建的表拿过来管理,你得把你写的表在admin里注册一下才行。

在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表

1
2
3
4
5
6
7
8
9
from django.contrib import admin
 
# Register your models here.
 
from app01 import models
 
 
admin.site.register(models.Article)
admin.site.register(models.Account)

然后刷新下页面,新添加的2个表就出来了  

admin定制

你可以定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能,这就需要定制一下admin的类了

1
2
3
4
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','account','read_count')
     
admin.site.register(Article, ArticleAdmin)

一下子就好看了,真是神奇呀。

就喜欢你这没见识的样子,别急,还有很多nb的功能呢,一起来看下。

看来这个list_display就是定义表数据要展示哪些字段的,除了这个属性,admin 还提供了哪些其它功能呢?

fields 决定对表进行修改时展示哪些字段

1
2
3
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','account','read_count')
    fields = ['title','account','pub_date']

还可以多个字段显示在一行。

1
fields = ['title','account',('pub_date','read_count')]

exclude 不展示哪些字段  

date_hierarchy = 'pub_date'  按日期分类显示数据  

You can also specify a field on a related model using the __ lookup, for example:
date_hierarchy = 'author__pub_date'

fieldsets 分组显示

1
2
3
4
5
6
7
8
9
10
11
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','account','read_count')
    date_hierarchy = 'pub_date'
 
    fieldsets = (('文章相关',{
        'fields':('title','content'),
        'classes': ('wide''extrapretty'),
    }),('高级',{
        'classes':('collapse',),
        'fields':(('account','read_count'),'pub_date')
    }))

上面的classes 是用于设定字段样式,2个默认自带的样式是collapse 和wide

filter_horizontal,filter_vertical 均用于多对多字段

1
filter_horizontal = ['tags',]

list_display  定义表数据显示哪些列

除了表中有的字段,models自己定义的字段也能放入list_display

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.db import models
from django.contrib import admin
 
class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()
 
    def decade_born_in(self):
        return self.birthday.strftime('%Y')[:3+ "0's"
    decade_born_in.short_description = 'Birth decade'
 
class PersonAdmin(admin.ModelAdmin):
    list_display = ('name''decade_born_in')

甚至还能玩出花样  

from django.utils.html import format_html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<br>class Tag(models.Model):
    """文章标签表"""
    name = models.CharField(max_length=64,unique=True)
    date = models.DateTimeField(auto_now_add=True)
    color_code = models.CharField(max_length=6)
 
    def colored_name(self):
        return format_html(
            '<span style="color: #{};">{}</span>',
            self.color_code,
            self.name,
        )
 
    def __str__(self):
        return self.name
1
2
class TagAdmin(admin.ModelAdmin):
    list_display = ['name','colored_name']

竟然出现了样式,神奇。

  

list_display_links = ('first_name', 'last_name') 点下这2个字段就跳到修改页

list_filter 过滤,把要过滤的字段放到对应列表里就可以

1
list_filter = ('register_date',)

  

list_per_page = 20 每页显示20条数据

  

radio_fields 把外键或choice字段由下拉框变成单选框

1
2
3
4
5
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','account','read_count')
    date_hierarchy = 'pub_date'
    filter_horizontal = ['tags',]
    radio_fields = {'account': admin.VERTICAL}

自动补全

autocomplete_fields = ['account',] 自动补全,外键查询数据多时,方便查找  

raw_id_fields  言语无法表示的字段

就把外键变成这样子

readonly_fields = ('address_report',)  只读字段

search_fields  模糊查找

1
search_fields = ['account__username','title']

  

好啦,就先讲这些吧, 当然admin还有很多更高级的功能,不过先会这些就够了,以后会深入再讲的。  

Django之 admin组件的更多相关文章

  1. python框架之Django(13)-admin组件

    使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...

  2. Django 之 admin组件使用&源码解析

    admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...

  3. django之admin组件

    一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...

  4. 模拟admin组件自己开发stark组件之创建篇

    admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...

  5. Django admin 组件 原理分析与扩展使用 之 sites.py (一)

    一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...

  6. Django admin组件使用

    ADMIN 组件 介绍 admin 组件实现了更方便的WEB后台数据管理方式 settings.py 中第一个组件就是 : INSTALLED_APPS = [ 'django.contrib.adm ...

  7. Django admin组件源码流程

    admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...

  8. stark组件之pop操作【模仿Django的admin】

    一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...

  9. stark组件之批量操作【模仿Django的admin】

    一.先看下django的admin是如何实现批量操作 首先在配置类中定义一个函数 然后我们为这个函数对象设置一个属性,这个属性主要用来显示在select标签中显示的文本内容 最后把函数对象放到一个ac ...

随机推荐

  1. @codeforces - 594E@ Cutting the Line

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s 与正整数 k.现在你需要进行恰好一次操作: ...

  2. Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)

    1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...

  3. 《Java并发编程的艺术》第6/7/8章 Java并发容器与框架/13个原子操作/并发工具类

    第6章 Java并发容器和框架 6.1  ConcurrentHashMap(线程安全的HashMap.锁分段技术) 6.1.1 为什么要使用ConcurrentHashMap 在并发编程中使用Has ...

  4. 深入理解Java虚拟机学习笔记(二)-----垃圾收集器与内存分配策略

    写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何 ...

  5. 点击提交按钮,屏幕会出现闪烁问题,element.style问题

    点击提交按钮,屏幕会出现闪烁问题 通过后台调试发现,在点击的按钮的时候会给body添加一个padding值,而且会出现怎么都修改不了的问题,会发现里面会有 element.style的值,这其实是一种 ...

  6. 谁再悄咪咪的吃掉异常,我上去就是一 JIO

    又到周末了,周更选手申请出站~ 这次分享一下上个月碰到的离奇的问题.一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上. 这个美好的晚上,本想着开两把 LOL 无限火力 ...

  7. C#数据结构与算法系列(十九):选择排序算法(SelectSort)

    1.介绍 选择排序算法属于内部排序算法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置达到排序的目的 时间复杂度:O(n^2) 双层for 2.思想 选择排序(select sorti ...

  8. 入门大数据---SparkSQL外部数据源

    一.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景. CSV JSON Parquet ORC JD ...

  9. 深入理解RocketMQ(九)---实战(代码)

    一.批量发送消息 即多条消息放入List,一次发送,从而减少网络传输,提高效率 DefaultMQProducer producer = new DefaultMQProducer("bat ...

  10. git push和pull如何解决冲突!!!精品

    多人合作完成项目时,git push 和 pull经常会发生冲突,根本原因就是远程的东西和本地的东西长的不一样,以下步骤能完美解决所有冲突!(先查看一下分支(git branch),确认没错再进行下面 ...