最近因?yàn)橐鲆粋€(gè)小型的網(wǎng)站,需求很簡(jiǎn)單有點(diǎn)像公司內(nèi)部的管理網(wǎng)站,和室友一起倒騰,發(fā)現(xiàn)了一些坑。我自己之前沒有接觸過(guò)python 但是發(fā)現(xiàn)真的非常好上手。
我們沒人會(huì)前端,所以最怕修改網(wǎng)頁(yè),一開始選擇了Flask框架,我搞了半天遇到各種坑(還要修改css 麻煩),中間件也不好用,勸大家用django,資料多,非常好用。
那么開始說(shuō)重點(diǎn),需要做的哪些東西。
http://python.usyiyi.cn/ 是主要的資料,里面是中文的資料建議一點(diǎn)點(diǎn)看下去。
1-項(xiàng)目環(huán)境搭建。
1.1第三方庫(kù)準(zhǔn)備
開發(fā)環(huán)境是mac os 和ubantu 推薦大家下載一個(gè)第三方的軟件叫 "Anaconda" ,安裝非常簡(jiǎn)單,直接運(yùn)行腳本就好。
安裝完了,可以到命令行運(yùn)行 pip list。可以看到已經(jīng)安裝的python第三方庫(kù) 。
此時(shí)我們是沒有django的庫(kù)的。
1.2IDE的安裝
IDE 使用eclipse,講一個(gè)工具Pydev,安裝自行百度,點(diǎn)點(diǎn)就行。
然后 到Eclipse了 New->Project->Pydev->Pydev Django Project,一路next 。發(fā)現(xiàn)eclipse 找不到Django 環(huán)境,回來(lái)點(diǎn)擊 click here to configure an interpreter 然后把python interpreter 中的名為python的刪掉,那是系統(tǒng)默認(rèn)的,改成anaconda目錄 下 bin/里面的python。默認(rèn)是2.7.11吧。忘記安裝目錄?一個(gè)命令 sudo find / -name anacon* 搞定~。找到以后加進(jìn)去,到了圖一這一步就結(jié)束。
(圖1)
2-數(shù)據(jù)庫(kù)配置和使用
2.1數(shù)據(jù)庫(kù)連接文件配置
我選了mysql,當(dāng)然在這之前mysql的帳號(hào)密碼應(yīng)該自己確定了吧。mysql配置應(yīng)該簡(jiǎn)單。但是如果要支持遠(yuǎn)程訪問(wèn),比如你把數(shù)據(jù)庫(kù)放到云上,別人機(jī)器上,畢竟開發(fā)不是一個(gè)人的事,我自己遇到的坑是"關(guān)于 mysql 配置文件中的 bind-address",自行百度,解決方案是刪除就好。(推薦幾個(gè)mysql 連接的桌面軟件,用Navicat ,或者mysql workbench 都是不錯(cuò)的)。(后來(lái)發(fā)現(xiàn)這里輸入密碼和帳號(hào)沒什么用還是要去修改在與項(xiàng)目同名的app里面的setting)。現(xiàn)在在mysql自己創(chuàng)建一個(gè)database 取名隨便。我叫test,其他字段應(yīng)該不用解釋了如圖2。
(圖2)
2.2創(chuàng)建APP(模塊)
然后我們?cè)诠こ汤锔夸浻覔?>Django->Create App->輸入名字就好。因?yàn)榫W(wǎng)頁(yè)主要是MVC模式,創(chuàng)兩個(gè)吧。一個(gè)叫db 專用于管理數(shù)據(jù)庫(kù)(models 層) 第二個(gè)專用于后臺(tái)邏輯。名字隨便取因?yàn)榭赡芤獙?duì)應(yīng)多個(gè)模塊。django里面增加一個(gè)app 就需要在與項(xiàng)目同名的那個(gè)app的setting中Installed_app里面加入app名(如圖4)。我們加入以后目錄結(jié)構(gòu)(如圖3.)
(圖3)
(圖4)
2.3用django模型層建表
數(shù)據(jù)庫(kù)正式開發(fā),數(shù)據(jù)庫(kù)創(chuàng)建,在db的models.py中 對(duì)應(yīng)數(shù)據(jù)庫(kù)中每個(gè)表寫class,就是定義好字段,因?yàn)镈jango的目標(biāo)是要程序員完全脫離數(shù)據(jù)庫(kù)的操作。那么我們先不建表,cd 到你的工程目錄去,用命令行 用打入 manage.py migrate 命令。效果如圖5。
(圖5)
如果你的配置是沒錯(cuò)的,此時(shí)django 已經(jīng)在你的數(shù)據(jù)庫(kù)中建了很多表,都是django自帶的,我也沒有用起來(lái),唯一用的是django自帶的數(shù)據(jù)庫(kù)管理界面,類似于Navicat,還支持搜索功能,自己去文檔里 http://python.usyiyi.cn/django_182/intro/tutorial02.html 學(xué)吧。
然后在db的models里寫一個(gè)表的代碼。然后效果如圖6 還是用了Manage 腳本。
from __future__ import unicode_literalsfrom django.db import models# Create your db here.class Message(models.Model): user_id = models.BigIntegerField(blank=True, null=True)(圖6)
到這里表都結(jié)束了,實(shí)際開發(fā)中,我數(shù)據(jù)庫(kù)都是先建好的,那我全部都要寫每個(gè)類是不是很麻煩,有沒有偷懶的辦法呢?
答案是用./manage.py inspectdb
用了就知道,他會(huì)反向生成表的代碼, 然后直接復(fù)制進(jìn)models里面就好了。
3-url 解析
3.1url匹配處理函數(shù)
在Django中 一般url解析分為兩層。
第一層負(fù)責(zé)解析APP的名,像我在test 里urls.py里寫的(如圖7)。第一個(gè)參數(shù)表示響應(yīng)的url,第二個(gè)參數(shù)表示處理的模塊。
(圖7)
第二層是解析到具體的模塊中的某個(gè)函數(shù)來(lái)響應(yīng)對(duì)應(yīng)的url。
比如在view app 中的urls.py(需要自己創(chuàng)建) 寫的(圖8)url(函數(shù)中第一個(gè)參數(shù)為匹配路徑,后一個(gè)是對(duì)應(yīng)函數(shù)名)里面的home對(duì)應(yīng)view app中的views.py 里的函數(shù)home
(圖9)
3.2靜態(tài)網(wǎng)頁(yè)配置
其實(shí)到這個(gè)時(shí)候已經(jīng)可以實(shí)現(xiàn)響應(yīng)了。(到這里還要解決一個(gè)問(wèn)題 'Index/home.html')在哪里呢?我們此時(shí)創(chuàng)一個(gè)文件夾叫templates html都應(yīng)該放在這里,Index 是一個(gè)模塊的名字。你可以在templates下面建很多個(gè)文件夾,對(duì)應(yīng)很多的APP模塊。(html就不屬于本文范疇了)此時(shí)目錄結(jié)構(gòu)為
(圖10)
搞定了后別忘記在test的setting 里加上一句代碼
(圖11)
"就是DIRS"里面.想想也是,不然 Django怎么知道我們的html放在這里呢。
4-邏輯層(也就是最后一步了,怎么樣把數(shù)據(jù)庫(kù)的東西查出來(lái),放到html中。)
4.1數(shù)據(jù)庫(kù)中的數(shù)據(jù)
往表里插兩條數(shù)據(jù)
(圖12)
4.2動(dòng)態(tài)顯示數(shù)據(jù)
看下代碼:html部分
(圖13)
里面的{%%}是django 自帶標(biāo)簽的自己看文檔學(xué)一下就會(huì)。
(圖14)
里面的Message.objects.all() 表示從Message表中取出所有數(shù)據(jù)。還有什么復(fù)雜查詢自己看文檔,一般都是filter exclude,django 還支持sql語(yǔ)句直接寫,函數(shù)名叫raw().
context就是返回給頁(yè)面的一個(gè)對(duì)象里面放了很多值。在python里叫字典(dict)
4.3啟動(dòng)服務(wù)器
最后我們用命令行來(lái)到我們的目錄,敲./manage.py runserver (要支持所有端口 和外網(wǎng)訪問(wèn)加0.0.0.0)。然后出現(xiàn)
(圖15)
4.4查看網(wǎng)頁(yè)
再到瀏覽器敲127.0.0.1:8000 django默認(rèn)端口 (圖16)
4.5實(shí)際開發(fā)中問(wèn)題
結(jié)果出來(lái)了。遇到具體問(wèn)題就是查一些文檔和stackoverflow。發(fā)現(xiàn)一個(gè)時(shí)區(qū)問(wèn)題,建議和我改成一樣。把test里面setting中的時(shí)區(qū)部分改成這樣。否則你會(huì)有八個(gè)小時(shí)的時(shí)差,
(圖17)
。還有啥問(wèn)題可以和我討論的可以留言。小弟也是剛做完這個(gè)項(xiàng)目從零開始。碼字不易~小問(wèn)題就不在這里說(shuō)了。
界面日志界面
管理界面
評(píng)論界面
使用的技術(shù)
python、JavaScript、CSS、htmlMySQL 數(shù)據(jù)庫(kù)jinja2 模板引擎Vue.js 界面框架Nginx Web服務(wù)器gunicorn WSGI服務(wù)器Supervisor 監(jiān)控服務(wù)進(jìn)程工具Fabric 自動(dòng)部署工具學(xué)習(xí)過(guò)程
剛開始跟著作者的教程編寫這樣一個(gè)博客網(wǎng)站的時(shí)候感覺很困難,因?yàn)樽约簩?duì)web上的很多概念不了解,對(duì)web服務(wù)器是怎么運(yùn)行也不清楚,所以不知道作者為什么要這么寫代碼。后來(lái)去學(xué)習(xí)了Django,知道了什么是ORM,什么是模板等一些概念后,并且能夠使用Django搭建一個(gè)網(wǎng)站,再跟著作者學(xué)習(xí)就輕松了一些,希望我的學(xué)習(xí)過(guò)程對(duì)你有啟發(fā)。當(dāng)然,如果你只想快速的搭建一個(gè)網(wǎng)站,可以使用Django、Flask等免費(fèi)開源的網(wǎng)站框架,而不用自己一步一步的去實(shí)現(xiàn)它。