1. 程式人生 > >Django之初始廬山真面目

Django之初始廬山真面目

反向 元素 渲染 join 類型 慢慢 說過 hosts clu

Django可以說是基於Python語言的一款非常成熟的框架,其功能之強大,應用之廣泛,開發之便捷,可以說每一個細節都值得一贊

最重要的是,Django其實是我們學習Python過程中非常重要的部分之一,可以說Django學會70%那麽找工作應該是不在話下了,學會80%找一份不錯的工作是可以了,學會90%找一份滿意的工作就足夠了!

當然學習Django也不能太過激進,一夜之間並不能學會,也是靠之後慢慢研究,細心鉆研,才能有更多更好的收貨

現階段先明白Django的運作原理,是首當其沖的任務.

在開始之前,請在心中默念3次我們的口號:

Django要學會,對得起學費
Django要學好,工作不難找
Django要學精,工資決不輕

---------------------------Let‘s Go---------------------------

那麽請跟著我,咱們來一探Django的廬山真面目(基本運作原理):

Django的基本運作原理並不難,但是前提你要先理解什麽是"請求","接收","響應","返回"這裏說的有點啰嗦,但是也一定要強調這些,理解了它們,再去學Django,那就是平步青雲,行雲流水

"請求":由客戶端向服務器端發起"請求"

"接收":服務器端收取客戶端發來的"請求"

"響應":服務器端對"接收"來的客戶端"請求"進行處理

"返回":由服務器端向客戶端發起"返回"

以上就是簡單的概念,再之後的講解中會逐一擊破!

Django就是基於這四點要素進行運作的,客戶端就是PC上的瀏覽器,向服務器發起一個訪問請求,服務器收到訪問請求之後,找到客戶端想要訪問的頁面,將頁面進行處理返回給客戶端(如圖)

技術分享

怎麽樣,是不是理解起來並不難,有了初步的概念就可以往下進行了,可是等到了實際應用起來就會繞來繞去,自己把自己弄得稀裏糊塗

---------------------------廢話不多說Django項目走一遭---------------------------

首先要先有一個Django模塊,這裏就不做過多的闡述了

使用命令創建Django:

django-admin startproject sitename

這裏一定要註意,你想將Django創建在哪個目錄就一定要在該目錄下執行上述命令

技術分享

當然如果你不想記住這些繁瑣的命令,你也可以使用pycharm內置的創建Django項目功能,來創建,但這個功能的內部實際上也是又命令完成的,只不過它幫你自動完成了,你感知不到

技術分享

一點創建,pycharm就會為我們創建自己的Django項目了並且還會幫我打開

技術分享

剛剛見到新的Django項目是否一臉懵逼狀呢?別慌別懵逼,龍哥帶你開飛機:

與項目同名的目錄:工程目錄-用於存放配置文件,路由文件等相關

技術分享

__init__.py:
項目工程目錄加載時執行的py腳本,可以用於更改環境變量等等

settings.py:
項目配置文件,這個文件老厲害了,如果沒有這個文件整個Django項目運行就會崩潰,甚至說根本無法運行,配置文件在接下來會重點說一下

urls.py:
Django的路由文件,利用正則解析URL地址得到匹配的,視圖函數(稍後會著重)

wsgi.py:通訊協議配置文件,在settings.py中WSGI_APPLICATION配置指向這個文件,而這個文件默認是使用get_wsgi_application來調用WSGI協議
settings:WSGI_APPLICATION = ‘project.wsgi.application‘
wsgi:application = get_wsgi_application()

技術分享

template文件夾:
用於存放可以被渲染的模板文件(html文件)

技術分享

manager.py:
顧名思義這裏Django的管理文件,用於執行對Django項目的操作,比如新建app,建立moudels等

之後再研究一下settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))):
和咱們平時寫代碼一樣一樣的,首先我要拿到我當前項目所在的絕對路徑,這裏就是拿到項目的絕對路徑

SECRET_KEY:
提供算法的隨機字符串(暫時不知道用途)

DEBUG:
是否啟用調試模式,如果是True的話,頁面報錯會將錯誤信息打印在頁面中,如果是False的話,錯誤信息不回打印到頁面中,而如果頁面出錯,則會彈出Django默認的錯誤頁面

ALLOWED_HOSTS=[]:
綁定域名,如果不使用此域名,是無法訪問的

INSTALLED_APPS:
所註冊的應用,如果有新創建的app,必須在此處進行註冊,才可以進行後續的models操作

MIDDLEWARE:
所註冊的中間件,這裏就是在請求到達視圖函數之前,所需要經歷的所有中間件

ROOT_URLCONF= ‘StudentManager.urls‘:
根路由文件指向,當Django需要路由指向時,會讀取這個參數

TEMPLATES:
模板相關配置,這裏面關註DIRS就可以了,它是Django識別模板目錄的配置
‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)],
templates剛才咱們再上邊說過它是默認的模板路徑

WSGI_APPLICATION = ‘StudentManager.wsgi.application‘:
當前Django項目所使用的WSGI

DATABASES:
數據庫配置(字典),這裏面關註一下‘default‘(字典),它是用於配置Django所連接的數據庫,default是鏈接名稱,在Django項目中可以連接多個數據庫.這裏字典中的Key其實就是咱們在pymysql.connect中傳入的參數:

技術分享
mysqlDB: {
ENGINE: django.db.backends.mysql,數據庫驅動
NAME: "students",數據庫名稱
USER: "root",數據庫用戶名
PASSWORD: "123",數據庫密碼
HOST: "127.0.0.1",數據庫所在服務器地址
PORT: 8000,數據庫服務器端口
}
數據庫配置

AUTH_PASSWORD_VALIDATORS:看名字就知道,這個是用來做密碼驗證的。
比如當你運行mange.py createsuperuser 時,輸入的密碼必須滿足以上的條件。

LANGUAGE_CODE = ‘en-us‘
語言
TIME_ZONE = ‘UTC‘
時區
USE_I18N = True
是否國際化
USE_L10N = True
是否本地化

STATIC_URL:
映射到靜態文件的URL路徑,一般咱們默認為"/static/"
STATICFILES_DIRS:
元組類型,這裏面存放的每一個元素都是URL路徑用於,放各個app的static目錄及公共的static目錄,這裏一定要在每個元素的後面加上","否則會報錯的

今後的項目中,每一個APP中都要有一個static,都要配置到STATICFILES_DIRS中
很重要,不能錯,怎麽記?
靜態文件們的目錄們

還有一個尤為重要的文件跟路由配置文件urls.py

settings文件中已經提到了一個配置ROOT_URLCONF,跟路由,這個文件就是配置中的指向

urlpatterns:
url(r^index$, views.index),

這個列表中存放著多個url函數,url函數裏面是什麽,regex,view

這樣的話,我們就可以理解為,url幫我們做的事情,就是當匹配到某字符串之後,執行某方法

當然這裏還有regex,view,kwargs,name參數,我們來逐一看一下
regex,正則表達式
view,視圖函數
kwargs,看起來是一個字典,沒錯這裏面是額外參數,但是在你的視圖函數中需要一個**kwargs來接收,否則會在拋出來一個,異常參數的錯誤
name,視圖函數匿名,可以在模板中使用{% url "name" 參數 %}的方式來調用URL,這種調用url的方式可以有效避免掉一些惡意產生的"死地址",這種死地址可能會造成頁面的崩潰

接下來,看一下:regex中的正則匹配方式:
第一種,標準規範化的單一路由對應

url(r^index$, views.index),

第二種,正則參數url路由

url(r^index/(\d*), views.index),
url(r^manage/(?P<name>\w*)/(?P<id>\d*), views.manage),

第三種,正則外的參數

url(r^index/$, index.Index.as_view(),{"name":"sb"}),

第四種,匿名url

url(r^index/$, index.Index.as_view(),name="a")

第五種,匿名反向URL

技術分享
1.url(r^index/$, index.Index.as_view(),name="a")
{% url "a" %}
reverse("a")
2.url(r^index/(\w+)/$, index.Index.as_view(),name="a")
{% url "a" 1 %}
reverse("a",args=(123,))
3.url(r^index/(?P<name>\w*)/(?P<id>\w*), index.Index.as_view(),name="a"),
{% url "a" 1 %}
reverse("a",kwargs={"name":"a","id":"b"})
匿名反向url

路由分發:
url(r‘^social/‘, include("Social.urls")),
但凡遇到social/的url被正則匹配到,都要去Social.urls中,進行重新定向
但是這裏要註意的是,social已經被匹配走了,剩下的就是social/之後的內容
如:social/this/ 被定向到 Social.urls 中,就剩下了this/,所以在匹配時應註意

Django之初始廬山真面目