中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

南京做機(jī)床的公司網(wǎng)站智能優(yōu)化大師下載

南京做機(jī)床的公司網(wǎng)站,智能優(yōu)化大師下載,北京網(wǎng)站維護(hù)一般價(jià)格多少,搜索欄在wordpress菜單上位置【一】基礎(chǔ)知識(shí)點(diǎn) 【1】web框架的本質(zhì) Web框架本質(zhì)上可以看成是一個(gè)功能強(qiáng)大的socket服務(wù)端用戶的瀏覽器可以看成是擁有可視化界面的socket客服端兩種通過(guò)網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)數(shù)據(jù)交互 【2】瀏覽器發(fā)送請(qǐng)求 (1)HTTP協(xié)議 HTTP協(xié)議是超文本傳輸協(xié)議&#xff…

【一】基礎(chǔ)知識(shí)點(diǎn)

【1】web框架的本質(zhì)

  • Web框架本質(zhì)上可以看成是一個(gè)功能強(qiáng)大的socket服務(wù)端
  • 用戶的瀏覽器可以看成是擁有可視化界面的socket客服端
  • 兩種通過(guò)網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)數(shù)據(jù)交互

【2】瀏覽器發(fā)送請(qǐng)求

(1)HTTP協(xié)議

  • HTTP協(xié)議是超文本傳輸協(xié)議,用于規(guī)定服務(wù)器和瀏覽器之間數(shù)據(jù)交互的格式。

(2)HTTP四大特性

  • 基于請(qǐng)求-響應(yīng)模式:客戶端發(fā)送請(qǐng)求,服務(wù)器返回響應(yīng)。
  • 基于TCP/IP之上:作用于應(yīng)用層之上的協(xié)議。
  • 無(wú)狀態(tài):HTTP協(xié)議本身不保存用戶的信息,每個(gè)請(qǐng)求都是獨(dú)立的。為了記錄用戶狀態(tài),出現(xiàn)了一些技術(shù),如cookie、session和token。
  • 無(wú)/短鏈接:HTTP 1.0默認(rèn)使用短鏈接,即請(qǐng)求-響應(yīng)后立即斷開(kāi)連接。HTTP 1.1支持長(zhǎng)鏈接,即雙方建立連接后不會(huì)立即斷開(kāi),如WebSocket。

(3)HTTP協(xié)議格式

  • 請(qǐng)求數(shù)據(jù)格式
    • 請(qǐng)求首行:標(biāo)識(shí)HTTP協(xié)議和當(dāng)前請(qǐng)求方式。
    • 請(qǐng)求頭:多組鍵值對(duì),包含請(qǐng)求的附加信息。
    • 空行:用于分隔請(qǐng)求頭和請(qǐng)求體。
    • 請(qǐng)求體:并非所有請(qǐng)求都有,主要用于存放POST請(qǐng)求提交的敏感數(shù)據(jù)。
  • 響應(yīng)數(shù)據(jù)格式
    • 響應(yīng)首行:標(biāo)識(shí)HTTP協(xié)議、當(dāng)前請(qǐng)求方式和響應(yīng)狀態(tài)碼。
    • 響應(yīng)頭:多組鍵值對(duì),包含響應(yīng)的附加信息。
    • 空行:用于分隔響應(yīng)頭和響應(yīng)體。
    • 響應(yīng)體:返回給瀏覽器展示給用戶的數(shù)據(jù)。

(4)狀態(tài)碼

  • 1xx信息性狀態(tài)碼:請(qǐng)求已被接收,服務(wù)器正在處理
  • 2xx成功狀態(tài)碼:請(qǐng)求已被服務(wù)器接收、理解和處理
  • 3xx重定向狀態(tài)碼:表示需要進(jìn)一步操作完成請(qǐng)求,移動(dòng)到了新的URL
  • 4xx客戶端錯(cuò)誤狀態(tài)碼:客戶端發(fā)送的請(qǐng)求錯(cuò)誤
  • 5xx服務(wù)器錯(cuò)誤狀態(tài)碼:服務(wù)器在處理請(qǐng)求時(shí)發(fā)生了錯(cuò)誤

【3】動(dòng)、靜態(tài)網(wǎng)頁(yè)

(1)靜態(tài)網(wǎng)頁(yè)

  • 介紹:

    • 靜態(tài)網(wǎng)頁(yè)是指在服務(wù)器上事先準(zhǔn)備好的網(wǎng)頁(yè)文件,其內(nèi)容在用戶訪問(wèn)時(shí)不會(huì)發(fā)生變化。靜態(tài)網(wǎng)頁(yè)通常由HTML、CSS和JavaScript等靜態(tài)資源組成。
  • 特點(diǎn):

    • 內(nèi)容固定不變:靜態(tài)網(wǎng)頁(yè)的內(nèi)容在服務(wù)器上生成,并在用戶訪問(wèn)時(shí)以相同的形式呈現(xiàn)。

    • 簡(jiǎn)單易部署:靜態(tài)網(wǎng)頁(yè)不需要服務(wù)器端的動(dòng)態(tài)處理,部署和維護(hù)相對(duì)簡(jiǎn)單。

    • 性能高效:由于沒(méi)有動(dòng)態(tài)處理的開(kāi)銷,靜態(tài)網(wǎng)頁(yè)加載速度較快。

  • 示例:

    • 一個(gè)靜態(tài)網(wǎng)頁(yè)的示例可以是一個(gè)展示公司產(chǎn)品信息的網(wǎng)頁(yè),其中包含公司的介紹、產(chǎn)品列表和聯(lián)系方式等信息。
    • 還有錯(cuò)誤頁(yè)面等error.html

(2)動(dòng)態(tài)網(wǎng)頁(yè)

  • 介紹:

    • 動(dòng)態(tài)網(wǎng)頁(yè)是指在用戶訪問(wèn)時(shí)通過(guò)服務(wù)器端的動(dòng)態(tài)處理生成的網(wǎng)頁(yè),內(nèi)容可以根據(jù)用戶的請(qǐng)求和其他條件而變化。
  • 特點(diǎn):

    • 內(nèi)容可變:動(dòng)態(tài)網(wǎng)頁(yè)的內(nèi)容可以根據(jù)用戶的請(qǐng)求、數(shù)據(jù)庫(kù)查詢結(jié)果、用戶狀態(tài)等動(dòng)態(tài)生成。

    • 復(fù)雜交互:動(dòng)態(tài)網(wǎng)頁(yè)可以支持更復(fù)雜的用戶交互,如表單提交、數(shù)據(jù)驗(yàn)證、用戶登錄等。

    • 數(shù)據(jù)庫(kù)和后端處理:動(dòng)態(tài)網(wǎng)頁(yè)通常需要與數(shù)據(jù)庫(kù)進(jìn)行交互,并由服務(wù)器端的程序處理用戶請(qǐng)求。

  • 示例:

    • 一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)的示例可以是一個(gè)在線商城,用戶可以瀏覽商品、添加到購(gòu)物車、下訂單等操作,而這些操作都需要與服務(wù)器端進(jìn)行交互并動(dòng)態(tài)生成網(wǎng)頁(yè)內(nèi)容。

(3)總結(jié)

  • 靜態(tài)網(wǎng)頁(yè)是事先準(zhǔn)備好的內(nèi)容固定的網(wǎng)頁(yè),部署簡(jiǎn)單且加載速度快
  • 動(dòng)態(tài)網(wǎng)頁(yè)是根據(jù)用戶請(qǐng)求和服務(wù)器端處理生成的網(wǎng)頁(yè),內(nèi)容可變且支持復(fù)雜的交互操作。

【一】socket服務(wù)端搭建

【1】模板

(1)基礎(chǔ)模板

  • 在web中輸入127.0.0.1

  • 無(wú)法看任何信息

  • 因?yàn)闆](méi)有按照HTTP協(xié)議傳輸內(nèi)容

import socket# 創(chuàng)建socket對(duì)象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 避免重啟后端口被占用
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 監(jiān)聽(tīng)端口
server.bind(("127.0.0.1", 8080))
# 創(chuàng)建半連接池
server.listen(5)while True:# 等待連接conn, addr = server.accept()# 接收數(shù)據(jù)recv_data = conn.recv(1024).decode('utf8')print(f"recv:>>>{recv_data}")# 二級(jí)制數(shù)據(jù)http_data = b"HTTP1.1 200 ok \r\n\r\n"data = b"hello world"# 發(fā)送數(shù)據(jù)conn.send(http_data + data)

(2)web端可以看到信息版

  • 按照HTTP協(xié)議格式發(fā)送
    • 響應(yīng)首行 響應(yīng)頭 空行 響應(yīng)體
import socket# 創(chuàng)建socket對(duì)象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 避免重啟后端口被占用
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 監(jiān)聽(tīng)端口
server.bind(("127.0.0.1", 8080))
# 創(chuàng)建半連接池
server.listen(5)while True:# 等待連接conn, addr = server.accept()# 接收數(shù)據(jù)recv_data = conn.recv(1024).decode('utf8')print(f"recv:>>>{recv_data}")# 響應(yīng)首行 響應(yīng)頭 空行http_data = b"HTTP1.1 200 ok \r\n\r\n"# 二級(jí)制數(shù)據(jù)send_data = b"hello world"# 發(fā)送數(shù)據(jù)conn.send(http_data + send_data)

【2】任務(wù):接收瀏覽器信息

  • 在web中輸入任意字符串
    • 在socket中找到這個(gè)字符串
  • 示例:127.0.0.1:8080/index
    • 拿到index
  • 示例:127.0.0.1:8080/home
    • 拿到home
  • 將服務(wù)端按照空格切分,發(fā)現(xiàn)是第二個(gè)數(shù)據(jù)
    • 所以通過(guò)recv_data.split(' ')[1]可以拿到
import socket# 創(chuàng)建socket對(duì)象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 避免重啟后端口被占用
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 監(jiān)聽(tīng)端口
server.bind(("127.0.0.1", 8080))
# 創(chuàng)建半連接池
server.listen(5)while True:# 等待連接conn, addr = server.accept()# 接收數(shù)據(jù)recv_data = conn.recv(1024).decode('utf8')print(f"recv:>>>{recv_data.split(' ')[1]}")# 響應(yīng)首行 響應(yīng)頭 空行http_data = b"HTTP1.1 200 ok \r\n\r\n"# 二級(jí)制數(shù)據(jù)send_data = b"hello world"# 發(fā)送數(shù)據(jù)conn.send(http_data + send_data)
recv:>>>/
recv:>>>/index
recv:>>>/home
recv:>>>/favicon.ico # 現(xiàn)在不用管

【二】基于wsgiref模塊

  • 內(nèi)置模塊

【1】模板

(1)基礎(chǔ)模板

  • 訪問(wèn)127.0.0.1:8080
  • 便會(huì)返回hello world
from wsgiref import simple_serverdef run(request, response):""":param request: 請(qǐng)求相關(guān)的數(shù)據(jù):param response: 響應(yīng)相關(guān)的數(shù)據(jù):return: 返回給客戶端的展示數(shù)據(jù)"""# 固定編寫response("200 OK", [])return [b"hello world"]if __name__ == '__main__':# 端口和IPIP = "127.0.0.1"PORT = 8080# 創(chuàng)建服務(wù)端對(duì)象,只要有請(qǐng)求訪問(wèn),便會(huì)執(zhí)行run方法server = simple_server.make_server(IP, PORT, run)server.serve_forever()

(2)任務(wù):根據(jù)請(qǐng)求返回不同信息

  • 同理通過(guò)分析response
    • 首先這是一個(gè)字典
    • 然后每次瀏覽器請(qǐng)求的后綴在PATH_INFO
    • 所以根據(jù)這個(gè)返回不同信息
from wsgiref import simple_serverdef run(request, response):""":param request: 請(qǐng)求相關(guān)的數(shù)據(jù):param response: 響應(yīng)相關(guān)的數(shù)據(jù):return: 返回給客戶端的展示數(shù)據(jù)"""# 固定編寫response("200 OK", [])# 獲取后綴內(nèi)容get_path = request.get("PATH_INFO")if get_path == "/index":return [b"welcome index"]elif get_path == "/home":return [b"welcome home"]else:return [b"404 error"]if __name__ == '__main__':# 端口和IPIP = "127.0.0.1"PORT = 8080# 創(chuàng)建服務(wù)端對(duì)象,只要有請(qǐng)求訪問(wèn),便會(huì)執(zhí)行run方法server = simple_server.make_server(IP, PORT, run)server.serve_forever()

【2】存在的不足和優(yōu)化

(1)問(wèn)題

  • 如果網(wǎng)站很多,那么需要人為的寫很多的elif
  • 每個(gè)分支下的功能根據(jù)業(yè)務(wù)邏輯的不同可能會(huì)比較復(fù)雜的邏輯

(2)函數(shù)和模塊優(yōu)化

  • urls
    • 后綴與函數(shù)名對(duì)應(yīng)關(guān)系
    • (‘/index’,register)
    • 后綴專業(yè)名詞稱之為’路由’
    • 函數(shù)名專業(yè)名詞稱之為’視圖函數(shù)’
    • urls.py專業(yè)名詞稱之為’路由層’
  • views
    • 專門編寫業(yè)務(wù)邏輯代碼
    • 可以是函數(shù) 也可以是類
    • 函數(shù)專業(yè)名詞稱之為’視圖函數(shù)’
    • 類專業(yè)名詞稱之為’視圖類’
    • views.py專業(yè)名詞稱之為’視圖層’
  • templates
    • 專門存儲(chǔ)html文件
    • html文件專業(yè)名詞稱之為’模板文件’
    • templates文件夾專業(yè)名詞稱之為’模板層’
  • static
    • 專門存儲(chǔ)靜態(tài)文件資源
    • 頁(yè)面所需css文件、js文件、圖片文件、第三方文件可統(tǒng)稱為’靜態(tài)資源’
項(xiàng)目文件夾  
├── server.py            // 主應(yīng)用
├── urls.py             // 對(duì)應(yīng)關(guān)系的存儲(chǔ)
├── views.py        	// 業(yè)務(wù)邏輯的編寫
├── templates文件夾      // 存儲(chǔ)項(xiàng)目所需的html文件
│       └── home.html	// home頁(yè)面
├── static文件夾         // 存儲(chǔ)項(xiàng)目所需的靜態(tài)文件
│       └── jquery-3.7.1.min.js		// jquery框架
│       └── bootstrap-grid.min.css  // bootstrap框架
......

(3)示例

  • server.py:主應(yīng)用
from wsgiref import simple_server
from urls import urls
from views import errordef run(request, responce):responce('200 OK', []) current_path = request.get("PATH_INFO")func_name = Nonefor url_tuple in urls:  # ('/register', register)if current_path == url_tuple[0]:func_name = url_tuple[1]breakif func_name:res = func_name(request)else:res = error(request) return [res.encode('utf8')]if __name__ == '__main__':server = simple_server.make_server('127.0.0.1', 8080, run)server.serve_forever()
  • urls:對(duì)應(yīng)關(guān)系的存儲(chǔ)
from views import *urls = (('/home', login),('/index', index),
)
  • views:業(yè)務(wù)邏輯代碼
# 功能函數(shù)
def register(request):return 'home'def index(request):return 'index'def error(request):return open(r'static/error.html', 'r', encoding='utf8').read()
  • static->error.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head>
<body><h1>404 Error</h1>
</body>
</html>

【三】基于jinjia2模塊

【1】任務(wù):頁(yè)面顯示當(dāng)前時(shí)間

  • server.py:主應(yīng)用

    • 不做任何改變
  • urls:對(duì)應(yīng)關(guān)系的存儲(chǔ)

from views import *urls = (('/show_time', show_time),
)
  • views:業(yè)務(wù)邏輯代碼
import timedef show_time(request):now_time = time.strftime("%x %X", time.localtime())return open(r"templates/time.html", 'r', encoding='utf8').read().replace("time", now_time)def error(request):return open(r'static/error.html', 'r', encoding='utf8').read()
  • templates->time.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head>
<body><h1 style="text-align: center">time</h1>
</body>
</html>

【2】jinja2模塊

(1)基礎(chǔ)介紹

  • Jinja2是一個(gè)流行的Python模板引擎,它提供了一種靈活而強(qiáng)大的方式來(lái)生成動(dòng)態(tài)內(nèi)容。
  • Jinja2模板引擎可以用于各種應(yīng)用程序,包括Web開(kāi)發(fā)、生成配置文件、郵件模板等。

(2)特點(diǎn)和使用方法

  • 模板語(yǔ)法:
    • Jinja2使用一種類似于HTML的模板語(yǔ)法,通過(guò)插入變量、控制流語(yǔ)句和過(guò)濾器等,可以動(dòng)態(tài)生成內(nèi)容。
    • 例如,使用{{ variable }}表示插入變量,{% if condition %}...{% endif %}表示條件語(yǔ)句,{% for item in collection %}...{% endfor %}表示循環(huán)語(yǔ)句。
  • 模板繼承:
    • Jinja2支持模板繼承,可以定義一個(gè)基礎(chǔ)模板,然后在子模板中繼承基礎(chǔ)模板并覆蓋特定的部分。
  • 過(guò)濾器和函數(shù):
    • Jinja2提供了一些內(nèi)置的過(guò)濾器和函數(shù),用于對(duì)變量進(jìn)行格式化、轉(zhuǎn)換和處理。例如,可以使用{{ variable|filter }}的語(yǔ)法來(lái)應(yīng)用過(guò)濾器。
  • 變量上下文:
    • 在渲染模板時(shí),可以通過(guò)向模板引擎提供一個(gè)變量上下文來(lái)傳遞數(shù)據(jù)。
    • 上下文可以是一個(gè)字典,其中包含模板中使用的變量和對(duì)應(yīng)的值。
  • 擴(kuò)展和自定義:
    • Jinja2允許通過(guò)擴(kuò)展和自定義來(lái)增強(qiáng)模板引擎的功能。
    • 可以編寫自定義的過(guò)濾器、函數(shù)和標(biāo)簽,或者使用現(xiàn)有的擴(kuò)展庫(kù)來(lái)擴(kuò)展Jinja2的功能。

【3】使用jinja2模塊

(1)演示

  • templates -> show_jinja2.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head>
<body>
<h1>字典數(shù)據(jù)展示</h1>
<p>{{ user }}</p>
<p>{{ user.name }}</p>
<p>{{ user['pwd'] }}</p>
<p>{{ user.get('hobby') }}</p>
<h1>列表數(shù)據(jù)展示</h1>
<p>{% for i in new_list %}<span>元素:{{ i }}</span>{% endfor %}
</p>
</body>
</html>
  • views
import time
from jinja2 import Template# 功能函數(shù)
def show_time(request):now_time = time.strftime("%x %X", time.localtime())return open(r"templates/time.html", 'r', encoding='utf8').read().replace("time", now_time)def show_jinja2(request):user_dict = {"name": "bruce", "age": 18, "hobby": "playing"}new_list = ["aa", "bb", "cc", 11, 22, 33]data = open("templates/show_jinja2.html", 'r', encoding='utf8').read()temp_obj = Template(data)res = temp_obj.render({"user": user_dict, "new_list": new_list})return resdef error(request):return open(r'static/error.html', 'r', encoding='utf8').read()
  • urls
from views import *urls = (('/show_time', show_time),('/show_jinja2', show_jinja2),
)

(2)任務(wù):頁(yè)面顯示時(shí)間

  • templates->time.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,initial-scale=1.0"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head>
<body><h1 style="text-align: center">{{ time }}</h1>
</body>
</html>
  • views
import time
from jinja2 import Template# 功能函數(shù)
def show_time(request):now_time = time.strftime("%x %X", time.localtime())return open(r"templates/time.html", 'r', encoding='utf8').read().replace("time", now_time)def show_time_jinja2(request):now_time = time.strftime("%x %X", time.localtime())data = open(r"templates/time.html", 'r', encoding='utf8').read()temp_obj = Template(data)res = temp_obj.render({"time":now_time})return resdef error(request):return open(r'static/error.html', 'r', encoding='utf8').read()
  • urls
from views import *urls = (('/show_time', show_time),('/show_time_jinja2', show_time_jinja2)
)

【四】網(wǎng)絡(luò)框架和MVC架構(gòu)

【1】網(wǎng)絡(luò)框架

  • 網(wǎng)絡(luò)框架是一種軟件框架,用于構(gòu)建Web應(yīng)用程序。它提供了一系列工具、庫(kù)和規(guī)范,以簡(jiǎn)化Web開(kāi)發(fā)過(guò)程,包括路由處理、請(qǐng)求處理、模板引擎、數(shù)據(jù)庫(kù)連接等功能。
  • 網(wǎng)絡(luò)框架通常提供了一種結(jié)構(gòu)和組織應(yīng)用程序的方式,使得開(kāi)發(fā)者可以更加高效地開(kāi)發(fā)和維護(hù)Web應(yīng)用程序。
  • 網(wǎng)絡(luò)框架可以是基于某種編程語(yǔ)言的,如Python的Flask和Django框架,JavaScript的Express框架等。

【2】MVC架構(gòu)

  • MVC(Model-View-Controller)是一種常見(jiàn)的軟件設(shè)計(jì)模式,用于組織和分離應(yīng)用程序的邏輯和視圖。
  • MVC架構(gòu)將應(yīng)用程序分為三個(gè)核心組件:
    • 模型(Model):負(fù)責(zé)處理數(shù)據(jù)和業(yè)務(wù)邏輯。模型通常與數(shù)據(jù)庫(kù)交互,處理數(shù)據(jù)的讀取、寫入和驗(yàn)證等操作。
    • 視圖(View):負(fù)責(zé)展示數(shù)據(jù)給用戶,并接收用戶的輸入。視圖通常是用戶界面的一部分,如網(wǎng)頁(yè)、移動(dòng)應(yīng)用程序的界面等。
    • 控制器(Controller):負(fù)責(zé)處理用戶的請(qǐng)求,協(xié)調(diào)模型和視圖之間的交互??刂破鹘邮沼脩舻妮斎?#xff0c;根據(jù)業(yè)務(wù)邏輯來(lái)更新模型,并將更新后的數(shù)據(jù)傳遞給視圖進(jìn)行展示。
  • MVC架構(gòu)的優(yōu)勢(shì)在于將應(yīng)用程序的不同功能模塊進(jìn)行了分離,使得代碼更加可維護(hù)、可擴(kuò)展和易于測(cè)試。

【3】小結(jié)

  • 在Web開(kāi)發(fā)中,網(wǎng)絡(luò)框架通常采用MVC架構(gòu)來(lái)組織應(yīng)用程序的代碼。
  • 框架提供了路由處理、請(qǐng)求處理和模板引擎等功能,而開(kāi)發(fā)者則可以按照MVC的思想將應(yīng)用程序的邏輯和視圖進(jìn)行分離,提高開(kāi)發(fā)效率和代碼質(zhì)量。
  • 通過(guò)網(wǎng)絡(luò)框架和MVC架構(gòu)的結(jié)合,開(kāi)發(fā)者可以更好地組織和管理Web應(yīng)用程序,并實(shí)現(xiàn)靈活、可擴(kuò)展的應(yīng)用開(kāi)發(fā)。

【五】主流后端框架

【1】Django

(1)介紹

  • Django是一個(gè)使用Python編寫的高級(jí)Web應(yīng)用程序框架。它以快速開(kāi)發(fā)和可擴(kuò)展性為目標(biāo),提供了一系列工具和功能,使得構(gòu)建復(fù)雜的Web應(yīng)用程序變得簡(jiǎn)單和高效。

(2)特點(diǎn)

  • 完整的功能集:Django提供了許多內(nèi)置的功能和模塊,包括數(shù)據(jù)庫(kù)ORM、表單處理、用戶認(rèn)證、管理界面等。這些功能的集成使得開(kāi)發(fā)者可以更快速地構(gòu)建功能完善的Web應(yīng)用程序,而無(wú)需從頭開(kāi)始編寫大量的代碼。
  • 高度可擴(kuò)展:Django采用了松散耦合的設(shè)計(jì),使得開(kāi)發(fā)者可以方便地?cái)U(kuò)展和定制應(yīng)用程序。它支持插件和第三方應(yīng)用的集成,以及自定義模型、視圖和模板等。
  • 強(qiáng)大的模板引擎:Django的模板引擎提供了豐富的模板語(yǔ)法和功能,使得開(kāi)發(fā)者可以輕松地生成動(dòng)態(tài)內(nèi)容和處理數(shù)據(jù)。它支持模板繼承、過(guò)濾器、標(biāo)簽等特性,使得模板的重用和組織變得更加簡(jiǎn)單。
  • 自動(dòng)化的管理界面:Django自帶了一個(gè)強(qiáng)大的管理界面,可以自動(dòng)生成數(shù)據(jù)庫(kù)管理界面,使得開(kāi)發(fā)者可以方便地管理和操作數(shù)據(jù)。這個(gè)管理界面提供了增刪改查等常見(jiàn)操作的功能,并且可以進(jìn)行自定義擴(kuò)展。

(3)組成結(jié)構(gòu)

  • Django的組成結(jié)構(gòu)基于MVC(Model-View-Controller)架構(gòu),但在Django中,通常稱之為MTV(Model-Template-View):
    • 模型(Model):模型負(fù)責(zé)處理數(shù)據(jù)和業(yè)務(wù)邏輯。它定義了數(shù)據(jù)模型和數(shù)據(jù)庫(kù)表之間的映射關(guān)系,并提供了對(duì)數(shù)據(jù)的增刪改查等操作。
    • 模板(Template):模板負(fù)責(zé)展示數(shù)據(jù)給用戶。它使用Django的模板語(yǔ)言,將數(shù)據(jù)和邏輯結(jié)合起來(lái)生成最終的HTML頁(yè)面。
    • 視圖(View):視圖負(fù)責(zé)處理用戶的請(qǐng)求和邏輯處理。它接收用戶的請(qǐng)求,從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),然后將數(shù)據(jù)傳遞給模板進(jìn)行渲染,并返回生成的HTML頁(yè)面給用戶。

【2】Flask

(1)介紹

  • Flask是一個(gè)使用Python編寫的微型Web框架,它以簡(jiǎn)潔和靈活為特點(diǎn)。Flask提供了一些基本的工具和庫(kù),使得構(gòu)建Web應(yīng)用程序變得簡(jiǎn)單和可擴(kuò)展。

(2)特點(diǎn)

  • 簡(jiǎn)潔而靈活:Flask的設(shè)計(jì)理念是保持簡(jiǎn)單和可擴(kuò)展性,它提供了一些核心功能,但并沒(méi)有強(qiáng)制性的約束。開(kāi)發(fā)者可以根據(jù)需求自由選擇和集成其他庫(kù)和工具,以滿足特定的應(yīng)用需求。
  • 輕量級(jí):Flask是一個(gè)輕量級(jí)的框架,它的核心庫(kù)非常小巧,并且沒(méi)有多余的依賴。這使得Flask在資源消耗和性能方面表現(xiàn)出色,適合構(gòu)建小型和簡(jiǎn)單的Web應(yīng)用程序。
  • 易學(xué)易用:Flask的API設(shè)計(jì)簡(jiǎn)單直觀,容易學(xué)習(xí)和使用。它提供了路由處理、請(qǐng)求處理、模板引擎等基本功能,使得開(kāi)發(fā)者可以快速上手并進(jìn)行開(kāi)發(fā)。
  • 可擴(kuò)展性:盡管Flask本身是一個(gè)微型框架,但它支持通過(guò)插件和擴(kuò)展來(lái)增加功能。開(kāi)發(fā)者可以根據(jù)需要選擇和集成各種擴(kuò)展,以滿足特定的應(yīng)用需求。

【3】Tornado

(1)介紹

  • Tornado是一個(gè)使用Python編寫的高性能Web框架和異步網(wǎng)絡(luò)庫(kù)。它以處理大量并發(fā)連接和高性能為目標(biāo),適用于構(gòu)建高性能的Web應(yīng)用程序和實(shí)時(shí)Web服務(wù)。

(2)特點(diǎn)

  • 高性能:Tornado采用了異步的事件驅(qū)動(dòng)編程模型,通過(guò)非阻塞的I/O操作和事件循環(huán)機(jī)制,實(shí)現(xiàn)了高性能的網(wǎng)絡(luò)通信。它可以處理大量的并發(fā)連接,并具有出色的響應(yīng)能力。
  • 內(nèi)置異步支持:Tornado內(nèi)置了對(duì)異步編程的支持,包括異步請(qǐng)求處理、異步HTTP客戶端和異步數(shù)據(jù)庫(kù)訪問(wèn)等。這使得開(kāi)發(fā)者可以編寫高效的異步代碼,處理并發(fā)請(qǐng)求和I/O操作。
  • 輕量級(jí):Tornado是一個(gè)輕量級(jí)的框架,它的核心庫(kù)非常小巧,并且沒(méi)有多余的依賴。這使得Tornado在資源消耗和性能方面表現(xiàn)出色,適合構(gòu)建高性能的Web應(yīng)用程序。
  • WebSocket支持:Tornado提供了對(duì)WebSocket的原生支持,使得開(kāi)發(fā)者可以方便地構(gòu)建實(shí)時(shí)Web應(yīng)用程序和實(shí)時(shí)通信服務(wù)。

【4】FastAPI

(1)介紹

  • FastAPI是一個(gè)使用Python編寫的現(xiàn)代化Web框架,它旨在提供高性能和易用性。FastAPI基于Python 3.7+的類型注解和異步編程模型,使得開(kāi)發(fā)者可以快速構(gòu)建高性能的Web API應(yīng)用程序。

(2)特點(diǎn)

  • 高性能:FastAPI基于異步編程模型,利用Python 3.7+的類型注解和靜態(tài)類型檢查,實(shí)現(xiàn)了高性能的請(qǐng)求處理。它使用基于Starlette的異步服務(wù)器,能夠處理大量的并發(fā)請(qǐng)求。
  • 快速開(kāi)發(fā):FastAPI的設(shè)計(jì)目標(biāo)是提供快速開(kāi)發(fā)的體驗(yàn)。它提供了自動(dòng)生成API文檔、輸入數(shù)據(jù)驗(yàn)證、請(qǐng)求處理等功能,使得開(kāi)發(fā)者可以快速構(gòu)建和部署Web API應(yīng)用程序。
  • 類型注解和自動(dòng)文檔:FastAPI利用Python的類型注解,可以自動(dòng)生成API文檔和輸入數(shù)據(jù)驗(yàn)證。開(kāi)發(fā)者可以通過(guò)類型注解定義輸入和輸出的數(shù)據(jù)模型,并自動(dòng)生成交互式的API文檔。
  • 異步支持:FastAPI完全支持異步編程,可以處理異步請(qǐng)求和異步操作。它基于Python的協(xié)程和異步IO,能夠處理高并發(fā)和高負(fù)載的請(qǐng)求。
http://www.risenshineclean.com/news/22695.html

相關(guān)文章:

  • 有那些專門做外貿(mào)的網(wǎng)站呀seo的優(yōu)化方案
  • 做彩票網(wǎng)站需要什么收錢的百度競(jìng)價(jià)有點(diǎn)擊無(wú)轉(zhuǎn)化
  • 公司做網(wǎng)站需要什么免費(fèi)入駐的賣貨平臺(tái)有哪些
  • 安卓是哪個(gè)公司開(kāi)發(fā)的seo優(yōu)化自動(dòng)點(diǎn)擊軟件
  • 網(wǎng)站優(yōu)化最牛逼的軟件最有效的惡意點(diǎn)擊軟件
  • 怎么建立自己網(wǎng)站 asp如何進(jìn)行關(guān)鍵詞分析
  • 做ppt用什么網(wǎng)站北京優(yōu)化seo排名優(yōu)化
  • 教育公司 網(wǎng)站建設(shè)愛(ài)客crm
  • 做網(wǎng)站怎么備案seo綜合查詢什么意思
  • 專門做配電箱的網(wǎng)站b站推廣網(wǎng)站mmm
  • 多語(yǔ)種網(wǎng)站營(yíng)銷寧波seo關(guān)鍵詞優(yōu)化制作
  • 怎樣弄網(wǎng)站的導(dǎo)航欄百度競(jìng)價(jià)是什么意思
  • 上饒網(wǎng)站開(kāi)發(fā)有哪些網(wǎng)絡(luò)推廣平臺(tái)
  • 專門做活動(dòng)的網(wǎng)站怎么注冊(cè)一個(gè)自己的網(wǎng)站
  • 視頻網(wǎng)站哪個(gè)做的好網(wǎng)絡(luò)營(yíng)銷意思
  • 企業(yè)網(wǎng)站建設(shè)網(wǎng)頁(yè)推廣軟文300字
  • 網(wǎng)站怎么做評(píng)估北京seo優(yōu)化排名
  • 網(wǎng)站建設(shè)員官網(wǎng)設(shè)計(jì)比較好看的網(wǎng)站
  • 怎樣辦網(wǎng)站seo關(guān)鍵字排名
  • 攝影師個(gè)人網(wǎng)站制作自動(dòng)點(diǎn)擊器免費(fèi)下載
  • 新建設(shè)電影院 網(wǎng)站開(kāi)網(wǎng)站需要什么流程
  • php畢業(yè)設(shè)計(jì)二手網(wǎng)站怎么做寧波網(wǎng)站建設(shè)推廣平臺(tái)
  • 中國(guó)菲律賓南海開(kāi)戰(zhàn)seo對(duì)網(wǎng)絡(luò)推廣的作用是
  • 韶關(guān)網(wǎng)站開(kāi)發(fā)seo網(wǎng)站搭建是什么
  • 新疆網(wǎng)站黨建設(shè)備百度小說(shuō)風(fēng)云榜排行榜官網(wǎng)
  • 個(gè)人做電子商務(wù)網(wǎng)站seo研究中心南寧線下
  • 專業(yè)注冊(cè)公司代辦海東地區(qū)谷歌seo網(wǎng)絡(luò)優(yōu)化
  • ftp做網(wǎng)站網(wǎng)絡(luò)公司網(wǎng)站建設(shè)
  • 網(wǎng)站建設(shè)相關(guān)文獻(xiàn)佛山seo優(yōu)化
  • 公司網(wǎng)站制作的公司站長(zhǎng)域名查詢