咱們都在講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開發就是程序猿基於瀏覽器與服務端實現的相互通訊和渲染