django 01 web框架推導與django介紹
阿新 • • 發佈:2022-12-08
web框架推導
# 1.web框架是基於網際網路的web服務端 連線前端與資料庫的中間介質 # 2.學習web框架必備知識: 1.socket服務端程式碼 2.HTTP協>>>:四大特性 # 3.web框架可以根據路由的不同請求不同內容 路由指的是web開發中根據url分配到對應的處理程式 # 4.請求方式: get 朝服務端索要資料 post 超服務端提交資料 # 5.手寫的web框架缺點 1.socket程式碼過於重複 2.針對請求資料格式的處理複雜且重複3.針對不同路由的匹配太low了 # 6.程式碼
import socket server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(5) while True: sock, address = server.accept() data = sock.recv(1024) sock.send(b'HTTP/1.1 200 OK\r\n\r\nhello this is my wed') target_url = data.decode('utf8').split(' ')[1] if target_url == '/index': sock.send(b'index view') elif target_url == '/login': sock.send(b'login view') else: sock.send(b'404 error')
基於wsgiref模組改進
# 1.wsgiref模組介紹 wsgiref模組內部封裝了socket程式碼對請求資料的處理 # 2.模組的匯入 from wsgiref.simple_server import make_server# 3.封裝後的程式碼
from wsgiref.simple_server import make_server def run(request, response): """ :param request: 請求資料 :param response: 響應資料 :return: 返回給客戶端的資料 """ print(request) response('200 OK', []) # 固定程式碼無需掌握 return [b'hello big baby'] if __name__ == '__main__': # 任何訪問127.0.0.1:8080的請求都會給第三個引數加括號呼叫 server = make_server('127.0.0.1', 8080, run) server.serve_forever() # 永久啟動
# 4.缺點分析 - 後續如果新增新的網頁不便於管理,將程式碼進行封裝優化按照軟體開發目錄規範管理 - 程式碼:
from wsgiref.simple_server import make_server def index(request): return 'index' def login(request): return 'login' def error(request): return '404 not found' urls = ( ('/index',index), ('/login',login), ) def run(request, response): """ :param request: 請求資料 :param response: 響應資料 :return: 返回給客戶端的資料 """ response('200 OK', []) # 固定程式碼無需掌握 target_path = request.get('PATH_INFO') func_name = None for url_tp in urls: # ('/index',index), if url_tp[0] == target_path: func_name = url_tp[1] # 儲存匹配到的函式嗎,方便後續呼叫 break # 一旦匹配到內容直接結束for迴圈 # for迴圈結束後需要判斷func_name是否還為空, if func_name: res = func_name(request) else: res = error(request) return [res.encode('utf8')] # 統一編碼處理,函式返回字串操作更簡單 if __name__ == '__main__': # 任何訪問127.0.0.1:8080的請求都會給第三個引數加括號呼叫 server = make_server('127.0.0.1', 8080, run) server.serve_forever() # 永久啟動
# 5.軟開管理規範 - 根據py檔案中功能的不同劃分到不同的py檔案(模組化) urls.py 對應關係 views.py 功能函式 start.py 啟動檔案 templates資料夾 儲存html
動靜態網頁
# 1.動態網頁 頁面上的資料是動態獲取的,來自後端傳入 # 2.靜態網頁 頁面的資料是死的,需要修改原始碼才能修改資料 # 3.通過後端程式碼實現前端展示後端所寫內容 1.通過檔案讀寫,在前端設定字串型別,在後端將字串進行替換 2.將字典傳遞給頁面內容,在頁面上通過jinja2模組模板語法對其進行操作
jinja2模板語法
# 1.jinja2模組下載 pip3 install jinja2 # 2.使用jinja2實現後端字典資料傳遞給前端,並且拿到其中一個鍵或值 - 後端程式碼:
from jinja2 import Template def get_dict(request): user_dict = {'id': 1, 'name': 'tom', 'age': 18, 'hobby': ['ring', 'run']} with open(r'templates/my01.html','r',encoding='utf8') as f: data = f.read() temp =Template(data) res = temp.render(data=user_dict) # 將字典傳遞給html頁面,頁面通過data就能獲取 return res
- 前端html內的:
<p>{{ data }}}</p>
# 3.jinja2模板語法(前端操作後端) - 1.字典取值(四種方式)
<h1>{{ data }}</h1> <h1>{{ data['name'] }}</h1> <h1>{{ data.get('pwd') }}</h1> <h1>{{ data.hobby }}</h1>
2.資料庫表單展示
{% for user in user_data %} <tr> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.age }}</td> </tr> {% endfor %}
前後端與資料庫聯動
# 步驟
1.前端瀏覽器訪問get_user
2.後端連線資料庫查詢use表中所有的資料
3.後端將資料傳遞到某個html頁面
4.前端弄好樣式,再發送給瀏覽器展示
{% 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框架 非同步非阻塞框架 該框架快到可以作為遊戲伺服器 缺陷:上手難度是三者最高的 # 4.fastapi框架、sanic框架、... 最近流行的
django簡介
# 1.版本問題 1.X:同步 1.11 2.X:同步 2.2 3.X:非同步 3.2 """無論使用什麼版本都可以 區別不大""" # 2.啟動注意事項 - 1.計算機名稱儘量不要有中文 - 2.專案中所有的py檔名儘量不要用中文 - 3.不同版本的python直譯器配合不同版本的django,會有一些報錯 """仔細查詢一下報錯資訊,裡面會提示你是哪個py檔案裡面的程式碼出錯,找到那一行程式碼,把逗號刪除即可""" - 4.一個pycharm視窗只允許有一個專案 不要做專案的巢狀
django使用
# 1.下載 pip3 install django 預設最新版 pip3 install django==版本號 指定版本 pip3 install django==2.2.22 pip下載模組會自動解決依賴問題(會把關聯需要用到的模組一起下了) # 2.驗證django是否下載成功 cmd終端輸入django-admin # 3.cmd命令操作 - 1.建立django專案 django-admin startproject 專案名 - 2.啟動django專案 1.先切換到專案目錄下 cd 專案名 2.執行啟動目錄 python38 manage.py runserver ip:port # ip:port 本機可不寫 - 3.訪問django服務端 瀏覽器直接訪問 - 4.建立app應用 python38 manage.py startapp 應用名 """ django框架類似於是一個空殼子 給你提供所需的資源,至於到底要寫哪些功能 需要通過建立app來劃分 eg:django初始專案可以看成是一所大學,app就相當於是大學裡面的各個學院 """ # 4.pycharm操作(new project>>>django(滑鼠控制)) 在啟動django專案的時候,一定要確保一個埠只有一個專案。 # 5.命令列與pycharm操作的區別 - 1.命令列不會自動建立templates資料夾 - 2.命令列不會在配置檔案編寫關於templates資料夾的配置 """'DIRS': [os.path.join(BASE_DIR, 'templates')]""" - 3.pycharm自動建立的第一個應用會自動註冊到配置檔案中 - 4.針對db.sqlite3檔案不用去在乎它有沒有建立 只要運行了django會自動出來
django目錄結構
# 1. 專案同名資料夾 1. __init__.py 很少用 主要做一些冷門配置 2. settings.py 專案配置檔案 3. urls.py 對應關係(目前簡單的理解:網址字尾跟函式名) 4. wsgi.py django服務 基本不用 5. manage.py django入口檔案 # 2. templates資料夾 儲存專案所需的html檔案 # 3. 應用名資料夾(可以有多個) 1. migrations資料夾 orm相關(資料庫打交道的記錄) 2.__init__.py 很少用主要做一些冷門配置 3.admin.py django自帶的後臺管理 4.apps.py 建立應用之後用於應用的註冊 5.models.py 儲存與資料庫表相關的類 6.tests.py 自帶的測試檔案 7.views.py 儲存業務相關的邏輯程式碼(函式、類) # 4.db.sqlite3 自帶的小型資料庫
# 5.重要知識
urls.py 路由層
views.py 檢視層
templates 模板層
models.py 模型層
# 6.匯入方式
from django.template import Template, TemplateDoesNotExist """django一般會自己建立該模組,建議缺什麼補什麼"""
django三板斧
# 1.匯入 from django.shortcuts import render,HttpResponse,redirect """ HttpResponse 返回字串型別的資料 render 返回html頁面並且支援傳值 redirect 重定向 """