最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Django博客開發(fā)教程

2021-08-09 16:57 作者:仙股  | 我要投稿

當(dāng)我們要開發(fā)一個(gè)項(xiàng)目的時(shí)候,首先需要了解我們項(xiàng)目的具體需求,根據(jù)需求類型劃分網(wǎng)站功能,并詳細(xì)了解這些需求的業(yè)務(wù)流程。然后更具需求和業(yè)務(wù)流程進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。本教程以一個(gè)Blog為例進(jìn)行介紹,Blog演示站地址如下:http://demo.django.cn/

blog的功能相對比較簡單,主要以文章為主。

從功能需求來看,這個(gè)Blog的功能分為:網(wǎng)站首頁、文章分類、文章內(nèi)容、幻燈圖片、文章推薦、文章排行、熱門推薦、文章搜索、友情鏈接。

1、網(wǎng)站首頁:網(wǎng)站首頁是整個(gè)網(wǎng)站的主界面,也是網(wǎng)站入口界面,里面主要展示Blog的動態(tài)信息及Blog功能導(dǎo)。網(wǎng)站動態(tài)信息以文章為主,如最新文章、幻燈圖片、推薦閱讀、文章排行、熱門推薦、友情鏈接等。導(dǎo)航欄主要是將文章的分類的鏈接展示在首頁,方便用戶瀏覽。

2、文章分類,主要展示文章分類信息及鏈接,方便用戶按需查看。文章分類可以在后臺添加刪除。

3、文章內(nèi)容,主要展示文章所屬分類、文章所屬標(biāo)簽、文章內(nèi)容、作者信息,發(fā)布時(shí)間信息??梢酝ㄟ^后臺增、刪、改。

4、幻燈圖片,在網(wǎng)站首頁,通過圖片和文字展示一些重要信息,可以通過后臺添加圖片、圖片描述、圖片鏈接。

5、文章推薦,推薦一些重要的文章,可以在后臺進(jìn)行推薦。

6、文章排行,可根據(jù)文章瀏覽數(shù),按時(shí)間段進(jìn)行查詢,然后展示出來。具體可根據(jù)自己的需求修改。

7、熱門推薦,同樣的推薦一些需要推薦的文章,可以在后臺按需求或推薦位進(jìn)行設(shè)置。

8、文章搜索,通過關(guān)鍵詞搜索文章。

9、友情鏈接,展示相互鏈接的網(wǎng)站的名稱與鏈接,可以通過后臺添加與刪除。

10、單頁面,展示網(wǎng)站介紹,作者聯(lián)系方式等信息,此類信息不經(jīng)常變動,可以通過后臺實(shí)現(xiàn)修改,也可以通過修改模板實(shí)現(xiàn)。


了解需求之后,就由UI設(shè)計(jì)師根據(jù)網(wǎng)站需求來設(shè)計(jì)網(wǎng)站頁面,然后由前端工程師根據(jù)設(shè)計(jì)好的頁面進(jìn)行切圖,實(shí)現(xiàn)HTML靜態(tài)頁面,最后由后端根據(jù)HTML頁面和需求實(shí)現(xiàn)數(shù)據(jù)庫構(gòu)建和網(wǎng)站后臺開發(fā)。

從設(shè)計(jì)方面來看,Blog主要分為六個(gè)頁面,分別是:網(wǎng)站首頁、文章分類列表頁、文章內(nèi)容頁、搜索列表頁、標(biāo)簽列表頁、單頁面。

1、網(wǎng)站首頁,信息聚合的地方,展示多種信息。對應(yīng)演示站的這個(gè)網(wǎng)址:http://demo.django.cn/

2、文章分類列表頁,點(diǎn)擊分類,進(jìn)入一個(gè)同一分類文章展示的列表頁面,對應(yīng)演示站這個(gè)地址:http://demo.django.cn/list-2.html

3、文章內(nèi)容頁,文章內(nèi)容展示頁面,對應(yīng)演示站這個(gè)地址:http://demo.django.cn/show-7.html

4、搜索列表頁,通過首頁搜索按鈕,展示出與搜索 詞相關(guān)的文章列表。對應(yīng)地址:http://demo.django.cn/s/?search=%E8%AE%BE%E8%AE%A1

5、標(biāo)簽列表頁,展示同一個(gè)標(biāo)簽下的所有文章。對應(yīng)網(wǎng)址:http://demo.django.cn/tag/Python%E6%95%99%E7%A8%8B

6、單頁面,展示網(wǎng)站介紹、作者介紹或者聯(lián)系方式等信息。對應(yīng)網(wǎng)址:http://demo.django.cn/about/

從網(wǎng)站需求分析及網(wǎng)站功能、頁面設(shè)計(jì)可以知道,我們的Blog主要以文章內(nèi)容為主。所以我們在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候,我們主要以文章信息為核心數(shù)據(jù),然后逐步向外擴(kuò)展相關(guān)聯(lián)的數(shù)據(jù)信息。

從這篇文章http://demo.django.cn/show-10.html可以看到,文章有標(biāo)題、分類、作者、瀏覽次數(shù)、發(fā)布時(shí)間、文章標(biāo)簽等信息。

這其中,文章與分類的關(guān)系是一對多的關(guān)系,什么是一對多?就是一篇文章只能有一個(gè)分類,而一個(gè)分類里可以有多篇文章。文章與標(biāo)簽的關(guān)系是多對多的關(guān)系,多對多簡單理解就是,一篇文章可以有多個(gè)標(biāo)簽,一個(gè)標(biāo)簽里同樣可以有多篇文章。關(guān)于一對多、多對多,大家可以查看這篇文章:多個(gè)數(shù)據(jù)模型間的關(guān)系

我們將文章表命名為Article,通過前面的分析得出文章信息表Article的數(shù)據(jù)庫結(jié)構(gòu)如下:

表字段
字段類型
備注
id
int類型,長度為11
主鍵,由系統(tǒng)自動生成
titleCharField類型,長度為100
文章標(biāo)題
categoryForeignKey外鍵,關(guān)聯(lián)文章分類表
tags
ManyToManyField多對多,關(guān)聯(lián)標(biāo)簽列表
bodyTextField文章內(nèi)容
userForeignKey外鍵,文章作者關(guān)聯(lián)用戶模型,系統(tǒng)自帶的
viewsPositiveIntegerField

文章瀏覽數(shù),正的整數(shù),不能為負(fù)

tuiForeignKey

外鍵,關(guān)聯(lián)推薦位表

created_timeDateTimeField

文章發(fā)布時(shí)間

從文章表里,我們關(guān)聯(lián)了一個(gè)分類表,我們把這個(gè)分類表命名為category,category表的數(shù)據(jù)庫結(jié)構(gòu)如下:

表字段字段類型備注id
int類型,長度為11主鍵,由系統(tǒng)自動生成name
CharField類型,長度為30分類名

文章關(guān)聯(lián)的標(biāo)簽表,我們命名為tag,結(jié)構(gòu)如下:

表字段字段類型備注id
int類型,長度為11主鍵,由系統(tǒng)自動生成name
CharField類型,長度為30標(biāo)簽名

文章關(guān)聯(lián)的推薦位表,命名為tui,結(jié)構(gòu)如下:

表字段字段類型備注id
int類型,長度為11主鍵,由系統(tǒng)自動生成name
CharField類型,長度為30標(biāo)簽名

除此之外,我們還有兩個(gè)獨(dú)立的表,和文章沒有關(guān)聯(lián)的,一個(gè)是幻燈圖片的表,一個(gè)是友情鏈接的表。

幻燈圖表,命名為banner,數(shù)據(jù)庫結(jié)構(gòu)如下:

表字段字段類型備注id
int類型,長度為11主鍵,由系統(tǒng)自動生成text_infoCharField類型,長度為100標(biāo)題,圖片文本信息
img
ImageField類型
圖片類型,保存?zhèn)鲌D片的路徑
link_urlURLField類型
圖片鏈接的URL
is_activeBooleanField布爾類型
有True 和False兩個(gè)值,意思為是否激活

友情鏈接表命名為link,結(jié)構(gòu)如下:

表字段字段類型備注id
int類型,長度為11主鍵,由系統(tǒng)自動生成nameCharField類型,長度為70友情鏈接的名稱
linkurlURLField類型
友情鏈接的URL

至此,我們的數(shù)據(jù)庫構(gòu)造大致完成,后期如果還有其它的需求,我們可以在這基礎(chǔ)上進(jìn)行增加或者刪除。下面我們就開始進(jìn)行項(xiàng)目的創(chuàng)建與開發(fā)。

我們對需求和數(shù)據(jù)庫都進(jìn)行分析了之后,我們就開始來創(chuàng)建我們的項(xiàng)目。教程是在windows10操作系統(tǒng)下,用的Python3.6和django2.1.1,開發(fā)工具為pycharm。

打開我們的Pycharm,新建一個(gè)項(xiàng)目。

說明:

1為項(xiàng)目保存路徑,myblog為項(xiàng)目名。

2為選擇使用的虛擬環(huán)境軟件,這里選virtualenv。

3為虛擬環(huán)境保存目錄,我把它保存在項(xiàng)目里,虛擬環(huán)境默認(rèn)名為env,我系統(tǒng)里有多個(gè)項(xiàng)目為了區(qū)分出來命名為myblogenv

4為使用的模板語言,我們默認(rèn)用django模板語言。

5為創(chuàng)建項(xiàng)目的時(shí)候建立一個(gè)模板文件目錄,用來存放模板文件。用CMD命令創(chuàng)建項(xiàng)目的話,模板目錄需要自己手動創(chuàng)建。

6為創(chuàng)建一個(gè)名為blog的APP應(yīng)用。同樣的用CMD命令創(chuàng)建的話,需要手動通過python manage.py startAPP blog命令來進(jìn)行創(chuàng)建。更多Django命令,請查看:Django常用命令

點(diǎn)擊創(chuàng)建之后,Pycharm自動幫我們完成Django軟件下載安裝和Django的項(xiàng)目創(chuàng)建。

注意:如果對需要指定Django版本的話,不能直接使用這個(gè)方法,這個(gè)方法會直接下載最新版本的Django。指定版本的話,請使用CMD通過命令如:pip install django==2.0.1安裝。

安裝成功之后項(xiàng)目目錄結(jié)構(gòu)如下圖所示:

第一個(gè)黑色的myblog為項(xiàng)目文件夾目錄。

blog為APP應(yīng)用目錄,也是我們上面設(shè)置第6項(xiàng)才創(chuàng)建的。myblog為項(xiàng)目配置目錄,myblogvenv為Pycharm創(chuàng)建的虛擬環(huán)境目錄,與項(xiàng)目無關(guān),不用理會。

目錄里的文件含義如下:

blog????????????????#APP應(yīng)用名和目錄│??admin.py????????#對應(yīng)應(yīng)用后臺管理配置文件。│??APPs.py?????????#對應(yīng)應(yīng)用的配置文件。│??models.py???????#數(shù)據(jù)模塊,數(shù)據(jù)庫設(shè)計(jì)就在此文件中設(shè)計(jì)。后面重點(diǎn)講解│??tests.py????????#自動化測試模塊,可在里面編寫測試腳本自動化測試│??views.py????????#視圖文件,用來執(zhí)行響應(yīng)代碼的。你在瀏覽器所見所得都是它處理的。│??__init__.py │ ├─migrations????????#數(shù)據(jù)遷移、移植文目錄,記錄數(shù)據(jù)庫操作記錄,內(nèi)容自動生成。│??│??__init__.py myblog???????????????#項(xiàng)目配置目錄│??__init__.py???????#初始化文件,一般情況下不用做任何修改。│??settings.py????????#項(xiàng)目配置文件,具體如何配置后面有介紹。│??url.py?????????????#項(xiàng)目URL設(shè)置文件,可理解為路由,可以控制你訪問去處。│??wsgi.py??????????#為Python服務(wù)器網(wǎng)關(guān)接口,是Python與WEB服務(wù)器之間的接口。myblogvenv????????????#Pycharm創(chuàng)建的虛擬環(huán)境目錄,和項(xiàng)目無關(guān),不需要管它。templates???????????#項(xiàng)目模板文件目錄,用來存放模板文件manage.py?????#命令行工具,通過可以與項(xiàng)目與行交互。在終端輸入python?manege.py?help,可以查看功能。

創(chuàng)建項(xiàng)目之后,我們需要對項(xiàng)目進(jìn)行最基礎(chǔ)的配置。這些配置是我們做項(xiàng)目的時(shí)候必須要配置的,所以我們先提前配置好。

我們打開myblog目錄下的settings.py文件。

一、設(shè)置域名訪問權(quán)限

myblog/settings.py ALLOWED_HOSTS?=?[]??????#修改前ALLOWED_HOSTS?=?['*']???#修改后,表示任何域名都能訪問。如果指定域名的話,在''里放入指定的域名即可

二、設(shè)置TEMPLATES里的'DIRS',添加模板目錄templates的路徑,后面我們做網(wǎng)站模板的時(shí)候用得著。

myblog/settings.py#修改前'DIRS':?[]#修改后'DIRS':?[os.path.join(BASE_DIR,?'templates')] 注:使用pycharm創(chuàng)建的話會自動添加

三、找到DATABASES設(shè)置網(wǎng)站數(shù)據(jù)庫類型。這里我們使用默認(rèn)的sqlite3。如果需要使用Mysql請查看文章:Django如何使用Mysql數(shù)據(jù)庫,其它數(shù)據(jù)庫請查看官方文檔。官方文檔,后期上線部署的話,也可以進(jìn)行數(shù)據(jù)庫與數(shù)據(jù)庫之間的數(shù)據(jù)轉(zhuǎn)換。具體可查看:如何把SQLite數(shù)據(jù)庫轉(zhuǎn)換為Mysql數(shù)據(jù)庫?

四、在INSTALLED_APPS添加APP應(yīng)用名稱。

myblog/settings.py INSTALLED_APPS?=?[ ????'django.contrib.admin', ????.... ????'blog.APPs.BlogConfig',#注冊APP應(yīng)用]#使用pycharm創(chuàng)建的話,這里自動添加了,如果是終端命令創(chuàng)建的話,需要手動添加應(yīng)用名稱如'blog',

五、修改項(xiàng)目語言和時(shí)區(qū)

myblog/settings.py#修改前為英文LANGUAGE_CODE?=?'en-us'#修改后LANGUAGE_CODE?=?'zh-hans'?#語言修改為中文#時(shí)區(qū),修改前TIME_ZONE?=?'UTC'#修改后TIME_ZONE?=?'Asia/Shanghai'?#

六、在項(xiàng)目根目錄里創(chuàng)建static和media,兩個(gè)目錄。static用來存放模板CSS、JS、圖片等靜態(tài)資源,media用來存放上傳的文件,后面我們在講解數(shù)據(jù)庫創(chuàng)建的時(shí)候有說明。

settings里找到STATIC_URL,然后在后面一行加上如下代碼。

myblog/settings.py#設(shè)置靜態(tài)文件目錄和名稱STATIC_URL?=?'/static/'#加入下面代碼#這個(gè)是設(shè)置靜態(tài)文件夾目錄的路徑STATICFILES_DIRS?=?( ????os.path.join(BASE_DIR,?'static'), )#設(shè)置文件上傳路徑,圖片上傳、文件上傳都會存放在此目錄里MEDIA_URL?=?'/media/'MEDIA_ROOT?=?os.path.join(BASE_DIR,?'media')

基本配置完成,更多關(guān)于配置文件的介紹,請查看文章:全局配置settings詳解

基礎(chǔ)配置做好了之后,我們就可以先遷移數(shù)據(jù)到數(shù)據(jù)庫,然后啟動我們的項(xiàng)目,感受Django的魅力。

在Pycharm左下角底部的Terminal,會彈出Terminal終端窗口,Pycharm自動會幫我們啟動虛擬環(huán)境。如下圖所示:

這里面有兩個(gè)地方需要留意:

1、留意項(xiàng)目路徑,看這個(gè)路徑是不是我們項(xiàng)目的路徑。

2、留意路徑前有沒有我們創(chuàng)建的虛擬環(huán)境名,之前我們創(chuàng)建的虛擬環(huán)境名是myblogvenv,如果顯示正確,則說明我們啟動正確。如果沒有虛擬環(huán)境名,則進(jìn)入項(xiàng)目目錄下的myblogvenv\Scripts目錄里,在終端輸入activate啟動虛擬環(huán)境,然后再切換到項(xiàng)目根目錄里。如果前面的虛擬環(huán)境名稱不對,則在終端輸入deactivate退出虛擬環(huán)境,然后按上面的方法啟動虛擬環(huán)境。

上面都OK了,我們就在終端里依次輸入如下命令進(jìn)行數(shù)據(jù)庫遷移:

python?manage.py?makemigrationspython?manage.py?migrate

遷移數(shù)據(jù)之后,網(wǎng)站目錄里自動會創(chuàng)建一個(gè)數(shù)據(jù)庫文件db.sqlite3,里面存放著我們的數(shù)據(jù)。

之后輸入下面命令創(chuàng)建管理帳號和密碼:

python?manage.py?createsuperuser

注意:密碼不要太簡單或者和電子郵件相似,不然Django會有風(fēng)險(xiǎn)提示。

最后,我們輸入下面有命令,啟動我們的Django項(xiàng)目:

python?manage.py?runserver?#默認(rèn)使用8000端口python?manage.py?runserver?8080?#指定啟動端口python?manage.py?runserver?127.0.0.1:9000?#指定IP和端口

提示啟動成功,然后我們在瀏覽器里輸入:http://127.0.0.1:8000/

就可以查看到Django默認(rèn)的歡迎頁面!

是不是有一種成就感?這就是Django的強(qiáng)大之處。幾個(gè)命令就可以實(shí)現(xiàn)一個(gè)網(wǎng)站創(chuàng)建。自己動手試試吧。

關(guān)于更多的Django命令,大家可以查看文章:Django常用命令

有的朋友覺得這還是不過癮,說這個(gè)歡迎頁面是Django自帶的,我們能自己做一個(gè)歡迎頁面么?答案是肯定的。

首先,打開打開bolg目錄下的views.py文件,在里面輸入:

myblog/blog/views.pyfrom?django.http?import?HttpResponsedef?hello(request):????return?HttpResponse('歡迎使用Django!')

再打開myblog目錄下的urls.py文件,在文件里添加兩行代碼:

myblog/myblog/urls.pyfrom?django.contrib?import?adminfrom?django.urls?import?pathfrom?blog?import?views?????????#+?urlpatterns?=?[ ????path('admin/',?admin.site.urls), ????path('',?views.hello),???#+]

留意:代碼后面有個(gè)#+表示是我新添加的代碼。

代碼寫好之后,啟動項(xiàng)目,刷新頁面。就可以看到:

OK,自定義歡迎頁面成功顯示!

之后,我們在瀏覽器里面訪問:http://127.0.0.1:8000/admin? 就可以進(jìn)入Django自帶的后臺管理。

輸入剛才我們創(chuàng)建的帳號與密碼,點(diǎn)擊登錄。

進(jìn)入到管理后臺,這個(gè)后臺功能十分強(qiáng)大。后面我們會對其進(jìn)行詳細(xì)介紹。

Django是通過Model操作數(shù)據(jù)庫,不管你數(shù)據(jù)庫的類型是MySql或者Sqlite,Django它自動幫你生成相應(yīng)數(shù)據(jù)庫類型的SQL語句,所以不需要關(guān)注SQL語句和類型,對數(shù)據(jù)的操作Django幫我們自動完成。只要回寫Model就可以了!

django根據(jù)代碼中定義的類來自動生成數(shù)據(jù)庫表。我們寫的類表示數(shù)據(jù)庫的表,如果根據(jù)這個(gè)類創(chuàng)建的對象是數(shù)據(jù)庫表里的一行數(shù)據(jù),對象.id 對象.value是每一行里的數(shù)據(jù)。

基本的原則如下:
每個(gè)模型在Django中的存在形式為一個(gè)Python類
每個(gè)模型都是django.db.models.Model的子類
模型里的每個(gè)類代表數(shù)據(jù)庫中的一個(gè)表
模型的每個(gè)字段(屬性)代表數(shù)據(jù)表的某一列
Django將自動為你生成數(shù)據(jù)庫訪問API

之前我們在前面的數(shù)據(jù)庫設(shè)計(jì)分析文章里已經(jīng)分析過數(shù)據(jù)庫的結(jié)構(gòu)。完成博客,我們需要存儲六種數(shù)據(jù):文章分類、文章、文章標(biāo)簽、幻燈圖、推薦位、友情鏈接。每種數(shù)據(jù)一個(gè)表。

分類表結(jié)構(gòu)設(shè)計(jì)

表名:Category、分類名:name

標(biāo)簽表設(shè)計(jì):

表名:Tag、標(biāo)簽名:name

文章表結(jié)構(gòu)設(shè)計(jì):

表名:Article、標(biāo)題:title、摘要:excerpt、分類:category、標(biāo)簽:tags、推薦位、內(nèi)容:body、創(chuàng)建時(shí)間:created_time、作者:user、文章封面圖片img

幻燈圖表結(jié)構(gòu)設(shè)計(jì):

表名:Banner、圖片文本text_info、圖片img、圖片鏈接link_url、圖片狀態(tài)is_active。

推薦位表結(jié)構(gòu)設(shè)計(jì):

表名:Tui、推薦位名name。

友情鏈接表結(jié)構(gòu)設(shè)計(jì):

表名:Link、鏈接名name、鏈接網(wǎng)址linkurl。

其中:

文章和分類是一對多的關(guān)系,文章和標(biāo)簽是多對多的關(guān)系,文章和作者是一對多的關(guān)系,文章和推薦位是一對多關(guān)系(看自己的需求,也可以設(shè)計(jì)成多對多)。

打開blog/models.py,輸入代碼:

from?django.db?import?modelsfrom?django.contrib.auth.models?import?User?#導(dǎo)入Django自帶用戶模塊#?文章分類class?Category(models.Model):????name?=?models.CharField('博客分類',?max_length=100) ????index?=?models.IntegerField(default=999,?verbose_name='分類排序') ????class?Meta:????????verbose_name?=?'博客分類'????????verbose_name_plural?=?verbose_name ????def?__str__(self):????????return?self.name#文章標(biāo)簽class?Tag(models.Model):????name?=?models.CharField('文章標(biāo)簽',max_length=100) ????class?Meta:????????verbose_name?=?'文章標(biāo)簽'????????verbose_name_plural?=?verbose_name ????def?__str__(self):????????return?self.name#推薦位class?Tui(models.Model):????name?=?models.CharField('推薦位',max_length=100) ????class?Meta:????????verbose_name?=?'推薦位'????????verbose_name_plural?=?verbose_name ????def?__str__(self):????????return?self.name#文章class?Article(models.Model):????title?=?models.CharField('標(biāo)題',?max_length=70) ????excerpt?=?models.TextField('摘要',?max_length=200,?blank=True) ????category?=?models.ForeignKey(Category,?on_delete=models.DO_NOTHING,?verbose_name='分類',?blank=True,?null=True) ?????#使用外鍵關(guān)聯(lián)分類表與分類是一對多關(guān)系????tags?=?models.ManyToManyField(Tag,verbose_name='標(biāo)簽',?blank=True) ????#使用外鍵關(guān)聯(lián)標(biāo)簽表與標(biāo)簽是多對多關(guān)系????img?=?models.ImageField(upload_to='article_img/%Y/%m/%d/',?verbose_name='文章圖片',?blank=True,?null=True) ?????body?=?models.TextField() ????user?=?models.ForeignKey(User,?on_delete=models.CASCADE,?verbose_name='作者') ?????""" ?????文章作者,這里User是從django.contrib.auth.models導(dǎo)入的。 ?????這里我們通過?ForeignKey?把文章和?User?關(guān)聯(lián)了起來。 ?????"""????views?=?models.PositiveIntegerField('閱讀量',?default=0) ????tui?=?models.ForeignKey(Tui,?on_delete=models.DO_NOTHING,?verbose_name='推薦位',?blank=True,?null=True) ???? ????created_time?=?models.DateTimeField('發(fā)布時(shí)間',?auto_now_add=True) ????modified_time?=?models.DateTimeField('修改時(shí)間',?auto_now=True) ????class?Meta:????????verbose_name?=?'文章'????????verbose_name_plural?=?'文章'????def?__str__(self):????????return?self.title#Bannerclass?Banner(models.Model):????text_info?=?models.CharField('標(biāo)題',?max_length=50,?default='') ????img?=?models.ImageField('輪播圖',?upload_to='banner/') ????link_url?=?models.URLField('圖片鏈接',?max_length=100) ????is_active?=?models.BooleanField('是否是active',?default=False) ????def?__str__(self):????????return?self.text_info ????class?Meta:????????verbose_name?=?'輪播圖'????????verbose_name_plural?=?'輪播圖'#友情鏈接class?Link(models.Model):????name?=?models.CharField('鏈接名稱',?max_length=20) ????linkurl?=?models.URLField('網(wǎng)址',max_length=100) ????def?__str__(self):????????return?self.name ????class?Meta:????????verbose_name?=?'友情鏈接'????????verbose_name_plural?=?'友情鏈接'

這里面我們多增加了一個(gè)img圖片封面字段,用于上傳文章封面圖片的,article_img/為上傳目錄,%Y/%m/%d/為自動在上傳的圖片上加上文件上傳的時(shí)間。

里面的模型字段與模型元數(shù)據(jù)Meta選項(xiàng)詳解我在這里就不做過多介紹,更多請點(diǎn)擊文章數(shù)據(jù)模型字段及屬性詳解和模型元數(shù)據(jù)Meta選項(xiàng)詳解了解。

我們已經(jīng)編寫了博客數(shù)據(jù)庫模型的代碼,但那還只是 Python 代碼而已,Django 還沒有把它翻譯成數(shù)據(jù)庫語言,因此實(shí)際上這些數(shù)據(jù)庫表還沒有真正的在數(shù)據(jù)庫中創(chuàng)建。我們需要進(jìn)行數(shù)據(jù)庫遷移。

在遷移之前,我們先需要設(shè)置數(shù)據(jù)庫,如果我們使用默認(rèn)的數(shù)據(jù)庫的話,就不需要設(shè)置,Django默認(rèn)使用

sqlite3數(shù)據(jù)庫,如果我們想使用Mysql數(shù)據(jù)庫的話,則需要我們單獨(dú)配置。我們打開settings.py文件,找到DATABASES,然后把它修改成如下代碼:

############修改成mysql如下: DATABASES?=?{ ????'default':?{ ????????'ENGINE':?'django.db.backends.mysql', ????????'NAME':?'test',????#你的數(shù)據(jù)庫名稱????????'USER':?'root',???#你的數(shù)據(jù)庫用戶名????????'PASSWORD':?'445813',?#你的數(shù)據(jù)庫密碼????????'HOST':?'',?#你的數(shù)據(jù)庫主機(jī),留空默認(rèn)為localhost????????'PORT':?'3306',?#你的數(shù)據(jù)庫端口????}}#由于mysql默認(rèn)引擎為MySQLdb,在__init__.py文件中添加下面代碼#在python3中須替換為pymysql,可在主配置文件(和項(xiàng)目同名的文件下,不是APP配置文件)中增加如下代碼#import?pymysql#pymysql.install_as_MySQLdb()#如果找不到pymysql板塊,則通過pip?install?pymysql進(jìn)行安裝。

更多關(guān)于Django數(shù)據(jù)庫的配置,請查看官方文檔:數(shù)據(jù)庫設(shè)置

數(shù)據(jù)庫設(shè)置好之后,我們就依次輸入下面的命令進(jìn)行數(shù)據(jù)庫遷移:

python?manage.py?makemigrationspython?manage.py?migrate

遷移的時(shí)候,會有如下提示:

出現(xiàn)這個(gè)原因是因?yàn)槲覀兊幕脽魣D使用到圖片字段,我們需要引入圖片處理包。提示里也給了我們處理方案,輸入如下命令,安裝Pillow模塊即可:

pip?install?Pillow

安裝成功之后再遷移數(shù)據(jù)庫

數(shù)據(jù)庫遷移成功之后,程序會在blog下的migrations目錄里自動生成幾個(gè)000開頭的文件,文件里面記錄著數(shù)據(jù)庫遷移記錄:

大家可以查看一下。了解遷移的過程。本文就不做過多介紹。

上節(jié)我們我們把數(shù)據(jù)庫遷移到數(shù)據(jù)庫里去了,那么現(xiàn)在我們數(shù)據(jù)庫里是個(gè)什么樣的情況呢?我們點(diǎn)擊Pycharm右上角的Database,然后在網(wǎng)站項(xiàng)目里選中我們的數(shù)據(jù)庫文件db.sqlite3,把它拖到Database框里。

然后點(diǎn)擊db,就可以查看到我們的網(wǎng)站數(shù)據(jù)庫,我們可以對數(shù)據(jù)進(jìn)行增、刪、改、查操作。

更多相關(guān)方面的操作請查看文章:使用Pycharm里的Database對數(shù)據(jù)庫進(jìn)行可視化操作

Pycharm Batabase限制非常大,下面我們介紹如何使用Django自帶的admin管理網(wǎng)站數(shù)據(jù)。django的admin后臺管理它可以讓我們快速便捷管理數(shù)據(jù),我們可以在各個(gè)APP目錄下的admin.py文件中對其進(jìn)行控制。想要對APP應(yīng)用進(jìn)行管理,最基本的前提是要先在settings里對其進(jìn)行注冊,就是在INSTALLED_APPS里把APP名添加進(jìn)去,我們在前面的文章基礎(chǔ)配置有提到過。

注冊APP應(yīng)用之后,我們想要在admin后臺里對數(shù)據(jù)庫表進(jìn)行操作,我們還得在應(yīng)用APP下的admin.py文件里對數(shù)據(jù)庫表先進(jìn)行注冊。我們的APP應(yīng)用是blog,所以我們需要在blog/admin.py文件里進(jìn)行注冊:

blog/admin.pyfrom?django.contrib?import?adminfrom?.models?import?Banner,?Category,?Tag,?Tui,?Article,?Link?#導(dǎo)入需要管理的數(shù)據(jù)庫表@admin.register(Article)class?ArticleAdmin(admin.ModelAdmin):????list_display?=?('id',?'category',?'title',?'tui',?'user',?'views',?'created_time') ????#?文章列表里顯示想要顯示的字段????list_per_page?=?50????#?滿50條數(shù)據(jù)就自動分頁????ordering?=?('-created_time',) ????#后臺數(shù)據(jù)列表排序方式????list_display_links?=?('id',?'title') ????#?設(shè)置哪些字段可以點(diǎn)擊進(jìn)入編輯界面@admin.register(Banner)class?BannerAdmin(admin.ModelAdmin):????list_display?=?('id',?'text_info',?'img',?'link_url',?'is_active')@admin.register(Category)class?CategoryAdmin(admin.ModelAdmin):????list_display?=?('id',?'name',?'index')@admin.register(Tag)class?TagAdmin(admin.ModelAdmin):????list_display?=?('id',?'name')@admin.register(Tui)class?TuiAdmin(admin.ModelAdmin):????list_display?=?('id',?'name')@admin.register(Link)class?LinkAdmin(admin.ModelAdmin):????list_display?=?('id',?'name','linkurl')

關(guān)于admin定制和數(shù)據(jù)庫表注冊管理方法,在文章定制Admin管理后臺有詳細(xì)介紹。

登錄管理后臺http://127.0.0.1:8000/admin/

注冊之前的后臺:

注冊之后,啟動項(xiàng)目,刷新頁面:

多出了之前我們在models里創(chuàng)建的表。我們可以在后臺里面對這些表進(jìn)行增、刪、改方面的操作。


Django博客開發(fā)教程的評論 (共 條)

分享到微博請遵守國家法律
定西市| 岢岚县| 濉溪县| 吴川市| 故城县| 义马市| 夏邑县| 定边县| 汕头市| 勐海县| 天津市| 海林市| 丽水市| 安溪县| 綦江县| 德阳市| 定日县| 离岛区| 阿拉善左旗| 丰都县| 东方市| 荣昌县| 洛隆县| 沙湾县| 新干县| 浦县| 江源县| 临武县| 溧阳市| 广元市| 康定县| 万宁市| 民乐县| 遂宁市| 蕲春县| 托克托县| 桦南县| 上思县| 定边县| 中阳县| 佛山市|