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系统(翻译)(三)的更多相关文章

  1. 用django搭建一个简易blog系统(翻译)(四)

    12. Create the templates 你需要做三件事来去掉TemplateDoesNotExist错误 第一件,创建下面目录 * netmag/netmag/templates * net ...

  2. 用django搭建一个简易blog系统(翻译)(一)

    Django 入门 原始网址: http://www.creativebloq.com/netmag/get-started-django-7132932 代码:https://github.com/ ...

  3. 用django搭建一个简易blog系统(翻译)(二)

    03. Starting the blog app 在这部分,将要为你的project创建一个blog 应用,通过编辑setting.py文件,并把它添加到INSTALLED_APPS. 在你的命令行 ...

  4. 通过django搭建一个简易的web页面(实现数据的查询、添加、修改、删除)

    一.创建django项目 通过命令创建: django-admin startproject 项目名称 创建app应用 python3 manage.py startapp 应用名 #这里manage ...

  5. python django搭建一个简易博客的解析(按照文件顺序逐一讲解)

    上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版. 源代码请在http://github/Cheng0829/mysite自行下载 mysite: db.sqlite3:数据库文件. ...

  6. django 搭建一个投票类网站(三)

    之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...

  7. django开发个人简易Blog——数据模型

    提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开,减小了应用之间的高度耦合.个人非常喜欢MVC开发框架,除了具有上述特性,它使得web开发变得非常 ...

  8. Angularjs,WebAPI 搭建一个简易权限管理系统

    Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一)   1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...

  9. 如何搭建一个简易的 Web Terminal(一)

    前言 在介绍本篇文章的时候,先说一下本篇文章的一些背景.笔者是基于公司的基础建设哆啦 A 梦(Doraemon)一些功能背景写的这篇文章,不了解.有兴趣的同学可以去 袋鼠云 的 github 下面了解 ...

随机推荐

  1. How many prime numbers(素数)

    Problem Description   Give you a lot of positive integers, just to find out how many prime numbers t ...

  2. JS 精度问题处理

    /除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(arg1,arg2) ...

  3. C++ Primer 学习笔记_54_类和数据抽象 --拷贝构造函数、赋值运算符

    拷贝控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,须要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数: ...

  4. 速度 Github

    首先需要了解.git 是版本号的管理工具,为了能够把任意代码托管执照:github 其中一个是. 应用 github 什么不该说的帐户. 那么,申请后,在需求 github 并建立了独特的本地机器上的 ...

  5. web实现QQ第三方登录

    开放平台-web实现QQ第三方登录   应用场景     web应用通过QQ登录授权实现第三方登录.   操作步骤     1  注册成为QQ互联平台开发者,http://connect.qq.com ...

  6. easyui 小知识

    默认为今天 $(document).ready(function () {        $(function () {            var curr_time = new Date();  ...

  7. exit() _exit()

    图 C程序的启动与终止 差别: _exit()函数:直接使进程停止执行,清除其使用的内存空间,并销毁其在内核中的各种数据结构; exit()函 数则在这些基础上作了一些包装,在运行退出之前加了若干道工 ...

  8. pyqt学习总结

    一.学习来由: 近期一段时间,应朋友的须要,完毕一款抓取软件.一般而言,python是我比較熟悉的语言,又有丰富的抓取和解析模块,所以果断选择之. 而这远远不是重点,后台程序在工作做常常写,所以比較熟 ...

  9. java设计模式之五原型模式(Prototype)

    原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通过对象的复制,进行讲解.在Java中 ...

  10. 通过Web Api 和 Angular.js 构建单页面的web 程序

    通过Web Api 和 Angular.js 构建单页面的web 程序 在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的 ...