一,建立項目css
1, 爲blog建立名爲mysite的工程項目:html
django-admin.py startproject mysite
2, 項目結構以下:python
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
manage.py —– Django項目裏面的工具,經過它能夠調用django shell和數據庫等。mysql
settings.py —- 包含了項目的默認設置,包括數據庫信息,調試標誌以及其餘一些工做的變量。sql
urls.py —– 負責把URL模式映射到應用程序。shell
二 ,運行開發服務器數據庫
要立刻查看django項目應用的運行,能夠使用Django項目裏的mange.pydjango
切換到工程目錄,執行運行服務器命令:ubuntu
python manage.py runserver
完成:瀏覽器
打開瀏覽器,輸入訪問地址:127.0.0.1:8000
三,建立Blog應用
python manage.py startapp blog
blog應用文件結構以下:
├── blog │ ├── admin.py │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py
四,設計你的Model
在blog目錄下的models.py是blog應用的核心文件之一,是定義blog數據結構的地方。
用編輯器打開models.py
新添加BlogPost類,代碼以下:
from django.db import models # Create your models here. class BlogPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField()
BlogPost類是django.db.models.Model的一個子類 。它有變量title(blog的標題),body(blog的內容部分),timestamp(blog的發表時間)。
五,設置數據庫
Dajango支持主流的數據庫服務器(MySQL,PostgreSQL,Oracle和MSSQL),但本項目使用SQLite,這裏之須要經過一條簡單的命令能夠建立SQLite數據庫。
建立數據庫:
切換到工程主目錄mysite/下,執行以下命令:
python manage.py syncdb
出現下面的提示,輸入yes,而後按照提示輸入相關的信息。完成後會生成一個數據庫文件db.sqlite3
六,設置自動admin應用
1,打開mysite/mysite/urls.py,取消註釋url(r’^admin/’, include(admin.site.urls))
2,編輯mysite/mysite/settings.py,在INSTALLED_APPS裏面添加blog應用。
添加後的代碼以下:
# Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )
2,修改mysite/blog/models.py
在最後添加一行代碼:
admin.site.register(BlogPost)
models.py完整的代碼以下:
from django.db import models from django.contrib import admin # Create your models here. class BlogPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField() admin.site.register(BlogPost)
3 ,打開瀏覽器,輸入http://127.0.0.1:8000/admin/,輸入剛纔建立數據庫時候填寫的賬號就能進入admin界面。
七,試用admin
1, 點擊Blog Posts右側的Add 按鈕,添加一個帖子。
2,讓admin的BlogPost界面更加美觀
修改blog應用的models.py,爲它添加一個admin.ModelAdmin的子類BlogPostAdmin.以列表形式顯示BlogPost的標題和時間。
from django.db import models from django.contrib import admin # Create your models here. class BlogPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField() class BlogPostAdmin(admin.ModelAdmin): list_display = ('title','timestamp') admin.site.register(BlogPost,BlogPostAdmin)
八,創建Blog的公共部分
從Django的角度看,一個頁面具備三個典型的組件:
一個模板(template):模板負責把傳遞進來的信息顯示出來。
一個視圖(viw):視圖負責從數據庫獲取須要顯示的信息。
一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。
1,建立模板
在blog目錄下創建template目錄(mysite/blog/templates),建立模板文件archive.html,它的內容以下:
{% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.timestamp }}</p> <p>{{ post.body }}</p> {% endfor%}
2,建立一個視圖函數
在app應用的目錄下的view.py添加視圖函數
from django.shortcuts import render from django.template import loader,Context from django.http import HttpResponse from blog.models import BlogPost # Create your views here. def archive(request): posts = BlogPost.objects.all() t = loader.get_template("archive.html") c = Context({'posts':posts}) return HttpResponse(t.render(c))
posts = BlogPost.objects.all() :獲取數據庫裏面所擁有BlogPost對象
t = loader.get_template(「archive.html」):加載模板
c = Context({‘posts’:posts}):模板的渲染的數據是有一個字典類的對象Context提供,這裏的是一對鍵值對。
3,建立一個URL模式
第一步,在mysite/urls.py裏面取消下面的一行註釋:
#
把它變成:
url(r'^blog/', include('blog.urls')),
第二步:在blog應用裏面定義URL,建立一個urls.py(mysite/blog/urls.py)
from django.conf.urls import * from blog.views import archive urlpatterns = patterns('', url(r'^$',archive), )
最後,在瀏覽器輸入以下地址http://127.0.0.1:8000/blog/
九,最後的潤色
1,模板的精肯定位
在mysite/blog/templates目錄裏建立一個叫base.html的模板
<html> <style type="text/css"> body{color:#efd;background:#453;padding:0 5em;margin:0} h1{padding:2em 1em;background:#675} h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em} p{margin:1em 0} </style> <body> <h1>my blog</h1> {% block content %} {% endblock %} </body> </html>
2,修改archive.html模板,讓它引用base.html模板和它的「content」塊。
{% extends "base.html" %} {% block content %} {% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.timestamp | date:"1,F jS"}}</p> <p>{{ post.body }}</p> {% endfor %} {% endblock %}
刷新瀏覽器能夠看到效果以下:
3,按日期排序
修改blog 應用下的models.py,爲BlogPost添加一個Meta嵌套類。以下:
class BlogPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField()
class Meta:
ordering = ('-timestamp',)
刷新瀏覽器,以下:
聲明:OSCHINA 博客文章版權屬於做者,受法律保護。未經做者贊成不得轉載。