1. 程式人生 > 其它 >web框架、django基本使用

web框架、django基本使用

今日內容總結

web框架

web框架的本質

	理解1:連線前端與資料庫的中間介質
	理解2:socket服務端

手寫web框架

	1.編寫socket服務端程式碼
	2.瀏覽器訪問響應無效>>>:HTTP協議
 	3.根據網址字尾的不同獲取不同的頁面內容
 	4.針對使用者輸入不同的路由而進行不同的操作>>>:請求資料
 	5.請求首行
    	GET請求	朝別人索要請求
     	POST請求	朝別人提交資料
    6.處理請求資料獲取網路字尾

wsgiref模組

在寫web框架以及客服端等之類的編寫時 需要反覆寫socket模組的那幾行程式碼 便有了wsgiref模組
# wsgiref模組是一個內建模組 是大多數web框架底層使用的程式碼
	功能1:封裝了socket程式碼
 	功能2:處理了請求資料
        
#使用
1.固定程式碼啟動服務端
2.檢視處理之後的request大字典
3.根據不同的網址字尾返回不同的內容>>>:研究大字典的鍵值對
4.處理了手寫web中socket程式碼太過於重複 以及資料的處理問題
5.針對最後一個問題程式碼如何優化

程式碼封裝優化

1.網路字尾的匹配問題
2.每個字尾匹配成功後執行的程式碼有多有少
	麵條版 函式版 模組版
3.將分支的程式碼封裝成一個個函式
4.將網址字尾與函式名做對應關係
5.獲取網址字尾迴圈匹配
6.想要新增新的功能新增一個函式然後新增對應的關係就行
7.根據不同的功能拆分成不同的py檔案
	views.py		儲存核心業務邏輯(功能函式)
 	urls.py			儲存網址字尾與函式名對應關係
 	templates目錄    儲存html頁面檔案
8.為了使函式體程式碼中業務邏輯有更多的資料可用
	將request大字典傳給這個函式

動靜態網頁

動態網頁
	頁面資料來源於後端
靜態頁面
	頁面的資料直接寫死
    
    1.訪問某個網址字尾 後端程式碼獲取當前時間 並將該時間傳到html檔案上再返回給瀏覽器展示給使用者看
	讀取html內容(字串型別) 然後利用字串替換 最後再返回給瀏覽器
    2.將字典傳遞給頁面內容 並且在頁面上還可以通過類似於後端的操作方式操作該資料
    模板語法>>>:jinja2模組

jinja2模組

jinja2是外部模組
#程式碼實操:
pip3 install jinja2    #  下載模組


from jinja2 import Template 


def get_dict_func(request):
    user_dict = {'name': 'xiaochen', 'age': 19, 'person_list': ['阿珍', '阿強', '阿香', '阿紅']}
    with open(r'templates/get_dict_page.html', 'r', encoding='utf8') as f:
        data = f.read()
    temp_obj = Template(data)  # 將頁面資料交給模板處理
    res = temp_obj.render({'d1': user_dict})  # 給頁面傳了一個 變數名是d1值是字典資料的資料
    return res

<p>{{ d1 }}</p>
<p>{{ d1.name }}</p>
<p>{{ d1['age'] }}</p>
<p>{{ d1.get('person_list') }}</p>
#可以通過字典的內建方法來操作字典的資料 jinja2是最貼近python的

前端、後端、資料庫的三者聯動

前端瀏覽器範文get_user 後端連線資料庫查詢use表中所有的資料 傳遞某個html頁面 再發送給瀏覽器展示

{% for user_dict in user_data_list %}
    <tr>
        <td>{{ user_dict.id }}</td>
        <td>{{ user_dict.name }}</td>
        <td>{{ user_dict.age }}</td>
    </tr>
{% endfor %}

python主流web框架

1.django
	大而全 自身自帶的功能元件十分多
2.flask
	小而精 自身自帶的功能元件十分的少
 	幾乎所有的功能都需要依賴於第三方的模組
3.tornado
	非同步非阻塞 速度極快 效率也極高 甚至可以充當遊戲的服務端
    

django簡介

1.版本問題
		django1.X:同步		1.11
		django2.X:同步		2.2
 		django3.X:支援非同步    3.2
 		django4.X:支援非同步	   4.2
	ps:版本之間的差異其實不大 主要是添加了額外的功能
#不同python直譯器針對不同版本的django是需要注意的
Django版本 python版本
2.2 3.5、3.6、3.7、3.8(在2.2.8中新增)、3.9(2.2.17)中新增
3.1 3.6、3.7、3.8、3.9(在3.1.3中新增)
3.2 3.6、3.7、3.7、3.9、3.10(在3.2.9中新增)
4.0、4.1 3.8、3.9、3.10
2.執行django注意事項
	django的專案命名中不要出現中文式命名
	計算機的名稱也儘量別輸入中文

django基本使用

1.下載
	pip install django		  # 下載最新版
 	pip	install	django==版本號	# 下載指定版
  pip下載模組會自動解決依賴問題(會把關聯需要用到的模組一起下了)
2.驗證
	django-admin
3.常見命令
	建立django專案
    	django-admin startproject 專案名
     啟動django專案
    	cd 專案名
     	python mange.py runserver ip:port
4.pycharm自動建立django專案
	會自動建立templates資料夾 但是配置檔案中可能會報錯
    	#[os.path.join(BACE_DIR,'templates'),]

django app的概念

django裡面的app類似於某個具體的功能模組

django裡面的app類似於某個具體的功能模組
	user	app 所有使用者相關的都寫在user app下
 	goods	app 所有商品相關的都寫在goods app下
  
命名行建立應用
	python manage.py startapp 應用名
pycharm建立應用
	新建django專案可以預設建立一個 並且自動註冊
'''
建立的app以及手動寫入的templates都需要去註冊 不然無法識別使用
INSTALLED_APPS = [
    	'app01.apps.App01Config',
		'app02'
	]
'''

django主要目錄結構

#django專案目錄名
	1.djangpo專案同名目錄
    	settings.py		配置檔案
    	urls.py		    儲存網址字尾與函式名對應關係(不嚴謹)
        wsgi.py			wsgiref閘道器檔案
    2.db.sqlite3檔案	   django自帶的資料庫(專案啟動才有)
  	3.manage.py		檔案入口(命名提供)
    4.應用目錄
    	migrations目錄	儲存資料庫相關記錄
     	admin.py		 django內建的admin後臺管理功能
     	apps.py			 註冊app相關
     	models.py		 與資料庫打交道的
    	tests.py		 測試檔案
      	views.py		 儲存功能函式
    5.templates目錄		儲存html檔案(命名行不會自動建立)
    	#記得先配置路徑

  	一些相關名詞
        '''
       	網路字尾			路由
       	函式			檢視函式
       	類			檢視類
       	
       	urls.py				路由層
       	views.py			檢視層
       	models.py			模型層
       	templates			模板層
        '''

django的三板斧

from django.shortcuts import render,HttpResponse,redirect

HttpResponse		返回字串型別的資料

render				返回html頁面並且支援傳數值

redirect			重定向