1 建立blog
進入工程目錄,執行python manage.py startapp blog
產生了下方紅色方框中的系列檔案,裡面都是些空檔案,並沒有什麼真正的代碼,只是先佔住位置而已,只是告訴django這個app是項目的一部分而已。
在settings.py中找到INSTALLED_APPS,添加'blog',django用INSTALLED_APPS來決定系統裡不同部分的配置,包括自動化的admin應用、測試架構。
2 ORM
models.py是django的blog應用的核心部分,下面代碼定義了BlogPost類,它是django.db.models.Model的子類,也是ORM的核心。這個類定義了3個變數,還有一個隱藏的自增的、唯一的id變數。
from __future__ import unicode_literalsfrom django.db import modelsclass BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField();
資料庫使用sqlite,主要應為sqlite需要安裝,方便測試。執行命令python manage.py migrate建立資料表,使用工具SQLiteSpy可以查看到
再執行下面兩個命令建立來建立blog_blogpost表
python manage.py makemigrationspython manager.py migrate
執行python manage.py createsuperuser建立admin使用者
3 admin部分
在models.py中添加admin.site.register(BlogPost)
輸入http://127.0.0.1:8000/admin,會用admin使用者登入
點擊Add進入下圖:
儲存成功如下:
我應該不是第一個覺得顯示BlogPost Object不爽的人,於是做了下面方框的調整
重新整理一下頁面,就顯示了內容了
4 公眾部分
從django的角度來說,一個頁面具有三個典型的組件:
一個模板(template):模板負責將傳遞進來的資訊顯示出來(用一種類似Python字典的對象Context)
一個視圖(View)函數:負責擷取要顯示的資訊,通常都是從資料庫裡取得
一個URL模式:它用來把收到的請求和視圖函數匹配,有時也會向視圖傳遞一些參數。
編輯views.py
from django.template import loader,Contextfrom django.http import HttpResponsefrom blog.models import BlogPost# 每個django視圖函數都將django.http.HttpRequest對象作為它的第一個參數def archive(request):# 這一行使用ORM,擷取資料庫裡所有的BlogPost對象。 posts = BlogPost.objects.all()# 這裡告訴django模板的名稱就能建立模板對象 t = loader.get_template("archive.html")# django模板渲染的資料是由一個字典類的對象context提供的 c = Context({'posts':posts})# 每個django視圖函數都會返回一個django.http.HttpResponse對象。 return HttpResponse(t.render(c))
在blog中建立templates檔案夾,並建立archive.html
{% for post in posts %}<h2>{{post.title}}</h2><p>{{post.timestamp}}</p><p>{{post.body}}</p>{% endfor %}
在blog目錄下建立urls.py檔案,內容如下:
from django.conf.urls import urlfrom blog.views import archiveurlpatterns = [ url(r'^$', archive),]
在mysite中urls.py中添加如下:
from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/',include('blog.urls')),]
輸入http://127.0.0.1:8000/blog/,運行效果如下: