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. JS的parent对象

    top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...

  2. Python判断内网IP

    def ip_into_int(ip): # 先把 192.168.1.13 变成16进制的 c0.a8.01.0d ,再去了"."后转成10进制的 3232235789 即可. ...

  3. java_OutOfMorryError 内存溢出(replaceAll)

    最近在使用string类中的replaceAll函数时碰到这个错误,由于string长度比较长,文本文档9M多,可以增加jvm的内存大小解决. 下面是一篇对OutOfMorryError错误的一些处理 ...

  4. IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)

    原版的blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: 新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传.然后就想到先写一个 ...

  5. 【机器学习算法-python实现】KNN-k近邻算法的实现(附源代码)

    ,400],[200,5],[100,77],[40,300]]) shape:显示(行,列)例:shape(group)=(4,2) zeros:列出一个同样格式的空矩阵,例:zeros(group ...

  6. Lucene.Net简介和分词

    Lucene.net站内搜索—2.Lucene.Net简介和分词 2015-03-24 23:10 by 邹琼俊, 118 阅读, 1 评论, 收藏, 编辑 Lucene.Net简介 Lucene.N ...

  7. HDU 4324 Triangle LOVE 拓扑排序

    Problem Description Recently, scientists find that there is love between any of two people. For exam ...

  8. how tomcat works 读书笔记九 Session管理

    在看本文之前,请先查阅相关Session与Cookie的资料. 这篇资料不错 http://blog.csdn.net/fangaoxin/article/details/6952954 Catali ...

  9. 日积月累系列之国籍控件(js源码)

    一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家. 主要功能和界面介绍 国籍控件主要支持中文.英文过滤以及键盘上下事件. 源码介绍 国籍控件核心是两个文件,navtionalit ...

  10. POI导出Excel文档通用工具方法

    import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; imp ...