Django后台一般是不需要人为的去开发的,因为django已经通过配置实现哪些模块是后台需要管理,如何排序,列表展示哪些列,列显示名称,是否为空(默认值),过滤条件,分页页数,列表中哪些项可编辑等等。

  那么具体如何针对上一篇文章《Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中》中的tag/post/category模型进行修改配置来实现呢?可以参考django官网文章:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overview

  Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。 你可以把django.contrib看作是可选的Python标准库或普遍模式的实际实现。 它们与Django捆绑在一起,这样你在开发中就不用“重复发明轮子”了。

  管理工具是本书讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。这些,我们将在第十六章详细讨论。在成为一个Django专家以前,你将会知道更多django.contrib的特性。 目前,你只需要知道Django自带很多优秀的附加组件,它们都存在于django.contrib包里。

激活管理界面

Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。 这意味着你需要在你的项目中花费几个步骤去激活它。

第一步,对你的settings文件做如下这些改变:

  1. 'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置顺序是没有关系的, 但是我们喜欢保持一定顺序以方便人来阅读)

  1. 保证INSTALLED_APPS中包含'django.contrib.auth''django.contrib.contenttypes''django.contrib.sessions',Django的管理工具需要这3个包。 (如果你跟随本文制作mysite项目的话,那么请注意我们在第五章的时候把这三项INSTALLED_APPS条目注释了。现在,请把注释取消。)

  1. 确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware''django.contrib.sessions.middleware.SessionMiddleware''django.contrib.auth.middleware.AuthenticationMiddleware' 。

运行 python manage.py syncdb (

Django 1.7.1及以上 用以下命令
# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate 旧版本的Django 1.6及以下用
python manage.py syncdb

)。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin (提醒一句: 只有当INSTALLED_APPS包含'django.contrib.auth'时,python manage.py createsuperuser这个命令才可用.)

第三,将admin访问配置在URLconf(记住,在urls.py中). 默认情况下,命令django-admin.py startproject生成的文件urls.py是将Django admin的路径注释掉的,你所要做的就是取消注释。 请注意,以下内容是必须确保存在的:

# Include these import statements...
from django.contrib import admin
admin.autodiscover() # And include this URLpattern...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls)),
# ...
)

当这一切都配置好后,现在你将发现Django管理工具可以运行了。 启动开发服务器(如前:`` python manage.py runserver`` ),然后在浏览器中访问:http://127.0.0.1:8000/admin/

要了解更多内容,请参考:《第六章 Django站点管理

如何建tag/post/category实现后台自动管理功能?

如果想让后台自动管理只需要在blog\admin.py中添加如下代码即可:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.contrib import admin
from models import Tag
from models import Post
from models import Category class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'category', 'author', 'create_time', 'modify_time'] class TagAdmin(admin.ModelAdmin):
list_display = ['name', 'create_time', 'modify_time'] class CategoryAdmin(admin.ModelAdmin):
list_display = ['name', 'create_time', 'modify_time'] admin.site.register(Tag, TagAdmin)
admin.site.register(Post, PostAdmin)
admin.site.register(Category, CategoryAdmin)

登录后台查看效果:

设置文章字段显示名称、排序、分页、筛选字段:

经过上边设置了后台管理,及设置了后台列表展示字段效果如下:

但是这样貌似不是特别美观,没有分页、没有搜索、没有默认排序、不可以在列表中修改category、没有按照发布日期搜索、及文章分类搜索功能,那么如何实现呢?

1)字段中文设置:

需要修改models.py中字段显示别名:

# coding:utf-8
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.admin import User
# '''
# 文章栏目(分类)实体
# '''
@python_2_unicode_compatible
class Category(models.Model):
name = models.CharField(u'文章栏目', max_length=128) # 文章栏目(分类)名称
create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=False) # 创建时间
modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True) # 修改时间 def __str__(self):
return self.name # '''
# 文章标签实体
# '''
@python_2_unicode_compatible
class Tag(models.Model):
name = models.CharField(u'文章标签', max_length=128) # 文章标签名称
create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=False) # 创建时间
modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True) # 修改时间 def __str__(self):
return self.name # """
# 文章实体
# """
@python_2_unicode_compatible
class Post(models.Model):
title = models.CharField(u'标题', max_length=128) # 文章标题,定义最大长度为128
'''
如果不使用blank=True标识,则当该值为空时会保存操作会抛出异常
'''
summary = models.CharField(verbose_name=u'简介', max_length=256, blank=True) # 文章简介,定义最大长度为126。, type=models.CharField
body = models.TextField(verbose_name=u'内容') # 文章内容,较长因此定义为TextField, type=models.TextField
create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=True) # 文章创建时间
modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True) # 文章修改时间
views = models.PositiveIntegerField(default=0, verbose_name='阅读数') # 文章阅读数量,默认为0
'''
一篇文章只能归属一个栏目,而一个栏目下可能会拥有多篇文章,因此这是一对多的关联关系。
关于用法请阅读:https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
'''
category = models.ForeignKey(Category, verbose_name='分类') # 文章分类
'''
一篇文章允许有多个标签,一个标签允许被多篇文章使用,因此他们的关系是多对多关系,但是同时该值可以不设置,因此使用black=True标识该字段允许为空。
'''
tags = models.ManyToManyField(Tag, verbose_name='标签', blank=True) # 文章标签
'''
# 由于django.contrib.auth 是 Django 内置的应用,它用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
#一篇文章对应一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
'''
author = models.ForeignKey(User, verbose_name='作者') # 文章作者 def __str__(self):
return self.title def __unicode__(self):
return self.title

2)设置文章筛选过滤、分页、搜索字段、默认排序、列表中可编辑category、快速筛选(发布时间、文章分类)

修改blog\admin.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.contrib import admin
from models import Tag
from models import Post
from models import Category class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'category', 'author', 'create_time', 'modify_time']#设置列表显示字段
search_fields = ('title',) #设置搜索字段
list_filter = ('category','create_time',) #设置按照发布时间、分类快速筛选
list_per_page = 10 #设置分页
list_editable = ['category', ] #设置列表可编辑列 class TagAdmin(admin.ModelAdmin):
list_display = ['name', 'create_time', 'modify_time']
search_fields = ('name',) class CategoryAdmin(admin.ModelAdmin):
list_display = ['name', 'create_time', 'modify_time']
search_fields = ('name',) admin.site.register(Tag, TagAdmin)
admin.site.register(Post, PostAdmin)
admin.site.register(Category, CategoryAdmin)

效果:

Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置的更多相关文章

  1. web开发-Django博客系统

    项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现 ...

  2. Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?

    问题背景 添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份.年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做 ...

  3. Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法

    背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了dj ...

  4. Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce

    文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...

  5. Django博客系统

    零.创建项目及配置 一.编写 Model 层的代码 二.配置 admin 页面 三.根据需求定制 admin

  6. Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中

    背景: 之前也读过一些关于django的一些书,看过别人写的一些博客系统.但是总有一种看别人的都会,但自己写不出来的感觉,于是为了加深对django的学习就开始动手学习了. 环境搭建: 环境:使用py ...

  7. 【完全开源】Django多人博客系统——支持MarkDown和tinyMce

    目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...

  8. 这几天有django和python做了一个多用户博客系统(可选择模板)

    这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...

  9. 【django之博客系统开发】

    一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...

随机推荐

  1. Java面试宝典-2017

    Java面试宝典2017版 一. Java基础部分........................................................................... ...

  2. TortoiseGit- 创建本地新分支,提交推送到远程,本地新分支合并到工作分支,提交到远程工作分支等。

    整体思路: 创建本地新分支 (create branch)  -- 切换到本地新分支工作 (switch/checkout) --提交修改 (commit)  -- 推送到远程新分支 (push)  ...

  3. Maven-12: 插件解析机制

    1. 插件仓库 2. 插件的默认groupId 3. 解析插件版本 4. 解析插件前缀

  4. Mycat 注解说明

    我们知道MySQL 数据库有自己的SQL注解(hint),比如 use index.force index.ignore index 等都是会经常用到的,Mycat 作为一个数据库中间件,最重要的是 ...

  5. 测试驱动开发实践2————从testList开始

    内容指引 1.测试之前 2.改造dto层代码 3.改造dao层代码 4.改造service.impl层的list方法 5.通过testList驱动domain领域类的修改 一.测试之前 在" ...

  6. MongoDb进阶实践之三 Mongodb基本命令详解

    一.引言              从今天开始,我要正式开始介绍MongoDB的使用方法了.在此之前,我用了两篇文章分别介绍了如何在Linux系统和Windows系统上安装和配置MongoDB系统.如 ...

  7. linux,windows,ubuntu下git安装与使用

    ubuntu下git安装与使用:首先应该检查本地是否已经安装了git ,如果没有安装的话,在命令模式下输入 sudo apt-get install git 进行安装 输入git命令查看安装状态及常用 ...

  8. 201621123044《JAVA程序设计》第一周学习总结

    1. 本周学习总结 1.了解了JAVA的诞生以及发展历史简介.JAVA语言的特点,以及JAVA的电脑安装以及环境配置. 2.JAVA不仅可以用eclipse进行编写,也可以在记事本和notepad++ ...

  9. python 二叉堆

    BinaryHeap() 创建一个新的,空的二叉堆. insert(k) 向堆添加一个新项. findMin() 返回具有最小键值的项,并将项留在堆中. delMin() 返回具有最小键值的项,从堆中 ...

  10. 网页设计入门<一>

    俗话说:技多不压身.实习周,网页设计是之一,边学边总结... 本次网页设计基于Adobe Dreamweaver CS6开发平台,根据实习老师的暴力指导,为什么说暴力呢? 没有基础,没有预告,打开软件 ...