前言
上次寫了第一個入門的小例子屏箍,今天呢,咋們來搭建一個博客網(wǎng)站胸哥,所以今天會學(xué)到django中的model涯竟,以及template模板。
上一篇地址
代碼
-
首先空厌, 我們在之前的根目錄mysite/下面新建一個app庐船,起名叫blog:
python manage.py startapp blog
一個項目是可以有很多個APP的喲 -
接下來我們創(chuàng)建一個實體類,首先進(jìn)入blog/models.py嘲更,在底部加入如下代碼:
class Blog(models.Model): #繼承自models.Model title = models.CharField(max_length=20) #博客的標(biāo)題 最大長度設(shè)置為20個字符 body = models.TextField() #博客的內(nèi)容 timestamp = models.DateTimeField() #發(fā)表博客的日期及時間
這就是我們的博客實體模型了筐钟,就是Java中的bean對象。到時候我們可以通過這個類對數(shù)據(jù)庫進(jìn)行訪問赋朦,而不需要寫SQL語句Bǔ濉!北发!我們這里使用的數(shù)據(jù)庫是默認(rèn)的sqlite3,可以在mysite/settings.py中看到喷屋。因為這個是python自帶的數(shù)據(jù)庫琳拨,所以不需要額外安裝。
-
接下來進(jìn)入mysite/settings.py屯曹,找到INSTALLED_APPS狱庇,加入'blog',結(jié)果如下所示
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',#也就是我們剛剛創(chuàng)建的blog文件夾惊畏,我們的blog是一個APP喲 ]
把blog加入到上面之后,django就知道要包含blog這個APP了密任,之后就可以通過Blog對象建表了颜启。
-
讓django幫我們自動生成Blog對應(yīng)的表!
在根目錄執(zhí)行
python manage.py makemigrations
浪讳,這句話是告訴django缰盏,你對models做了一些改變,在這里淹遵,我們是增加了一個Blog類口猜。然后輸入
python manage.py migrate
,完成建表透揣。通過輸出的信息你會發(fā)現(xiàn)建立了很多表济炎,因為上面有很多APP,里面有各種表喲辐真。我們的只是其中一個罷了须尚。
Applying blog.0001_initial... OK
這句話就是建立我們的表啦~ -
創(chuàng)建一個后臺管理員,管理我們的各種models侍咱,這里也就是管理我們的Blog表耐床。
執(zhí)行:
python manage.py createsuperuser
,然后按照提示輸入你要注冊的用戶名放坏,郵箱以及設(shè)置密碼就可以了咙咽。 -
將我們的Blog注冊到管理員,讓管理員能夠訪問到淤年。
打開blog/admin.py钧敞,加入下面幾行代碼:
from .models import Blog #從當(dāng)前目錄的models.py中導(dǎo)入Blog類 # Register your models here. admin.site.register(Blog)
這樣我們就可以在后臺訪問到Blog了
啟動服務(wù)
python manage.py runserver
-
瀏覽器輸入: localhost:8000/admin
然后輸入你剛剛注冊的用戶名和密碼,接下來你就可以看到如下畫面啦
上面的Blog就是我們剛剛注冊的喲麸粮,我們點擊add溉苛,然后在頁面中輸入我們的內(nèi)容:
然后點擊SAVE即可保存到數(shù)據(jù)庫。
所以以后你可以很方便的管理你的數(shù)據(jù)庫中的表弄诲,只需要調(diào)用admin.site.register()方法就可以在后臺查看到你的表了愚战。
-
接下來,我們在blog/文件夾下面新建一個目錄齐遵,叫templates寂玲,用來存放html文件。
這時候梗摇,我們的文件目錄應(yīng)該是這樣的:
-
在網(wǎng)頁中展示我們的Blog:
首先我們要在blog/templates目錄下新建一個blog_list.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Blog</title> </head> <body> {% for blog in blog_list %} <div> <h1>{{ blog.title }}</h1> <p>{{ blog.body }}</p> <span>{{ blog.timestamp|date:'Y-M-D' }}</span> </div> {% endfor %} </body> </html>
上面的網(wǎng)頁在django中是稱作模板拓哟,在里面可以寫很多動態(tài)的元素,由django渲染后生成html伶授,例如
{% for blog in blogList %} {% endfor %}
是一個迭代器断序,中間的元素會被迭代很多次流纹,所以可以動態(tài)生成html標(biāo)簽。{{ blog.title }}
這個是取blog的title屬性的值违诗。 -
我們要在views.py中取出數(shù)據(jù)庫中的Blog對象漱凝,然后交給這個html:
打開blog/views.py,加入如下代碼:
from .models import Blog #導(dǎo)入Blog類 # Create your views here. def blog_list(request): #方法不能漏掉一個參數(shù) blog_list = Blog.objects.all()#獲取數(shù)據(jù)庫中Blog的所有對象 return render(request, 'blog_list.html', {'blog_list': blog_list}, )#把數(shù)據(jù)交給blog_list.html進(jìn)行渲染
render()的第一個參數(shù)是request,第二個是html模板诸迟,第三個是字典茸炒,也就是我們要傳遞到html的參數(shù),html訪問的是字典的key亮蒋。所以你現(xiàn)在可以回過頭看看我們上面編寫的html了扣典!
-
最后讓瀏覽器能夠找到我們的頁面,在mysite/urls.py中進(jìn)行配置:
from django.conf.urls import include, url from django.contrib import admin from blog.views import blog_list #增加這行 導(dǎo)入blog_list方法 urlpatterns = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', admin.site.urls), url(r'^blog/',blog_list)#增加這行 用blog_list方法渲染 ]
相信大家看過上一篇的對上面的代碼應(yīng)該不陌生了慎玖。
-
啟動服務(wù)進(jìn)行訪問:
瀏覽器輸入:http://localhost:8000/blog/
就可以看到剛剛用admin增加的Blog對象了V狻!趁怔!
后記
這篇文章只是走馬觀花的過一遍流程而已湿硝,讓我們再理清一下思路:
- 新建了一個app,要在mysite/settings.py中進(jìn)行注冊
- 實體模型寫在models.py中润努,一個實體類就對應(yīng)了數(shù)據(jù)庫的一張表关斜。
- 在views.py中我們可以通過實體類對數(shù)據(jù)庫進(jìn)行訪問,不需要寫SQL語句铺浇。常用的獲取對象的方法我們下一篇再講
- views.py獲取的對象可以通過字典的形式傳到template中痢畜,然后通過模板語言進(jìn)行訪問,動態(tài)生成html
- 通過配置mysite/urls.py鳍侣,將URL鏈接與方法綁定起來丁稀。