Django入門(一)   啓動Django

    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的文件夾

wKiom1bdhe3BVVXIAAAifxbdbkA617.png

子文件夾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目錄

wKiom1bdjOPgVxVnAAAodpVVgKE411.png

在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), 
]

wKioL1bdlYqxQ7esAABl9t7nyno262.png


下一步去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')

wKiom1bdl9LDdfBiAABJsaGKJvo032.png


第三步,就是通過命令行啓動django自帶的小型web server來測試我們的代碼是否能夠正常運行

python manage.py runserver 127.0.0.1:8009

默認啓動的服務端口是8000,這裏我手動指定了一個8009端口

現在去瀏覽器查看一下web是否正常啓動了

wKioL1bdmL3AW3xEAABW2Hj1RGI509.png

如果看到了這個頁面,就說明web server已經啓動了。我們在後面追加上指定的路徑/index看看

wKioL1bdmUiDwLELAABHKBChFp8186.png


這樣我們就使用django成功的響應了一個用戶對xxx.xxx.xxx/index這個url的訪問請求。但是通過Httprespons()這個方法返回一個字符串顯然是不夠的。我們需要將指定的html頁面返回給用戶怎麼辦呢?

這時候我們需要先在項目裏額外創建一個templates文件夾,將我們想呈現的html文件寫到這個文件夾裏。

wKioL1bdnXuxlMCVAAAdKCCAbr8281.png

置於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>

wKiom1bdnbqz3JrCAABIgM0xh3Y812.png

我們憑空創建了一個新的templates文件夾並且還在裏面創建了一個文件,但這些操作django程序是不知道的。因此我們需要修改子目錄mydjango下面的全局配置文件settings.py,從而是django知道我們的對項目的變動。


先找到INSTALL_APPS的內容,最下面將我們創建的app01應用追加進去,注意最後要的逗號別忘記加上

wKioL1bdoFuisGoMAABYUIgMbUM186.png

然後找到TEMPLATES的內容,在DIRS一項中添加

'DIRS': [os.path.join(BASE_DIR,'templates'),],

注意小括號後面的還有個一個逗號,千萬別忘記了

wKioL1bdooSx6qf4AACO1ZFRzrM629.png如果settings.py文件還有類似紅色框體中的配置,要記得註釋掉。這種註冊templates的方式是django 1.7版本以前的方式。在1.8及以後的版本中被廢棄了

wKiom1bdotiyjVNoAADDsKtyRs4758.png

最後一步就是去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)

wKiom1bdpYiywB7eAABgGfJ0Ee0479.png

打開瀏覽器測試的結果

wKiom1bdpcfBE2XeAABNfP1XKgI544.png

可以看到,現在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文件名就可以了。

wKiom1bdqhqwtHVcAAArlecU5TQ980.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章