創建工程
創建mysite工程項目:
D:/djpy> django-admin.exe startproject mysite
工程目錄結構:
manage.py ----- Django項目裏面的工具,通過它可以調用django shell和數據庫等。
settings.py ---- 包含了項目的默認設置,包括數據庫信息,調試標誌以及其他一些工作的變量。
urls.py ----- 負責把URL模式映射到應用程序。
創建blog應用
在mysite目錄下創建blog應用
D:/pydj> cd mysite
D:/djpy/mysite$ python manage.py startapp blog
目錄結構:
初始化admin後臺數據庫
python 自帶SQLite數據庫,Django支持各種主流的數據庫,這裏爲了方便推薦使用SQLite,如果使用其它數據庫請在settings.py文件中設置。
切換到mysite創建數據庫:
D:/djpy/mysite$ python manage.py migrate D:/djpy/mysite$ python manage.py createsuperuser
設置admin應用
admin 是Django 自帶的一個後臺管理系統。
1、添加blog應用,打開mysite/mysite/settings.py 文件:
# Application definitionINSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )
在列表末尾,添加blog 應用
2、在我們創建django項目時,admin就已經創建,打開mysite/mysite/urls.py文件:
from django.conf.urls import include, urlfrom django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), ]
3、啓動django容器
D:\pydj\mysite>python manage.py runserverPerforming system checks... System check identified no issues (0 silenced). October 04, 2015 - 20:56:45Django version 1.8.2, using settings 'mysite.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
4、訪問後臺應用
http://127.0.0.1:8000/admin
輸入用戶、密碼,用戶名密碼爲第一次創建數據庫時創建的。回想“設置數據庫”時的設置。
設計Model(即設計數據庫表)
1、設計model
現在我們打開blog目錄下的models.py文件,這是我們定義blog數據結構的地方。打開mysite/blog/models.py 文件進行修改:
from django.db import models from django.contrib import admin # Create your models here. class BlogsPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField() admin.site.register(BlogsPost)
2、 再次初始化數據庫
D:\pydj\mysite>python manage.py makemigrations blog Migrations for 'blog': 0001_initial.py: - Create model BlogsPost D:\pydj\mysite>python manage.py migrate
3、再次runserver啓動服務,訪問admin後臺,創建文章。
登陸成功選擇add 創建博客
輸入博客標題,正文、日期時間、點擊save 創建博客。
設置admin 的BlogsPost界面
打開mysite/blog/models.py 文件,做如下修改:
from django.db import modelsfrom django.contrib import admin# Create your models here.class BlogsPost(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(BlogsPost,BlogPostAdmin)
創建BlogPostAdmin類,繼承admin.ModelAdmin父類,以列表的形式顯示BlogPost的標題和時間。
創建blog的公共部分
從Django的角度看,一個頁面具有三個典型的組件:
一個模板(template):模板負責把傳遞進來的信息顯示出來。
一個視圖(view):視圖負責從數據庫獲取需要顯示的信息。
一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。
創建模板
在blog項目下創建templates目錄(mysite/blog/templates/),在目錄下創建模板文件index.html,內容如下:
{% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.timestamp }}</p> <p>{{ post.body }}</p>{% endfor%}
創建視圖函數
打開mysite/blog/views.py文件:
#coding=utf-8from django.shortcuts import renderfrom blog.models import BlogsPostfrom django.shortcuts import render_to_response# Create your views here.def index(request): blog_list = BlogsPost.objects.all() return render_to_response('index.html',{'blog_list':blog_list})
blog_list = BlogPost.objects.all() :獲取數據庫裏面所擁有BlogPost對象
render_to_response()返回一個頁面(index.html),順帶把數據庫中查詢出來的所有博客內容(blog_list)也一併返回。
創建blog的URL模式
在mysite/urls.py文件裏添加blog的url:
#coding=utf-8from django.conf.urls import patterns, include, urlfrom django.contrib import admin urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^index/$', 'blog.views.index'), )
再次啓動服務($ python manage.py runserver),訪問blog應用(http://127.0.0.1:8000/index/)
當然,讀者可以繼續到admin後臺添加blog,從而刷新這個頁是否顯示新添加的blog。
添加樣式
創建基礎模板
在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>blog</h1> <h3></h3> {% block content %} {% endblock %} </body></html>
修改index.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 %}