一,HTTP協(xié)議 HTTPS協(xié)議 不同 為什么安全馍管?
(1)http協(xié)議是一種網(wǎng)絡(luò)喲傳輸協(xié)議,規(guī)定了瀏覽器和服務(wù)器之間的通信方式。位于應(yīng)用層(傳輸信息都是明文方式,不安全,容易被人攔截更振,篡改)
(2)為了通信安全,使用對(duì)稱加密方式,
(在發(fā)送之前,使用相同的秘匙對(duì)數(shù)據(jù)進(jìn)行加密和解密)(這種方式雖然在網(wǎng)絡(luò)中是以密文呈現(xiàn),但是容易讓人攔截破解,也不算安全.)
(3)使用非對(duì)稱加密方式,
非對(duì)稱加密包含一組秘匙,公匙和私匙:明文可以用公鑰加密,用私鑰解密饭尝,并且只能用私鑰解密肯腕,不能用公鑰解密;也可以用私鑰加密钥平,公鑰解密实撒,并且只能有公鑰解密。
流程如下
a、瀏覽器生成一個(gè)隨機(jī)秘鑰知态。
b捷兰、瀏覽器向服務(wù)器請(qǐng)求公鑰。
c肴甸、服務(wù)器向?yàn)g覽器發(fā)送它的公鑰寂殉。
d、瀏覽器接收服務(wù)器發(fā)送的公鑰原在,并使用公鑰加密隨機(jī)生成的對(duì)稱加密秘鑰友扰,發(fā)送給服務(wù)器。
e庶柿、服務(wù)器接收瀏覽器發(fā)送的數(shù)據(jù)村怪,用自身私鑰解密,得到浮庐,對(duì)稱加密秘鑰甚负。
f、至此审残,瀏覽器和服務(wù)器可以使用對(duì)稱加密秘鑰相互通信梭域。
用這種方式仍然存在隱患,在進(jìn)行第3步和第4步時(shí)候,中間人會(huì)在服務(wù)器放松公鑰給瀏覽器時(shí)候,截取數(shù)據(jù),把公鑰修改成自己的發(fā)送給瀏覽器,這時(shí)瀏覽器就無法驗(yàn)證公鑰的準(zhǔn)確性.
(4)使用httos數(shù)字證書保證數(shù)據(jù)安全
數(shù)字證書是第三方機(jī)構(gòu),給網(wǎng)站唯一身份證明搅轿。
當(dāng)瀏覽器請(qǐng)求公鑰時(shí)病涨,服務(wù)端不單單發(fā)送公鑰,而是發(fā)送包含公鑰的數(shù)字證書璧坟。
瀏覽器解密時(shí)如下:
a既穆、首先查看是否在有效期內(nèi),若失效則不再發(fā)送隨機(jī)對(duì)稱秘鑰雀鹃;
b幻工、找到第三方機(jī)構(gòu)名稱,通過對(duì)照找到第三發(fā)機(jī)構(gòu)公鑰黎茎,解密數(shù)字簽名囊颅,得到一個(gè)hash1值。
c傅瞻、通過同樣的方式迁酸,根據(jù)服務(wù)端網(wǎng)址等信息,使用簽名算法俭正,生成hash2.
d奸鬓、將hash1和hash2,對(duì)比掸读,如果相同串远,則身份驗(yàn)證成功宏多。
e、身份驗(yàn)證成功后澡罚,使用同樣的機(jī)構(gòu)公鑰解密網(wǎng)站公鑰伸但。
f、瀏覽器使用解密后的公鑰發(fā)送對(duì)稱秘鑰給服務(wù)端留搔。
https的主體思想,ip模型上加了ssl層更胖。
二,網(wǎng)絡(luò)七層塔協(xié)議:
七層劃分為:應(yīng)用層、表示層隔显、會(huì)話層却妨、傳輸層、網(wǎng)絡(luò)層括眠、數(shù)據(jù)鏈路層彪标、物理層。
物理層:????物理傳輸掷豺、硬件捞烟、物理特性(用于倆個(gè)硬件之間的通訊)
數(shù)據(jù)鏈接層:? ??定義了如何讓格式化數(shù)據(jù)以進(jìn)行傳輸,以及如何讓控制對(duì)物理介質(zhì)的訪問当船。這一層通常還提供錯(cuò)誤檢測(cè)和糾正题画,以確保數(shù)據(jù)的可靠傳輸。
傳輸層:? ? ? 發(fā)送大量數(shù)據(jù)的時(shí)候用,傳輸數(shù)據(jù)包(確保了數(shù)據(jù)的不丟包,但是速度較慢)
網(wǎng)絡(luò)層:? ? ? ?即路由器德频,交換價(jià)那些具有尋址功能的設(shè)備所實(shí)現(xiàn)的功能苍息。這一層定義的是IP地址,通過IP地址尋址抱婉。所以產(chǎn)生了IP協(xié)議。
會(huì)話層:??????會(huì)話層的作用就是建立和管理應(yīng)用程序之間的通信桌粉。?
表示層:? ? 解決不同系統(tǒng)之間的通信語法問題
應(yīng)用層:????用戶使用的都是應(yīng)用程序蒸绩,均工作于應(yīng)用層,互聯(lián)網(wǎng)是開發(fā)的铃肯,大家都可以開發(fā)自己的應(yīng)用程序患亿,數(shù)據(jù)多種多樣,必須規(guī)定好數(shù)據(jù)的組織形式 押逼。(主要功能:規(guī)定應(yīng)用程序的數(shù)據(jù)格式步藕。)
三,format的用法
(1)通過位置:
????print'{0},{1}'.format('chuhao',20)
(2)通過關(guān)鍵字
????print'{name},{age}'.format(age=18,name='chuhao')
? ??class Person:
????????def__init__(self,name,age):
? ??????????????self.name = name
? ? ? ? ? ? ? ??self.age = age
? ??????def__str__(self):
????????????return 'This guy is {self,name},is {self,age} old'? ? ? ? ? ? ? ? ????????.fromat(self.self)
(3)通過映射list
a_list = ['chuhao',20,'china']
print'my name is {0[0]},from {0[2]},age is {0[1]}'.format(a_list)
########? ? ? my name is chuhao,from china,age is 20
(4)通過映射 dict
????b_dict = {'name':'chuhao','age':20,'province':'shanxi'}
????print'my name is {name}, age is {age},from {province}'.format(**b_dict)
(5)填充與對(duì)齊
print'{:>8}'.format('189')
######? ? ? 189
print'{:0>8}'.format('189')
#####? ??00000189
print'{:a>8}'.format('189')
#####? ?aaaaa189
(6)精度與類型f
#保留兩位小數(shù)
print'{:.2f}'.format(321.33345)
#####? 321.33
(7)用來做金額的千位分隔符
print'{:,}'.format(1234567890)
####? ?1,234,567,890
(8)其他類型 主要就是進(jìn)制了,b挑格、d咙冗、o、x分別是二進(jìn)制漂彤、十進(jìn)制雾消、八進(jìn)制灾搏、十六進(jìn)制
print'{:b}'.format(18)? ? #二進(jìn)制 10010
print'{:d}'.format(18)#十進(jìn)制 18
print'{:o}'.format(18)#八進(jìn)制 22
print'{:x}'.format(18)#十六進(jìn)制12
四、Django中間件 具體執(zhí)行流程 有return和沒有return區(qū)別
1立润、執(zhí)行完所有的request方法 到達(dá)視圖函數(shù)狂窑。
2、執(zhí)行中間件的其他方法
3桑腮、經(jīng)過所有response方法 返回客戶端
如果其中一個(gè)中間件里request方法里return了值,就會(huì)執(zhí)行當(dāng)前中間件的response方法,然后返回給客戶? 然后報(bào)錯(cuò),不會(huì)執(zhí)行下個(gè)中間件
列如:
MIDDLEWARE = [
#注意CorsMiddleware要配置在CsrfViewMiddleware前
? ? 'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
五泉哈、Flask今天的所學(xué)知識(shí)點(diǎn)
1,Flask框架屬于輕量級(jí)框架,只提供最核心的功能.
2,運(yùn)用flask框架時(shí)候
from flask import Flask
'''
__name__:表示當(dāng)前的模塊名字
創(chuàng)建Flask對(duì)象,F(xiàn)lask會(huì)以傳入模塊的位置當(dāng)做家目錄
'''
app = Flask(__name__)
@app.route('/')? # 代表首頁
def hello_world():? # 視圖函數(shù)
? ? return 'Hello World!'? # 返回內(nèi)容
if __name__ == '__main__':
? ? app.run()? # 運(yùn)行程序
瀏覽器地址:127.0.00.1:5000
3,flask參數(shù)
(1)a,? ? # 配置文件
app.config.from_pyfile('config.cfg')
b,? ? ? 配置DEBUG參數(shù)時(shí)候三種方式
字典配置? ?app.config["DEBUG"] = True
對(duì)象上配置? ? app.debug = True
參數(shù)傳入配置? app.run(debug=True)
(2)取參時(shí)候:
函數(shù)中取時(shí):
app.config.get('THST')
current_app.config.get('THST')
函數(shù)外:
app.config["TEST"] = 'test'
4,配置路由
1,只需要在函數(shù)的裝飾器寫入
@app.route('/center')
2,重定向
return redirect(url_for('index'))
3,需要定義請(qǐng)求方式的時(shí)候(mtehods里面加入允許的請(qǐng)求方式)
@app.route('/login',methods=['POST'])
5,轉(zhuǎn)換器
default:????接受字符串破讨,默認(rèn)轉(zhuǎn)換器
stirng:????接受字符串丛晦,跟默認(rèn)一樣
int:????接受整數(shù)
float:????同 int ,但是接受浮點(diǎn)數(shù)
uuid:????唯一識(shí)別碼
path:????和默認(rèn)的相似添忘,但也接受斜線
用到時(shí)候代碼如下:
#整數(shù)形式,要想改變請(qǐng)求地址中center/后面的參數(shù)只需要改變int改為自己允許的形式就好(上面)
@app.route('/center/<int:uid>')? ? ?# 代表個(gè)人中心頁
????????def center(uid):? ? # 視圖函數(shù)
????????????return 'your uid %s' % uid? ? ?# 返回內(nèi)容
請(qǐng)求地址:127.0.00.1:5000:center/1
(2)優(yōu)化轉(zhuǎn)換器(代碼如下)
from werkzeug.routing import BaseConverter
#自定義轉(zhuǎn)換器
class MyConverter(BaseConverter):
????????def __init__(self, map, re):? ????
????????????????????super().__init__(map) # 調(diào)用父類?
? ? ? ? ? ? ? ? ? ? self.regex = re # 轉(zhuǎn)換器的正則規(guī)則
app.url_map.converters['re'] = MyConverter # 注冊(cè)
@app.route('/center/<re(r"\d{5,10}"):uid>') # 代表個(gè)人中心頁def center(uid): # 視圖函數(shù)?
?????????????return 'your uid %s' % uid # 返回內(nèi)容
@app.route('/login/<re(r"1[3456789]\d{9}"):phone>') # 代表登錄頁
def login(phone): # 視圖函數(shù)?
?????????????return 'your phone %s' % phone # 返回內(nèi)容