Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
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文件做如下这些改变:
将'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置顺序是没有关系的, 但是我们喜欢保持一定顺序以方便人来阅读)
保证INSTALLED_APPS中包含'django.contrib.auth','django.contrib.contenttypes'和'django.contrib.sessions',Django的管理工具需要这3个包。 (如果你跟随本文制作mysite项目的话,那么请注意我们在第五章的时候把这三项INSTALLED_APPS条目注释了。现在,请把注释取消。)
确保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的配置的更多相关文章
- web开发-Django博客系统
项目界面图片预览 项目代码github地址 项目完整流程 项目流程: 1 搞清楚需求(产品经理) (1) 基于用户认证组件和Ajax实现登录验证(图片验证码) (2) 基于forms组件和Ajax实现 ...
- 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类中做 ...
- Django(博客系统):重写了auth.User后使用createsupperuser出错解决办法
背景:重写django的系统User后,使用createsupperuser创建用户失败 由于项目需要扩展django默认新的auth.User系统(添加两个字段:头像.简介等字段),因此就重写了dj ...
- Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce
文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...
- Django博客系统
零.创建项目及配置 一.编写 Model 层的代码 二.配置 admin 页面 三.根据需求定制 admin
- Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中
背景: 之前也读过一些关于django的一些书,看过别人写的一些博客系统.但是总有一种看别人的都会,但自己写不出来的感觉,于是为了加深对django的学习就开始动手学习了. 环境搭建: 环境:使用py ...
- 【完全开源】Django多人博客系统——支持MarkDown和tinyMce
目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...
- 这几天有django和python做了一个多用户博客系统(可选择模板)
这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
- 【django之博客系统开发】
一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...
随机推荐
- NGUI_Depth
四.深度(Depth)概念; 1. (1).每一个UIPanel和每一个UI控件都一定会有一个Depth,深度值大代表显示的优先级高(会趋向于在界面更上层显示) (2).Depth决定的是UI的显示层 ...
- Java枚举类使用
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- 一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。
本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! ContentProvider的学习与运用 Alpha Dog 2016-04-13 10:27:06 首先,项目的地址:https:// ...
- 关于css选择器中有小数点的标签获取
需求说明 因为项目中章节配置的时候有小数点,1,1.1,1.2,1.11的标题,这个时候每一行标题的id,class设置成标题号是独一无二的标记.但是,直接用js获取是获取不到的,例如$('#3.22 ...
- 【Python】随机模块random & 日期时间のtime&&datetime
■ random 顾名思义,random提供了python中关于模拟随机的一些方法.这些方法都一看就懂的,不多说了: random.random() 返回0<n<=1的随机实数 rando ...
- Java 并发编程实践基础 读书笔记: 第二章 构建线程安全应用程序
1,什么是线程安全性? 简单概括就是一个类在多线程情况下能安全调用就是线程安全 2,Servlet 的线程安全性 默认是非线程安全的,写servlet代码的时候需要注意线程安全,注意同步 3,vo ...
- SDK提交到CocoaPods
一:GitHub新建仓库,并clone到本地 1.注册GitHub账号并登录 2.右上方点击+,新建仓库(仓库名字(Repository name).仓库权限(Public).readme.licen ...
- 有关java中的hashCode问题
1. HashSet集合存储数据的结构(哈希表) 1.1 什么是哈希表? 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会 ...
- Leetcode 28——Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- 冲刺NO.2
Alpha冲刺第二天 站立式会议 项目进展 团队成员在确定了所需技术之后,开始学习相关技术的使用,其中包括了HTML5,CSS与SSH框架等开发技术.并且在项目分工配合加以总结和完善,对现有发现的关于 ...