在這個迷你係列的上一篇文章中,我們使用Blask構建了一個簡單的網站,其中包含“主頁”和“關於”頁面,使用廣義工作流,我們可以將其應用於其他基於燒瓶的Web應用程序。在本課程中,我將演示如何添加一個允許用戶向您發送消息的聯繫頁面。
>本文中使用的代碼可以在GitHub上找到。燒瓶沒有架子上的許多功能,因此很容易拿起並學習。沒有用於添加和更新內容的數據庫交互或管理員接口的對象相關映射器。它僅提供一小部分功能,其中兩個功能已經使用了 - render_template()
。而不是使用額外功能運輸,燒瓶的擴展模型允許您根據需要添加功能。燒瓶擴展名是一個軟件包,可在您的應用中添加特定功能。例如,Blask-sqlalchemy向您的應用增加了數據庫支持,而Blask-Login則添加了登錄/註銷支持。 You can find a full list of extensions in the Flask Extension Registry.
Flask-WTF
按鈕,通過post request >>如果所有字段驗證,則在管道中的下一步中使用表單信息。
> >一個聯繫頁面將為用戶的名稱,電子郵件,主題和消息提供字段。在燒瓶中,我們將將表單張貼到routes.py 內部的功能中。此功能稱為表單處理程序。我們將運行一些驗證檢查,如果任何輸入沒有通過Muster,我們將刷新頁面以顯示描述錯誤的消息。一旦所有驗證檢查通過,我們將使用表單數據進行下一步:將消息發送給您,網站所有者。 這是表單處理和驗證的工作方式。現在我們實際定義表格的位置?我們可以使用python腳本的動作屬性編寫HTML。 Python腳本將鏡像表單以捕獲每個表單字段並驗證表單字段數據。但是,如果我們使用此策略,我們實際上將兩次定義表格 - 前端和後端一次。>只能在Python腳本中定義一次形式將是很棒的。這正是玻璃WTF允許我們做的事情。我們將僅在Python腳本中定義一次表單,然後讓Flask-WTF為我們生成表格的HTML。所有這一切的目的是將呈現與內容分開。
>
$ cd flaskapp<br>$ . bin/activate<br>>
pip install -U Flask-WTF<br>
現在,我們已經輸入並激活了開發環境,我們可以安全地安裝flask-wtf:
routes.py
,它映射到函數。讓我們不要用無關的代碼混亂。相反,創建一個名為from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br> name = StringField("Name")<br> email = StringField("Email")<br> subject = StringField("Subject")<br> message = TextAreaField("Message")<br> submit = SubmitField("Send") <br>forms.py
的新文件,然後將其放在app/文件夾中。
app/forms.pys.py
from flask import Flask, render_template<br>from forms import ContactForm<br>
我們剛剛創建了一個表單。我們做了什麼?首先,我們從Blask-wtf Contactform導入了一些有用的類腳本。
app/utaes.py
接下來,配置flask-wtf來處理稱為跨站點請求偽造(CSRF)的安全性利用(CSRF)。在一個完美的世界中,您的服務器僅處理屬於您的Web應用程序的表單。換句話說,您的服務器只能處理和驗證您創建的表單。但是,攻擊者有可能在自己的網站上創建表單,填寫惡意信息,然後將其提交給您的服務器。如果您的服務器接受這些惡意信息,那麼接下來可能會發生各種壞事。
您可以通過確保表單提交源自您的Web應用程序來防止CSRF攻擊。做到這一點的一種方法是將隱藏在您的HTML /Contact的獨特令牌,函數contact()>中,我們首先在第三行中創建一個新的觸點表單的新實例,並將其發送到第四行中的名為contact.html的網絡模板。不過,我們將很快創建此Web模板。 >我們仍然有一些工作要做。上圖顯示,如果將Get請求發送到服務器,則應將包含表單的網頁檢索並加載到瀏覽器中。如果服務器收到發布請求,則函數應捕獲表單字段數據並檢查是否有效。用python的術語,可以在上一篇文章中向render_template()的if ... else邏輯表示此邏輯,因此在這裡我們導入了更多燒瓶類,名為request>確定當前的http方法是get還是帖子。接下來是contact()函數(第9-13行)。 在郵政請求的情況下,一個字符串指示已發布表格。
此字符串是臨時佔位符,我們將在本文的最後一步中用真實代碼替換。否則,如果請求使用get,我們將返回包含表單的Web模板contact.html。文件夾。
app/app/templates/contact.html
>與
$ cd flaskapp<br>$ . bin/activate<br>和
函數。
$ cd flaskapp<br>$ . bin/activate<br>>
> 在到服務器的聯繫表帖子後,任何驗證失敗都應通過有用的錯誤消息重新加載表單。否則,輸入數據可用於將來處理。再一次,可以在if ... else邏輯中表達此邏輯。發布的錯誤消息表格
,表明該表格已成功提交。接下來,讓我們修改contact.html
,以便它可以接收並顯示這些臨時錯誤消息。請參閱以下塊:pip install -U Flask-WTF<br>
>循環的函數。將此代碼塊添加到
contact.html之後&lt; form&gt;tag。 Pretty。
from flask_wtf import FlaskForm<br>from wtforms import StringField, TextAreaField, SubmitField<br><br><br><br>class ContactForm(FlaskForm):<br> name = StringField("Name")<br> email = StringField("Email")<br> subject = StringField("Subject")<br> message = TextAreaField("Message")<br> submit = SubmitField("Send") <br>
main.css
打開瀏覽器並訪問http:// localhost:5000/contact。將所有字段留為空白,然後單擊發送以測試表單驗證和錯誤消息閃爍工作。
from flask import Flask, render_template<br>from forms import ContactForm<br>這很甜蜜!如果驗證檢查失敗,我們已成功將錯誤消息發送給我們的聯繫表。實際上,我們可以做得更好。與其為所有失敗的驗證檢查提供一個通用錯誤消息,不如為每個失敗的驗證檢查提供一個特定的錯誤消息。例如,如果用戶忘記填寫主題字段,則一條特定的錯誤消息,請輸入您的姓名
。我們可以很容易地完成此操作,因此讓我們首先在每個驗證器中寫下我們的特定錯誤消息。接下來,讓我們修改contact.html以接收並顯示這些特定的錯誤消息。前面,我們依賴於每個表單字段的函數錯誤
屬性來拉出特定的錯誤消息,並使用jinja2 messages和message> class在它們上循環循環,以構成一個新的電子郵件,並包含包含app.config的app.config的app.config [aim_usern appername
{% extends "layout.html" %}<br>{% block content %}<br><br> <h2>Contact</h2><br> <br> <form action="{{ url_for('contact') }}" method=post><br> {{ form.hidden_tag() }}<br> {{ form.name.label }}<br> {{ form.name }}<br> {{ form.email.label }}<br> {{ form.email }}<br> {{ form.subject.label }}<br> {{ form.subject }}<br> {{ form.message.label }}<br> {{ form.message }}<br> {{ form.submit }}<br> </form><br>{% endblock %}<br>
>您可能已經看到小組使用聯繫電子郵件地址,例如support@example.com。如果您擁有自己的域並可以創建一個新的聯繫電子郵件地址,請繼續並將該電子郵件地址放在請求中。我們已經在form.validate()中添加了邏輯。因此,讓我們繼續前進,在消息類中添加邏輯,將主題行,“來自”地址和“到”地址。然後,我們使用app.config [“ mail_username”]收集聯繫表的主題字段數據,因此這就是我們在這裡使用的內容。該電子郵件將發送到您的個人電子郵件地址,以便您可以接收並響應新消息。 接下來,我們將編寫電子郵件本身(第11-14行)。我們包括用戶的姓名,電子郵件和消息。我使用Python的字符串格式化運算符郵件。 SEND(MSG)
發送電子郵件(第15行)。讓我們看看一切是否有效。訪問http:// localhost:5000/聯繫人,填寫每個字段,然後單擊“發送”。如果一切順利,您將收到來自燒瓶應用程序的新電子郵件。
>整理>
>我們的倒數第二步是刪除臨時佔位符字符串,如果... elsepy> 在成功提交的觸點表格中,我們會從
froce中發送成功標誌。 contact.html
。>我們將放置true ,我們將顯示感謝消息。否則,我們將顯示聯繫表。 %}
表示,如果我們從發送的成功標誌設置為&lt; p&gt;謝謝您的消息。我們很快就會與您聯繫。否則,請按照&lt; header&gt; 元素遵循if ... else 語句。讓我們在聯繫頁面(第8行)。文章,我們在燒瓶應用程序中添加了一個包含表格的聯繫頁面。表格出現在Web應用程序中的幾個地方,最著名的是在註冊和登錄期間。可以適應此工作流程以滿足這些需求。在創建聯繫頁面時,我們學會瞭如何使用燒瓶擴展。
$ cd flaskapp<br>$ . bin/activate<br>
燒瓶擴展是簡單,功能強大的工具,可擴展基於燒瓶的應用的功能。 >查看燒瓶擴展註冊表,以探索您可以集成到應用程序中的更多擴展名。
以上是燒瓶的簡介:添加聯繫頁面的詳細內容。更多資訊請關注PHP中文網其他相關文章!