2019.7.23:html
內容:aiohttp.web 、aiohttp_session、cryptography、其他沒有涉及的到文檔網站上查詢python
可選的 cchardet做爲chardet的更快替代品 github
用於快速DNS解析的可選 aiodnsweb
支持非阻塞異步I/O的庫redis
如下是服務器端的配置:算法
aiohttp.web
沒有內置會話,不過你能夠使用第三方庫aiohttp_session
來提供會話支持安全
https://github.com/aio-libs/aiohttp-session服務器
該庫容許咱們將用戶特定的數據存儲到會話對象中。cookie
會話對象具備相似dict的接口(諸如session [key] = value,value = session [key]等的操做存在)。
在Web處理程序中處理會話以前,必須在aiohttp.web.Application中註冊會話中間件。
舉個栗子:
import time import base64 from cryptography import fernet from aiohttp import web from aiohttp_session import setup, get_session from aiohttp_session.cookie_storage import EncryptedCookieStorage async def handler(request): session = await get_session(request) last_visit = session['last_visit'] if 'last_visit' in session else None session['last_visit'] = time.time() text = 'Last visited: {}'.format(last_visit) return web.Response(text=text) def make_app(): app = web.Application() # secret_key must be 32 url-safe base64-encoded bytes fernet_key = fernet.Fernet.generate_key() secret_key = base64.urlsafe_b64decode(fernet_key) setup(app, EncryptedCookieStorage(secret_key)) app.router.add_get('/', handler) return app web.run_app(make_app())
(題外話):from cryptography import fernet
cryptography是python語言中很是著名的加解密庫,在算法層面提供了高層次的抽象,使用起來很是簡單、直觀,pythonic,同時還保留了各類不一樣算法的低級別接口,保留靈活性。
咱們知道加密通常分爲對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。各自對應多種不一樣的算法,每種算法又有不一樣的密鑰位長要求,另外還涉及到不一樣的分組加密模式,以及末尾補齊方式。所以須要高層次的抽象,把這些參數封裝起來,讓咱們使用時,不用關心這麼多參數,只要知道這麼用足夠安全就夠了。
對稱加密又分爲分組加密和序列加密,本文只討論對稱分組加密。
主流對稱分組加密算法:DES、3DES、AES
主流對稱分組加密模式:ECB、CBC、CFB、OFB
主流填充標準:PKCS七、ISO 1012六、ANSI X.92三、Zero padding
在cryptography庫中,對稱加密算法的抽象是fernet模塊,包括了對數據的加解密以及簽名驗證功能,以及密鑰過時機制。
該模塊採用以下定義:
(回到aiohttp_session)
全部存儲都使用名爲AIOHTTP_SESSION的HTTP Cookie來存儲數據。 能夠經過將關鍵字參數cookie_name傳遞給您選擇的存儲類來修改此問題。
可用的會話存儲是:
aiohttp_session.cookie_storage.EncryptedCookieStorage(secret_key)
-- 將會話數據做爲SimpleCookieStorage存儲到cookie中,但經過AES密碼對其進行編碼。 secrect_key是AES加密/解密的字節密鑰,長度應爲32個字節。須要:from aiohttp_session.cookie_storage import EncryptedCookieStorage