Django之初始廬山真面目
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之初始廬山真面目