1Python全棧之路系列Web框架介紹

Python全棧之路系列之Web框架介紹


所有的語言Web框架本質其實就是起一個socket服務端,監聽一個端口,然后運行起來

Web框架包含兩部分,一部分是socket,另外一部分是業務的邏輯處理,根據請求的不同做不同的處理


Python的Web框架分成了兩類,

  1. 即包含socket也包含業務邏輯處理的(tornado)

  2. 不包含socket(框架本身通過第三方模塊實現socket)只包含業務邏輯處理(django,Flask)

WSGI的全稱是Web Server Gateway Interface,翻譯過來就是Web服務器網關接口。具體的來說,WSGI是一個規范,定義了Web服務器如何與Python應用程序進行交互,使得使用Python寫的Web應用程序可以和Web服務器對接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。

wKioL1j-pBDRP81WAAEUN6DYSvI463.png

下面實例的代碼中RunServer()函數就是符合WSGI標準的一個HTTP處理函數,它接收兩個參數:

  1. environ:一個包含所有HTTP請求信息的dict對象;

  2. start_response:一個發送HTTP響應的函數;

通過wsgiref模塊實現一個自定義的web框架

代碼的大概邏輯就是: 定義了兩個函數index()manage(),如果用戶訪問的URL是127.0.0.1:8000/index就返回<h1>/index</h1>,如果用戶訪問的是127.0.0.1:8000/manage就返回/manage,如果訪問其他頁面就返回404

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python2
#?_*_coding:utf-8?_*_
from?wsgiref.simple_server?import?make_server
def?index(arg):
????#?返回一個含有html代碼的字符串
????return?"<h1>%s</h1>"?%(arg)
?????
def?manage(arg):
????return?arg
?????
URLS?=?{
????"/index":?index,
????"/manage":?manage,
}
def?RunServer(environ,?start_response):
????start_response('200?OK',?[('Content-Type',?'text/html')])
????url?=?environ['PATH_INFO']
????if?url?in?URLS.keys():
????????func_name?=?URLS[url]
????????ret?=?func_name(url)
????else:
????????ret?=?"404"
????return?ret
?????
if?__name__?==?'__main__':
????httpd?=?make_server('',?8000,?RunServer)
????httpd.serve_forever()

通過本機的curl命令去訪問測試

1
2
3
4
5
6
ansheng@Darker:~$?curl?127.0.0.1:8000/index
<h1>/index</h1>
ansheng@Darker:~$?curl?127.0.0.1:8000/asdasd
404
ansheng@Darker:~$?curl?127.0.0.1:8000/manage
/manage

無論多么復雜的Web應用程序,入口都是一個WSGI處理函數。HTTP請求的所有輸入信息都可以通過environ獲得,HTTP響應的輸出都可以通過start_response()加上函數返回值作為Body,復雜的Web應用程序,光靠一個WSGI函數來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架,進一步簡化Web開發。

MVC and MTV

MVC模式就是架構模式的一種,MVC模式的目的是實作一種動態的程式設計,使后續對程式的修改和擴充功能簡化,并且使程式某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程式結構更加直覺。

wKiom1j5tdiRc3VPAAAX7GQbjnA071.png-wh_50

軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

  1. 控制器Controller?- 負責轉發請求,對請求進行處理;

  2. 視圖View?- 介面設計人員進行圖形介面設計;

  3. 模型Model?- 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能);

MVC中的M是代表MODLE層,V代表VIEW層,C代表Contrl層.
MTV中的M是代表MODLE層,T代表Template(模板層),V代表VIEW層.










本文轉自 Edenwy? 51CTO博客,原文鏈接:http://blog.51cto.com/edeny/1918242,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279869.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

『 再看.NET7』數值類型

在C#中&#xff0c;有int16&#xff0c;用short來定義&#xff1b;有int32&#xff0c;用int定義&#xff1b;用int64&#xff0c;用long來定義。在.NET7中&#xff0c;添加了int128&#xff0c;和unint128&#xff0c;位數更大的整型。var i16 short.MaxValue; Console.Write…

獲取幫助命令

whatis 基于數據庫的查找,查找內容比較慢 優點&#xff1a;查找速度快 缺點&#xff1a;沒有實時性 [rootlocalhost ~]# whatis ls ls (1) - list directory contents ls (1p) - list directory contents 數據庫文件 Centos6:/…

筆記本電腦升級固態硬盤好嗎_如何升級筆記本電腦硬盤

筆記本電腦升級固態硬盤好嗎Upgrading your laptop’s hard drive is a great way to get some extra life out of an old machine (or resurrect a dead one). Read on as we walk you through the prep work, the installation, and the followup. 升級筆記本電腦的硬盤驅動器…

購物單

小明剛剛找到工作&#xff0c;老板人很好&#xff0c;只是老板夫人很愛購物。老板忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩&#xff0c;但又不好推辭。 這不&#xff0c;XX大促銷又來了&#xff01;老板夫人開出了長長的購物單&#xff0c;都是有打折優惠的。 …

Seay源代碼審計系統

這是一款基于C#語言開發的一款針對PHP代碼安全性審計的系統&#xff0c;主要運行于Windows系統上。這款軟件能夠發現SQL注入、代碼執行、命令執行、文件包含、文件上傳、繞過轉義防護、拒絕服務、XSS跨站、信息泄露、任意URL跳轉等漏洞。 下載鏈接 https://pan.baidu.com/s/1V…

dotnet 世界猜測 隨機數的小測試

這是一個半技術向的博客&#xff0c;主題來源于我讀過的某本書的片段&#xff0c;這是一個稍稍有些前置知識的故事&#xff0c;主題的大概內容就是假定世界存在某個規則序列&#xff0c;通過一代代的探索&#xff0c;可以獲取到此序列的內容。本文將模擬此情形&#xff0c;寫一…

python 批量修改密碼

下午閑來無事&#xff0c;就搞個批量密碼修改工具玩玩... #!/usr/bin/env python import paramiko import time ip_list(ip1,ip2) log_fileopen(mpwdok.log,w) log_file1open(mpwderr.log,w) for ip in ip_list: try: s paramiko.Transport((ip, 22)) s.c…

如何在Android Wear上節省電池壽命

If you’re rocking Android on your wrist, there’s a chance you’ve learned to rely on its convenience pretty heavily. And if you’re in that position, then you probably also know how annoying it can be if your watch runs out of juice in the middle of the …

css3 偽類選擇器

1.target&#xff1a;表示當前的url片段的元素類型&#xff0c;這個元素必須是E &#xff08;作用類似于選項卡&#xff09; 2.&#xff1a;&#xff1a;before{content&#xff1a;“要添加的內容”} 添加到......之前 3.rgb&#xff08;&#xff09; 顏色 4.rgba&#xf…

城市統計【BFS】

題目大意&#xff1a; 中山市的地圖是一個n*n的矩陣&#xff0c;其中標號為1的表示商業區&#xff0c;標號為0的表示居民區。為了考察市內居民區與商業區的距離&#xff0c;并對此作出評估&#xff0c;市長希望你能夠編寫一個程序完成這一任務。  居民區i到商業區的距離指的是…

使用 DataAnnotations(數據注解)實現通用模型數據校驗

.net 跨平臺參數校驗的意義在實際項目開發中&#xff0c;無論任何方式、任何規模的開發模式&#xff0c;項目中都離不開對接入數據模型參數的合法性校驗&#xff0c;目前普片的開發模式基本是前后端分離&#xff0c;當用戶在前端頁面中輸入一些表單數據時&#xff0c;點擊提交按…

網線的做法 及 POE的介紹

網線的做法 以太網線采用差分方式傳輸。所謂差分方式傳輸&#xff0c;就是發送端在兩條信號線上傳輸幅值相等相位相反的電信號&#xff0c;接收端對接受的兩條線信號作減法運算&#xff0c;這樣獲得幅值翻倍的信號。其抗干擾的原理是&#xff1a;假如兩條信號線都受到了同樣&am…

unity 使用tile_如何使用Tile從網上查找電話

unity 使用tileTile is a fantastic little gadget that can help you find your lost keys or wallet. However, it can also locate and ring your phone, even if you never buy a single physical Tile. Here’s how to find your lost phone using the Tile app on the we…

你與一份好簡歷之間的距離

閱讀本文大概需要 2.7 分鐘。每年年初都是企業的招聘旺季&#xff0c;對應的三四月份絕對跳槽、找工作的好時機&#xff0c;業內經常稱呼這兩個月為金三銀四。實力雄厚的人&#xff0c;那個月找工作問題都不大&#xff0c;但是也會盡量挑選個好時機&#xff0c;能有更多的選擇。…

Python 循環刪除指定文件夾下所有的.longtian類型文件

# -*- coding: utf-8 -*-import os#遍歷文件夾刪除文件 def traversing_dir(rootDir):#遍歷根目錄for root,dirs,files in os.walk(rootDir):for file in files:#文件后綴名extFileos.path.splitext(file)[1]if extFile".longtian":os.remove(os.path.join(root,file…

《ASP.NET Core 6框架揭秘實例》演示[35]:利用Session保留語境

客戶端和服務器基于HTTP的消息交換就好比兩個完全沒有記憶能力的人在交流&#xff0c;每次單一的HTTP事務體現為一次“一問一答”的對話。單一的對話毫無意義&#xff0c;在在同一語境下針對某個主題進行的多次對話才會有結果。會話的目的就是在同一個客戶端和服務器之間建立兩…

Vincross孫天齊:人機界面的突破將引發科技革命

8月23—27日&#xff0c;世界機器人大會在北京舉辦&#xff0c;全球各國機器人領域的優秀企業悉數亮相&#xff0c;五花八門的機器人及產業鏈上下游最新技術均能在這次盛會上找到蹤跡&#xff0c;整個會場充滿了未來感與時代發展的氣息。 大會中智慧城市服務機器人技術與應用專…

如何在Windows上使用64位Web瀏覽器

Google and Mozilla now offer 64-bit versions of Chrome and Firefox for Windows. Here’s how to find out what version you’re running and how to upgrade. Google和Mozilla現在提供適用于Windows的64位版本的Chrome和Firefox。 這是找出正在運行的版本以及如何升級的方…

立下“去O”Flag的AWS,悄悄修煉了哪些內功?

AWS re:Invent 2018大會上&#xff0c;AWS首席執行執行官Andy Jassy 表示到 2019 年底&#xff0c;亞馬遜將全面放棄使用 Oracle 數據庫&#xff0c;97&#xff05;的“關鍵任務數據庫”將運行在亞馬遜自己的數據庫服務上。 如今&#xff0c;2019年已經過去了四分之一&#xff…

static作用:靜態變量的生存周期和作用域

首先要理解生存周期與作用域的區別&#xff1a; 生存周期: 變量從定義到銷毀的時間范圍。存放在全局數據區的變量的生存周期存在于整個程序運行期間&#xff0c;而存放在棧中的數據則隨著函數等的作用域結束導致出棧而銷毀&#xff0c;除了靜態變量之外的局部變量都存放于棧中…