Django是一個python流行的web框架,什麼框架呢?在我理解web框架就是用來處理用戶訪問url的一套模板。但是這個框架不是運維上所謂的web發佈容器。像我們熟知的nginx、apache等是web發佈容器。說白了就是放着web頁面的代碼。讓用戶的瀏覽器可以直接訪問進來。例如用戶訪問的www.abc.com的時候,會先把請求發送給web容器。但是web容器並不知道接收到www.abc.com這個url之後該怎麼辦。所以它需要把這個url交給web框架,由web框架來決定接收到url之後返回給客戶怎樣的數據。
同樣作爲web框架,其實還有Tornado、Flask 等多種框架。但是被大家廣爲使用的還是Django,因爲它支持幾乎所有的特性。使用範圍非常的廣泛。
Django的安裝
爲了快速的安裝這裏我就使用pip方式,快速進行安裝。在命令行模式下運行如下命令
pip install django
這樣就可以自動安裝最新版的Django軟件了。
安裝完成之後,進入python交互模式。導入django,如果能夠輸出版本號就說明django已經安裝完成了
>>> import django >>> django.VERSION (1, 9, 2, 'final', 0)
創建第一個django項目
退出python的交互模式,進入到想要創建django項目的目錄執行如下代碼
django-admin startproject mydjango #創建項目
如果執行正確的話,將不會出現任何提示。這時候進入pycharm的話。可以看到創建了一個叫做mydjango的
目錄裏面包含了一個叫做manager.py的文件和一個也叫做mydjango的文件夾
子文件夾myjango裏的各個py文件其實就是,project項目mydjango的總控制文件。
settings.py 裏面設置的就是整個項目的各個參數。例如選用的是哪種數據庫,數據庫的連接地址和用戶名密碼信息。還有註冊了哪些app,引用了哪些模板(templates)等等。反正就是整個項目的核心配置都是在這個文件裏配置的。
urls.py 用於將用戶的發來的url請求與對應的html頁面或者對應的函數進行綁定。比如用戶訪問url:127.0.0.1/index 一般後臺就會用index.html這個文件來相應這個請求。那爲什麼是index.html而不是xxx.html?其實到底用哪個頁面迴應都是可以根據我們的意願來定義的。在django中就是在urls.py這個文件裏來處理。
wsgi.py 這個文件的作用以後再說。
下面重點說一下manager.py文件。當我們的項目創建好之後,其實django還不能工作。項目只是一個大的容器,真正將頁面呈現給大家的是容器裏面的應用(app)。這就好比一個網站有很多的個模塊組成,有的模塊負責首頁的內容,有的模塊負責後臺用戶管理的內容等。這裏每個模塊其實就可以看成是一個應用app。每個應用都相互獨立,都放在項目容器裏之後這個網站就完整的呈現出來了。但是每個app又都可以單獨的拿出來分給不同的人來做開發。這些app的創建就是由manager.py這個文件來完成。現在在使用命令行在mydjango項目內創建一個app出來
python manage.py startapp app01
順利執行的話也將沒有任何提示。但是在pycharm裏就可以看到,在mydjango項目目錄下現在又多了一個app01目錄
在app01目錄下我們可以看到又出現了很多的py文件。現在我們最先要關注的就是views.py視圖這個文件。
這個文件是配合剛纔提到的子目錄mydjango下面urls文件使用。urls裏面定義的是用戶訪問來的url請求會調用哪個函數來處理。而且這個這個被調用函數的內容到是什麼就需要在對應的views裏面來定義了。具體的操作一會兒會說。
創建第一個頁面
我們假設用戶現在的請求是要訪問127.0.0.1/index這個url,那麼根據剛纔的介紹我們需要首先子目錄mydjango下面urls
urls.py
from django.conf.urls import url from django.contrib import admin #先引用app01裏面的views,否則django不知道去哪兒找對應的函數 from app01 import views urlpatterns = [ #第一admin是默認自帶的url解析 url(r'^admin/', admin.site.urls), '''定義xxx.xxx.xxx/index這個url的請求調用 app01中的views裏面index()函數來處理。 注意這裏只需要寫函數名就好了,不用加 ()號。切記!!每一行定義一個url必須在 最後加個逗號。 ''' url(r'^index/', views.index), ]
下一步去app01裏的views裏定義函數index()
views.py
from django.shortcuts import render # 使用HttpResponse方法相應用戶的url請求 from django.shortcuts import HttpResponse # Create your views here. ''' 定義的函數括號了至少要寫一個request參數,這個參數就相當於 面向對象裏的self ''' def index(request): # 通過HttpResponse將字符串內容返回給用戶瀏覽器 return HttpResponse('first web')
第三步,就是通過命令行啓動django自帶的小型web server來測試我們的代碼是否能夠正常運行
python manage.py runserver 127.0.0.1:8009
默認啓動的服務端口是8000,這裏我手動指定了一個8009端口
現在去瀏覽器查看一下web是否正常啓動了
如果看到了這個頁面,就說明web server已經啓動了。我們在後面追加上指定的路徑/index看看
這樣我們就使用django成功的響應了一個用戶對xxx.xxx.xxx/index這個url的訪問請求。但是通過Httprespons()這個方法返回一個字符串顯然是不夠的。我們需要將指定的html頁面返回給用戶怎麼辦呢?
這時候我們需要先在項目裏額外創建一個templates文件夾,將我們想呈現的html文件寫到這個文件夾裏。
置於index.html的文件內容我們可以隨便寫點就可以了
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>first index.html</h1> </body> </html>
我們憑空創建了一個新的templates文件夾並且還在裏面創建了一個文件,但這些操作django程序是不知道的。因此我們需要修改子目錄mydjango下面的全局配置文件settings.py,從而是django知道我們的對項目的變動。
先找到INSTALL_APPS的內容,最下面將我們創建的app01應用追加進去,注意最後要的逗號別忘記加上
然後找到TEMPLATES的內容,在DIRS一項中添加
'DIRS': [os.path.join(BASE_DIR,'templates'),],
注意小括號後面的還有個一個逗號,千萬別忘記了
如果settings.py文件還有類似紅色框體中的配置,要記得註釋掉。這種註冊templates的方式是django 1.7版本以前的方式。在1.8及以後的版本中被廢棄了
最後一步就是去app01應用中修改views.py中index()函數的定義了,這次我們指定函數不在是返回一個字符串而且是讀取templates目錄下的index.html的內容。並將讀取的內容通過HttpRespons()方法返回給客戶端,具體的代碼如下:
views.py
from django.shortcuts import render from django.shortcuts import HttpResponse # Create your views here. def index(request): with open('templates/index.html') as f: content=f.read() return HttpResponse(content)
打開瀏覽器測試的結果
可以看到,現在django已經可以順利的將整個html的內容讀取給用戶了。但是沒讀取一個html都要用open方法讀取內容太過麻煩了。其實django已經給我們集成了方法一個讀取html文件的方法,這個方法就是render()。而且這個方法默認就是被導入到views.py裏面的。所以我們只需要將index()的方法再稍作修改就可以實現和上面的一樣的功能了。
最終的views.py
from django.shortcuts import render # Create your views here. def index(request): return render(request,'index.html')
就是這樣,一句話就完成了將index.html頁面的內容返回給用戶的功能。因爲已經在setting裏配置過TEMPLATES的路徑,所以在render()方法裏直接寫html文件名就可以了。