l網(wǎng)站建設線上營銷手段
文章目錄
- 8 個人博客
- 8.4 初始化博客
- 8.5 使用Flask-Login管理用戶認證
- 8.6 CSRFProtect實現(xiàn)CSRF保護
- 8.7 編寫博客后臺
- 小結
8 個人博客
8.4 初始化博客
1、安全存儲密碼
密碼不要以明文的形式直接存儲在數(shù)據(jù)庫中,以防被攻擊者盜取、泄露。一般的做法是,不存儲密碼本身,而存儲通過密碼生成的散列值。(但密碼仍然可能在傳輸過程中被截獲)
from werkzeug.security import generate_password_hash, check_password_hash
password_hash = generate_password_hash('cat')
is_right = check_password_hash(password_hash, 'cat')
疑惑:加鹽散列值、密碼擴展,是什么樣的作用原理?
2、創(chuàng)建管理員用戶
可以提供一個博客初始化命令,以免手動在數(shù)據(jù)庫中,使用sql語句添加管理員用戶記錄。
@app.cli.command()
@click.option('--username', prompt=True, help='The username used to login.')
@click.option('--password', prompt=True, hide_input=True,confirmation_prompt=True, help='The password used to login.')
def init(username, password):# 創(chuàng)建管理員記錄相關的操作...
將prompt
參數(shù)設置為True會在用戶沒有輸入?yún)?shù)值時,請求用戶輸入。hide_input
用于隱藏輸入內(nèi)容,confirmation_prompt
用于要求二次輸入確認。
8.5 使用Flask-Login管理用戶認證
博客程序需要根據(jù)用戶的身份開放不同的功能,擴展Flask-Login
提供了用戶會話管理功能,管理用戶的登入、登出,以及視圖保護(如要求某些視圖登錄后才能訪問)功能。(p275)
不過,這些功能即使自己利用session
對象手動實現(xiàn),也比較簡單。
8.6 CSRFProtect實現(xiàn)CSRF保護
關于對資源的更新和刪除操作,為了防止csrf攻擊,應當使用POST方法提交這類請求,即使用表單提交。但為每個這樣的操作都需要單獨定義一個WTForms表單類,顯然太過麻煩。Flask-WTF內(nèi)置的CSRFProtect擴展為這類操作提供了更簡單的方式。
使用該csrf保護,首先需要初始化擴展,并注冊到程序?qū)嵗?/p>
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
csrf.init_app(app)
然后直接在表單中創(chuàng)建一個csrf的隱藏字段。
<form method="post" action="{{ url_for('delete_post', post_id=post.id) }}"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>...
</form>
并且你可以注冊一個錯誤處理函數(shù),捕捉程序中產(chǎn)生的csrf錯誤,并產(chǎn)生對應的響應。
from flask_wtf.csrf import CSRFError@app.errorhandler(CSRFError)
def handle_csrf_error(e):return render_template('errors/400.html', description=e.description), 400
8.7 編寫博客后臺
1、文章管理——刪除確認彈窗
在后臺管理中可以查看文章列表,并刪除其中的文章,刪除通常是不可恢復的。因此,為了防止誤觸,我們需要添加一個刪除確認彈窗,使用瀏覽器內(nèi)置的confirm彈窗組件即可實現(xiàn)。
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?');">刪除
</button>
…
這一小結的其它內(nèi)容都是一些比較簡單的、面向業(yè)務邏輯的考慮,就不繼續(xù)介紹了
Flask-Admin擴展:可以簡化你編寫管理后臺的工作。(p297)
小結
這個項目,書中足足用了80頁來介紹,涉及的內(nèi)容確實比較豐富。我在看的時候有些趕進度,走馬觀花,快速帶過。大部分的知識點都沒有經(jīng)過我的實踐去體會,又只能把這個任務留給以后去完成了啊!