在这个迷你系列的上一篇文章中,我们使用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>
的新文件,然后将其放在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中文网其他相关文章!