在學習python的Django\Flask\Tornado前你須要知道的,what is web?

咱們都在講web開發web開發,那到底什麼是web呢?html

若是你正在學習python三大主流web框架,那這些你必需要知道了前端

 

軟件開發架構:python

  C/S架構:Client/Server    客戶端與服務端web

  B/S架構:Browser/Server  瀏覽器與服務端(本質上還是C/S架構)面試

HTTP協議數據庫

  超文本傳輸協議:規定了客戶端(瀏覽器)與服務端消息傳輸的格式後端

例:咱們用socket啓一個服務端,用瀏覽器去訪問相應端口,若是服務端按普通c/s方式發送文本信息,瀏覽器是沒法解析和識別的,這就是服務端和瀏覽器通訊沒有遵循HTTP協議形成的,若是想要瀏覽器識別須要在發送內容前執行瀏覽器

conn.send(b'HTTP/1.1 200 OK\r\n\r\n')

這樣向瀏覽器發送的數據就能夠被解析並展現了服務器

 

HTTP協議四大特性:架構

  1.基於TCP/IP協議做用於應用層的協議
  2.基於請求響應
  3.無狀態              --不識別用戶,請求完了就完了,每次待你如初戀
  4.無鏈接    --一次請求響應後即斷開鏈接

 

 

HTTP協議數據傳輸格式

  數據傳輸格式之請求格式:
     請求首行      請求頭(一對封裝好的k,v鍵值對)      空行 --------重點:懂不懂HTTP協議,面試官考得就是你知不知道這個      請求體(POST請求攜帶的數據)

  

  數據格式之響應:
	響應首行
	響應頭(一堆k,v鍵值對)
	空行             -----------重點:懂不懂HTTP協議,就看你知不知道有這麼個東西
	響應體(post請求攜帶的數據)  

 

咱們來看下請求示例:

#請求首行
b'GET / HTTP/1.1\r\n
#請求頭(一大堆kv鍵值對)
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n
\r\n             ------重點
請求體
'

 

       劃出來的部分就是重點強調的部分

 

 

     響應狀態碼
	1XX 服務器已經成功接受到你的數據正在處理,你能夠繼續提交其餘數據
	2XX 請求成功 服務器已經將你請求的數據發送給你了
	3XX 重定向
	4XX 請求資源不存在
	5XX 服務器錯誤

  

 什麼是靜態網頁、什麼是動態網頁:


動靜態網頁

靜態網頁:
  頁面上的數據都是寫死的,萬年不變
動態網頁:
  頁面上的數據是從後端動態獲取的(好比後端獲取當前時間,後端獲取數據庫數據而後傳遞給前端頁面)

  

模板渲染

在說到Django等主流python web框架時必需要了解什麼是模板渲染


如何讓後端生成的數據直接傳遞給前端頁面使用?(而且前端頁面能夠靈活的操做改數據) >>> 模板語法

咱們可能會想到在前端頁面中用特殊符號佔位,而後用字符串替換的方式去渲染。

但咱們在遇到問題時首先應該想到的是python有沒有爲咱們提供這樣的輪子,而非本身造輪子

 

python強大而優秀的三方庫爲咱們解決了這個問題
實現模板渲染 模板語法的第三方模塊:jinja2

安裝jinja2:
python2版本:pip install jinja2

python3版本:pip3 install jinja2

模板語法 jinja2支持前端直接使用相似於python的語法操做數據
<p>{{ user_dic }}</p>
<p>{{ user_dic.name }}</p>
<p>{{ user_dic['password'] }}</p>
<p>{{ user_dic.get('name') }}</p>

{% for user in user_dict %}        <!--[{},{},{},{}]-->
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}

紅色標記爲固定語法,jinja2支持字典、列表等數據類型,在前端頁面文件中的使用方式也和python中一模一樣。

不得不感嘆python爲碼農們提供了極大的方便~~~~

 

 

簡易的web請求流程圖

 

 

wsgiref模塊:將請求的數據進行切分,解析成便於操做字典格式供開發者使用

       將發送的數據進行封裝成HTTP格式便於發送

urls   路由:主要是匹配瀏覽器請求的視圖頁面並交由對應視圖函數處理

views 視圖函數:獲得瀏覽器的頁面請求及瀏覽器攜帶的請求數據,進行html頁面提取、數據處理、模板渲染並返回

templates 放有全部前端html頁面文件夾

models   封裝ORM(對象關係映射),執行對數據庫操做請求

 

 

什麼是web框架?
python三大主流web框架
  Django:大而全,自帶了不少功能模塊,相似於航空母艦 (缺點:有點笨重)
  Flask:短小精悍,自帶的功能模塊特別少,大部分都是依賴於第三方模塊(輕量化web框架)
  Tornado:異步非阻塞 主要用在處理高io 多路複用的狀況 能夠寫遊戲後端

Django:
  socket通訊用的別人的 wsgiref
  路由與視圖函數本身寫的
  模板渲染本身寫的
Flask:
  socket通訊用的別人的 werkzeug
  路由與視圖函數本身寫的
  模板渲染用的別人的 jinja2
Tornado:
  socket通訊,路由與視圖函數,模板渲染都是本身寫的

 

 

由此咱們是否是能夠總結什麼是web了呢?

咱們能夠大體理解爲:web即經過瀏覽器與應用服務器之間的數據交互

那麼web開發就是程序猿基於瀏覽器與服務端實現的相互通訊和渲染

相關文章
相關標籤/搜索