看了本書的第四章表單,記錄一下所學(xué)的心得

之前的文章記錄的太過瑣碎和具體,今天開始的記錄還是更加的集中在思路上好了。
這一章講的主要是表單,更具體的來說是如何通過表單類的創(chuàng)建和渲染來完成接收。
首先需要使用到的包是Flask-WTF,通過它可以定義一個(gè)表單類
表單類的字段是如何定義的,要時(shí)常進(jìn)行復(fù)習(xí)回顧
之后我們需要在視圖函數(shù)中傳入表單類實(shí)例,在渲染的時(shí)候把實(shí)例一起傳過去
渲染表單的具體代碼也需要復(fù)習(xí)
之后在模板中,表單里的第一行一般是{{ form.crsf_token }}用它來進(jìn)行crsf認(rèn)證
之后就是具體的字段,如{{ form.useranme.label }} {{ form.username }}
之后需要提交表單,在提交以前需要知道form表單的三個(gè)屬性分別用于做什么
提交以后要驗(yàn)證表單的數(shù)據(jù),在客戶端和服務(wù)器端都要進(jìn)行驗(yàn)證
在客戶端驗(yàn)證時(shí),可以通過input標(biāo)簽中的required等來進(jìn)行驗(yàn)證
更重要的是服務(wù)器端的驗(yàn)證
視圖函數(shù)接收2種請求,GET請求用于渲染模板,POST請求調(diào)用validate()方法來驗(yàn)證表單數(shù)據(jù)
利用Flask-WTF的validate_on_submit()方法可以把接收POST請求和調(diào)用validate()合在一起
使用form.字段屬性名.data來獲取數(shù)據(jù),如username=form.username.data
獲取完后再if的最后要重定向(PRG模式)
盡量不要讓提交表單的POST請求作為最后一個(gè)請求
在模板中還可以渲染錯(cuò)誤信息
也可以把內(nèi)置的錯(cuò)誤語言設(shè)定為中文
需要先建立一個(gè)類,在里面的class Meta里把locales=['zh']
然后再讓視圖類繼承這個(gè)類即可
還可以自定義驗(yàn)證器
1.行內(nèi)驗(yàn)證器 只要在里面定義函數(shù),命名為validate_字段屬性名
2.全局驗(yàn)證器,使用時(shí)把定義好的函數(shù)放入驗(yàn)證器里
文件上傳表單
驗(yàn)證器中一般有FileRequired驗(yàn)證是否有文件對象,F(xiàn)ileAllowed驗(yàn)證文件類型
可以先在客戶端進(jìn)行簡單的類型過濾? <input? xxxxx? accept=".jpg,.png">
在服務(wù)器端可以限制文件傳輸?shù)拇笮?/b>,進(jìn)行記憶
處理上傳的文件? ? f=form.photo.data
之后處理文件名,有三種處理方式
1.原文件名
2.使用過濾后的文件名 secure_filename()
3.統(tǒng)一重命名filename=random_filename(f.filename)
保存文件放到form目錄下的uploads文件夾
設(shè)定一下路徑app.config['UPLOAD_PATH']=os.path.join(app.root_path,'uploads')
之后調(diào)用save方法保存
f.save(os.path.join(app.config['UPLOAD_PATH'],filename))
關(guān)于這塊的代碼,gpt解釋
os.path.join(app.root_path, 'uploads')
os.path.join()是一個(gè)用于智能拼接路徑的函數(shù)。它確保在不同操作系統(tǒng)(如 Windows 和 Linux)上都能正確地拼接路徑。
app.root_path是 Flask 應(yīng)用的根目錄路徑。這個(gè)路徑是應(yīng)用程序所在的位置。
'uploads'是你想要創(chuàng)建或使用的子目錄的名稱。
保存后可以寫一個(gè)視圖來顯示圖片
return send_form_directory(app.config['UPLOAD_PATH'],filename)
然后在模板中
<img src="{{ url_for(''get_file",filename=filename) }}>
多文件上傳的實(shí)現(xiàn)
客戶端中字段加上multiple
表單類里使用MultipleFileField
服務(wù)端使用for i in request.files.getlist('photo')
對文件逐一處理
如果要復(fù)習(xí)的話,主要在以下幾點(diǎn)
表單類的字段是如何定義的
渲染表單的具體代碼
form表單的三個(gè)屬性分別用于做什么
服務(wù)器端的驗(yàn)證
在模板中還可以渲染錯(cuò)誤信息
在服務(wù)器端可以限制文件傳輸?shù)拇笮?br>
處理文件名
如何保存文件
多文件上傳如何實(shí)現(xiàn)
以上就是復(fù)習(xí)的重點(diǎn)