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