用django搭建一个简易blog系统(翻译)(三)
06. Connecting the Django admin to the blog app
Django 本身就带有一个应用叫作Admin,而且它是一个很好的工具
在这一部分,我们将要激活admin应用,再次同步数据库和model,并且把admin和你的blog应用连接起来。
07. 激活admin
返回到settings.py文件,把INSTALLED_APPS改为像下面这样子:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
回到运行服务器的命令行中断,确认没有任何错误产生。如果没有错误,刷新你的浏览器确认项目中的其它地方也没有错误产生。
经常检查是否有错误产生是一个很好的习惯。直到你用TTD开发方式(Test Driven Development)。现在你只要记着查看命令行中断和刷新浏览器来查看有没有错误就好了。
如果没有错误产生,那么继续。
接下来,打开urls.py文件,并且编辑它让它像下面这样:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover() urlpatterns = patterns('',
url(r'^admin/',include(admin.site.urls)),
# Examples:
# url(r'^$', 'netmag.views.home', name='home'),
# url(r'^netmag/', include('netmag.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)
再测试一次,检查命令行终端和浏览器,看有没有错误产生。如果没有错误产生,再同步一次数据库。你需要这么做,是因为你上次运行syncdb命令的时候,还没有配置使用admin应用。现在可以再运行一次syncdb命令,如果你留意,你会发现这个命令创建了新的表。
python manage.py syncdb
现在,你可以返回到浏览器,在地址栏输入http://127.0.0.1:8000/admin/, 你将会发现显示像下面这样:

用你上一节中创建的管理员账号登陆,然后看一看。你会发现,没有你的blog应用。不用担心,因为你马上就要做这些了。
08. Connecting your blog app
在你的blog目录里面,创建一个一个admin.py文件,然后在里面写上下面代码:
from django.contrib import admin
from blog.models import Post admin.site.register(Post)
这是添加应用到admin最简单的方法。如果,你重启的服务器运行一下命令syncdb然后刷新一下admin的页面,你将会看到像下面的页面:

现在你的blog应用已经在你的admin中了,现在创建一个blog post,记着你的post的内容是HTML格式的。花一点时间做这个,因为下一部分的教程中将会用到一些posts。
为了将你的blog应用添加到admin,你刚才做的是最基本的。为了让admin更加用户友好一点,添加一个用户自定义类PostAdmin。修改admin.py文件,让它像下面这样:
from django.contrib import admin
from blog.models import Post class PostAdmin(admin.ModelAdmin):
list_display = ['title','description']
list_filter = ['published','created']
search_fields = ['title','description','content']
date_hierarchy = 'created'
save_on_top = True
prepopulated_fields = {"slug":("title",)} admin.site.register(Post,PostAdmin)
回到浏览器,刷新页面。你将会看到你的blog应用会好多了。
关于这一方面,如果你想进一步研究的话,请查看 官方网站 https://docs.djangoproject.com/en/dev/ref/contrib/admin/
目前为止,你已经做了:
* 编辑 settings.INSTALLED_APPS 让其包含 django.contrib.admin
* 编辑 netmag.urls 让其包含admin相应的urls模式
* 经常检查服务器和浏览器,查看是否有错误
* 运行syncdb命令去创建admin数据库表
* 用管理员账号登陆
* 创建一些post
* 写自定义admin类
所以你可以创建、更新、删除你的博客。但是现在,没有任何views,这就需要进行下一步。
09. Writing the URLS, views and templates for the blog app
现在是时候写一些urls,让它包含一些url模式。Django用URLconfs中的urlpatterns来将HTTP请求映射到特定的views函数,view函数返回响应给用户。
总共有三部需要做:
1. 在netmag/urls.py中写urlpatterns
2. 在blog/views.py中写view函数
3. 为views创建templates
10. Write the urlpatterns
打开文件netmag/urls.py,编辑它,使其像下面这样:
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover() urlpatterns = patterns('',
url(r'^admin/',include(admin.site.urls)),
url(r'^$', 'blog.views.index'),
url(r'^(?P<slug>[\w\-]+)/$','blog.views.post'),
# Examples:
# url(r'^$', 'netmag.views.home', name='home'),
# url(r'^netmag/', include('netmag.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)
如果你对^(?P<slug>[\w\-]+)/$比较好奇,请看 https://docs.djangoproject.com/en/dev/ref/contrib/admin/。如果看不懂,没关系,正则表达式的知识在django中一直有涉及,你可以慢慢学习。
正则表达式^admin/在^(?P<slug>[\w\-]+)/$前面很重要。因为在正则表达式的世界里,后者同样匹配前者匹配的。这样,本应该映射admin的url结果映射到blog.views.post函数里,而且这不是想要的。
如果你现在在浏览器输入http://127.0.0.1:8000/, 你将会看到一个错误提示信息ViewDoesNotExist. 你收到这个错误提示,是因为你映射到的view函数不存在,现在让我们完善这一点。
11. Write the view functions
打开文件blog/views.py, 修改它让其像下面这样:
from django.shortcuts import render,get_object_or_404
from blog.models import Post def index(request):
posts = Post.objects.filter(published=True)
return render(request,'blog/index.html',{'posts': posts}) def post(request, slug):
post = get_object_or_404(Post,slug=slug)
return render(request,'blog/post.html',{'post': post})
现在你刷新一下页面,仍然会有一个错误,但是这次是TemplateDoesNotExist错误。你接到这个错误是因为你view函数里面提及的template不存在。
用django搭建一个简易blog系统(翻译)(三)的更多相关文章
- 用django搭建一个简易blog系统(翻译)(四)
12. Create the templates 你需要做三件事来去掉TemplateDoesNotExist错误 第一件,创建下面目录 * netmag/netmag/templates * net ...
- 用django搭建一个简易blog系统(翻译)(一)
Django 入门 原始网址: http://www.creativebloq.com/netmag/get-started-django-7132932 代码:https://github.com/ ...
- 用django搭建一个简易blog系统(翻译)(二)
03. Starting the blog app 在这部分,将要为你的project创建一个blog 应用,通过编辑setting.py文件,并把它添加到INSTALLED_APPS. 在你的命令行 ...
- 通过django搭建一个简易的web页面(实现数据的查询、添加、修改、删除)
一.创建django项目 通过命令创建: django-admin startproject 项目名称 创建app应用 python3 manage.py startapp 应用名 #这里manage ...
- python django搭建一个简易博客的解析(按照文件顺序逐一讲解)
上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版. 源代码请在http://github/Cheng0829/mysite自行下载 mysite: db.sqlite3:数据库文件. ...
- django 搭建一个投票类网站(三)
之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...
- django开发个人简易Blog——数据模型
提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开,减小了应用之间的高度耦合.个人非常喜欢MVC开发框架,除了具有上述特性,它使得web开发变得非常 ...
- Angularjs,WebAPI 搭建一个简易权限管理系统
Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...
- 如何搭建一个简易的 Web Terminal(一)
前言 在介绍本篇文章的时候,先说一下本篇文章的一些背景.笔者是基于公司的基础建设哆啦 A 梦(Doraemon)一些功能背景写的这篇文章,不了解.有兴趣的同学可以去 袋鼠云 的 github 下面了解 ...
随机推荐
- React.js再探(三)
很多时候,组件实例的外观和行为我们通过props进行定制就可以了.因为任何时候,组件实例的表现只跟 传过来的props属性 相关. 我们称这种为 无状态/ stateless 组件 即它自身是 无记忆 ...
- 【Swift初见】Swift词典
顾名思义.当我们仰望的时候,我们将基于索引查找我们需要找到的资源.在swift这同样适用,每个对象包括字典key和value.我们key为了找到当前这个key相应的value.与数组不同的是,字典项字 ...
- CSharp设计模式读书笔记(19):备忘录模式(学习难度:★★☆☆☆,使用频率:★★☆☆☆)
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.它是一种对象行为型模式,其别名为Tok ...
- POJ 3299 Humidex(简单的问题)
[简要题意]:什么是温度,湿度--,之间的转换.. [分析]:式已被赋予. // 252k 0Ms /* 当中exp表示的是求e的x次幂 解法就直接依据题目中的公式解决就好!! */ #include ...
- MVC使用Bootstrap
ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers 摘要: 序言ASP.NET MVC允许开发者创建自定义的HTML Helper ...
- 使用微软 URL Rewrite Module 开启IIS伪静态
原文 使用微软 URL Rewrite Module 开启IIS伪静态 在IIS5和IIS6时代,我们使用URL REWRITING可实现URL重写,使得WEB程序实现伪静态,但默认情况下只能实现.A ...
- asp.net mvc3 的数据验证(一)
原文:asp.net mvc3 的数据验证(一) 对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...
- orleans开篇之hello world
orleans开篇之hello world 什么是orleans Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务.Orleans项目基本上被认为是并行计 ...
- windows phone开发-Webbrowser使用技巧
原文:windows phone开发-Webbrowser使用技巧 5月份开发了脸萌WP版,其中需要使用web技术来绘制图像,于是就使用了原生webbrowser控件.在使用webbrowser co ...
- 单元测试之Qunit
单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...