Django1.8教程——从零开始搭建一个完整django博客(二)
在上一节中,我们已经创建了一个Django模型Post,并使Post模型与数据库同步。这一节中,我们将介绍Django管理站点,通过Django管理站点来管理我们创建的Post模型实例。
为你的模型创建一个控制管理站点
好了,我们已经定义了一个post模型,现在,我们将要创建一个简单的管理站点,来管理post实例。Django自带的管理界面是一个十分强大的内容编辑器。Django管理站点按照你模型的元数据动态建立,并且提供一个方便编辑内容的接口。同样,你也可以在管理站点内自定义如何展现你的模块。
需要记住的一点是django.contrib.admin已经包含在INSTALLED_APPS设置中,这就是为什么我们不需要再手动添加它的原因。
创建管理员权限用户
首先,我们需要创建一个管理员权限用户来登录管理站点,运行下面命令:
python manage.py createsuperuser
你会看到以下内容,并提示你输入用户名、e-mail,密码:
Username (leave blank to use 'admin'): admin
Email address: admin@admin.com
Password: ********
Password (again): ******** Superuser created successfully.
Django管理站点
现在,运行开发服务器(python manage.py runserver),在浏览器打开http://127.0.0.1:8000/admin/,你就可以看见管理站点登录界面。

输入你刚刚建立的管理员用户名和密码,登录管理站点,你会看见管理站点的首页。

现在你所看见的User和Group模块是Django的认证框架,这是在INSTALLED_APPS中的django.contrib.auth设置的。如果你打开Users,你会看见刚刚创建的管理员。blog应用中的Post模型和User模型之间有关联关系。这段关联被定义在Post模型中的author属性。
将你的模型添加到管理站点
现在将我们创建的blog应用中的Post模型添加至管理站点。编辑blog应用中的admin.py文件:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
现在,重新加载管理站点,你就可以看见你的Post模型已经添加至管理站点。

这很容易,对吗?当你在Django管理站点登记一个模型,就会得到一个友好的用户界面:允许你生成对象列表;以及非常容易的编辑、创建、删除对象。

Django针对不同的字段使用不同的表格插件,像DateTimeField,在管理站点中展示一个类似JavaScript日历插件的界面。将所有内容添加完毕之后,点击保存按钮。站点就会跳转到post列表页,并且给出一个”你已成功添加post“的提示。

自定义管理站点中的模块显示
现在我们将看到如何自定义管理站点。编辑你的blog应用中的admin.py文件:
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
admin.site.register(Post, PostAdmin)
我们告诉Django管理站点,我们使用继承自ModelAdmin的自定义类,来将我们的Post模型注册到管理站点。在这个自定义类中,我们定义了如何展示Post模型。list_display属性允许你设置你想要在管理对象列表页面显示的模型字段。
现在我们为管理站点添加其他选项:
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author') search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ['status', 'publish']
重新加载管理站点,可以看到:

你可以看到post对象列表页面中显示出你在list_display中定义展示的字段。
列表页包括一个右边栏,允许你通过在list_fliter定义的过滤器字段来筛选文章。
在页面上出现了一个搜索栏。这是因为我们已经使用search_fields属性定义了可搜索字段。
搜索栏下面一栏,由date_hierarchy属性定义,提供一个基于日期层次的快速指向。
您还可以看到,post对象按照Status和Publish排序,你还可以使用ordering属性定义默认的排序方式。
现在点击Add post链接,进入post对象编辑界面。当你把新创建的post对象的标题输入title字段的时候,你会发现,slug字段自动填充了相应的内容。这是因为我们用prepopulated_fields属性告诉Django,slug是title的关联字段。另外,现在作者字段将显示一个查找控件,因为当你的注册用户成百上千的时候,从下拉列表选择十分的不方便。

看看,我们只用了短短几行代码,就在管理站点中定义了模型的管理方式。定制和扩展Django管理站点的方法还有很多,在后面的章节,我们将进一步为你揭晓。
原文链接:http://www.landsblog.com/blog/content/djangoexamplemanage
更多教程:http://www.landsblog.com/blog/tag/django
Django1.8教程——从零开始搭建一个完整django博客(二)的更多相关文章
- Django1.8教程——从零开始搭建一个完整django博客(一)
第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...
- Django1.8教程——从零开始搭建一个完整django博客(三)
这一节主要介绍对数据库的访问操作:通过管理器(manage),对对象进行检索.修改.删除等操作,详细介绍了如何针对不同的模型自定义管理器. 查询和管理工作 现在,我们已经有了一个功能完善的Django ...
- 用express搭建一个简单的博客系统
转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...
- 使用Hexo搭建一个简单的博客(二)
昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...
- 使用Hexo搭建一个简单的博客(一)
搭建好简洁的博客框架后,回看时发现,简洁之中透露着一丝丝简陋,好的,网上关于丰富hexo的文章也很多 记录一下自己的一些瞎操作. 在你的hexo目录下,你可以看到themes文件夹里有个默认的land ...
- 使用Hugo,只需5分钟,轻松搭建一个自己的博客
前面跟大家介绍过hexo这款静态博客系统,功能强大,基本能满足博客的各种需求.今天,我再跟大家介绍一款优秀的静态博客系统,那就是Hugo. Hugo是由Go语言实现的静态网站生成器.简单.易用.高效. ...
- Express入门教程:一个简单的博客
来自: http://ourjs.com/detail/56b2a6f088feaf2d031d2468 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, ...
- 从零开始搭建一个react项目
Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...
- react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)
react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...
随机推荐
- leveldb源码分析--Iterator遍历数据库
在DBImpl中有一个函数声明为Iterator* DBImpl::NewIterator(const ReadOptions& options) ,他返回一个可以遍历或者搜索数据库的迭代器句 ...
- 【API】短信通106端口验证短信的实现
信息时代,无论是电商还是网络营(chuan)销(xiao)都希望得道更多的用户信息.所以很多的网站注册上用到了手机验证码功能.网上有很多的SMS接口提供商.在选择的时候无非就是考虑到1.发送速度:2. ...
- MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)
MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...
- Linux awk
一.简介 二.教程 1)过滤字符(对大小写很敏感) dir -l | awk '$3=="root" {print $1,$3,$4, $9;} ' cat tecmint_dea ...
- Mongodb 字段类型转换
db.diningmembers.find({modifedDate:{$type:9}}).forEach(function(x){x.tel = String(x.tel);db.diningme ...
- Linux shell misc
sometimes you will write shell in windows platform, be careful for this, adjust the notepad plus plu ...
- zookeeper中Watcher和Notifications
问题导读:1.zookeeper观察者什么时候调用?2.传统远程轮询服务存在什么问题?3.zk中回调服务的机制是什么?4.zk中watcher为什么不永久注册?5.什么是znode? 在阅读之前首先明 ...
- 【软件使用】Windows下的Objective-C集成开发环境搭建(IDE)
Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1) 使用苹果的平台,集成开发环境使用X ...
- jquery 地址栏链接与a标签链接匹配 特效代码总结(二)
如题所述,当出现这样的功能,点击某个链接后,给跳转后的该链接地址添加样式,通过添加class为current来增加特殊样式. 如图所示:点击HTML+css3跳转后,给其添加如图样式: js代码如下: ...
- Jira-Clone与发邮件的使用
1.克隆问题 包括两部分,先进行Clone,再进行移动 a.选择要克隆的问题,点击More Actions-Clone,在弹出框“复制问题”中,点击“创建”按钮即克隆成功 b.移动问题,点击More ...