搜索
首页后端开发Python教程烧瓶的简介:添加联系页面

在这个迷你系列的上一篇文章中,我们使用Blask构建了一个简单的网站,其中包含“主页”和“关于”页面,使用广义工作流,我们可以将其应用于其他基于烧瓶的Web应用程序。在本课程中,我将演示如何添加一个允许用户向您发送消息的联系页面。

>本文中使用的代码可以在GitHub上找到。 


烧瓶扩展

烧瓶没有架子上的许多功能,因此很容易拿起并学习。没有用于添加和更新内容的数据库交互或管理员接口的对象相关映射器。它仅提供一小部分功能,其中两个功能已经使用了 - render_template()

而不是使用额外功能运输,烧瓶的扩展模型允许您根据需要添加功能。烧瓶扩展名是一个软件包,可在您的应用中添加特定功能。例如,Blask-sqlalchemy向您的应用增加了数据库支持,而Blask-Login则添加了登录/注销支持。 You can find a full list of extensions in the Flask Extension Registry.


To create a contact page, we'll use Flask-WTF to handle and validate form data and Flask-Mail to email the form data to you.

Flask-WTF

flask-wtf diagramFlask-WTF is an extension that handles and validates form data.这意味着什么?查看以下图:
  1. >用户向包含表格的网页发布get请求。
  2. >
  3. >用户填写表单。>
  4. >
  5. >
  6. >

按钮,通过post request >>如果所有字段验证,则在管道中的下一步中使用表单信息。

>

>一个联系页面将为用户的名称,电子邮件,主题和消息提供字段。在烧瓶中,我们将将表单张贴到routes.py 内部的功能中。此功能称为表单处理程序。我们将运行一些验证检查,如果任何输入没有通过Muster,我们将刷新页面以显示描述错误的消息。一旦所有验证检查通过,我们将使用表单数据进行下一步:将消息发送给您,网站所有者。 这是表单处理和验证的工作方式。现在我们实际定义表格的位置?我们可以使用python脚本的动作属性编写HTML。 Python脚本将镜像表单以捕获每个表单字段并验证表单字段数据。但是,如果我们使用此策略,我们实际上将两次定义表格 - 前端和后端一次。

>只能在Python脚本中定义一次形式将是很棒的。这正是玻璃WTF允许我们做的事情。我们将仅在Python脚本中定义一次表单,然后让Flask-WTF为我们生成表格的HTML。所有这一切的目的是将呈现与内容分开。

>足够的chat不休。让我们代码。

>创建一个表单

作为第一步,让我们回到上次创建的孤立开发环境中。

>

$ 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

>与 home.html
$ cd flaskapp<br>$ . bin/activate<br>
和> html它自己的文字。我们首先通过将操作属性设置为 /联系人映射到函数contact()>执行,其中命名为contactform> class将映射到函数contact()类别,将表格映射到web template contact.html。 html。渲染的html被发送回到。。
  • routes.py> button。>
  • >通过使用Form Validators执行表单验证。幸运的是,Blask-WTF配备了许多有用的内置验证器,我们可以立即使用。我们将将这些验证器从[validators = datarequired()]
  • 的datarequired 内置验证器放入每个表单字段以验证其存在。 Notice that this validator is inside a Python list, meaning that we can easily add more validators to this list.
  • Next, let's require email addresses to match the pattern Email()
  • validator requires the email_validator package to be installed, so install it with pip as follows:
  • Update
  • app/forms.py as以下内容:
  • >用于我们的表单验证。
  • 闪烁的错误消息
  • 回顾原始图,如果任何验证检查失败,则联系页面应使用错误消息重新填充,以便用户可以解决错误并重试。此错误消息仅在验证失败时才出现并在确定错误时消失。>我们的下一步是在验证失败时向用户发送此类临时错误消息。烧瓶通过在脚本开头的flash()

    函数。

    $ 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 flost的邮件

    变量,我们可以17)。
    {% extends "layout.html" %}<br>{% block content %}<br><br>  <h2 id="Contact">Contact</h2><br>  <br>  

    {{ form.hidden_tag() }}
    {{ form.name.label }}
    {{ form.name }}
    {{ form.email.label }}
    {{ form.email }}
    {{ form.subject.label }}
    {{ form.subject }}
    {{ form.message.label }}
    {{ form.message }}
    {{ form.submit }}

    {% endblock %}

    >您可能已经看到小组使用联系电子邮件地址,例如support@example.com。如果您拥有自己的域并可以创建一个新的联系电子邮件地址,请继续并将该电子邮件地址放在请求中。我们已经在form.validate()中添加了逻辑。因此,让我们继续前进,在消息类中添加逻辑,将主题行,“来自”地址和“到”地址。然后,我们使用app.config [“ mail_username”]收集联系表的主题字段数据,因此这就是我们在这里使用的内容。该电子邮件将发送到您的个人电子邮件地址,以便您可以接收并响应新消息。接下来,我们将编写电子邮件本身(第11-14行)。我们包括用户的姓名,电子邮件和消息。我使用Python的字符串格式化运算符邮件。SEND(MSG)

    发送电子邮件(第15行)。

    让我们看看一切是否有效。访问http:// localhost:5000/联系人,填写每个字段,然后单击“发送”。如果一切顺利,您将收到来自烧瓶应用程序的新电子邮件。

    >整理

    >

    >我们的倒数第二步是删除临时占位符字符串,如果... else

    >语句。

    > 在成功提交的触点表格中,我们会从

    py

    froce中发送成功标志。 contact.html

    >我们将放置true ,我们将显示感谢消息。否则,我们将显示联系表。 %}

    表示,如果我们从 routes.py

    发送的成功标志设置为&lt; p&gt;谢谢您的消息。我们很快就会与您联系。否则,请按照&lt; header&gt; 元素遵循if ... else 语句。让我们在联系页面(第8行)。文章,我们在烧瓶应用程序中添加了一个包含表格的联系页面。表格出现在Web应用程序中的几个地方,最著名的是在注册和登录期间。可以适应此工作流程以满足这些需求。在创建联系页面时,我们学会了如何使用烧瓶扩展。

    $ cd flaskapp<br>$ . bin/activate<br>

    烧瓶扩展是简单,功能强大的工具,可扩展基于烧瓶的应用的功能。>>

    >查看烧瓶扩展注册表,以探索您可以集成到应用程序中的更多扩展名。

  • 以上是烧瓶的简介:添加联系页面的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    Numpy数组与使用数组模块创建的数组有何不同?Numpy数组与使用数组模块创建的数组有何不同?Apr 24, 2025 pm 03:53 PM

    numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,内存效率段

    Numpy数组的使用与使用Python中的数组模块阵列相比如何?Numpy数组的使用与使用Python中的数组模块阵列相比如何?Apr 24, 2025 pm 03:49 PM

    numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

    CTYPES模块与Python中的数组有何关系?CTYPES模块与Python中的数组有何关系?Apr 24, 2025 pm 03:45 PM

    ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero

    在Python的上下文中定义'数组”和'列表”。在Python的上下文中定义'数组”和'列表”。Apr 24, 2025 pm 03:41 PM

    Inpython,一个“列表” isaversatile,mutableSequencethatCanholdMixedDatateTypes,而“阵列” isamorememory-效率,均质sepersequeSequeSequeReDencErequiringElements.1)

    Python列表是可变还是不变的?那Python阵列呢?Python列表是可变还是不变的?那Python阵列呢?Apr 24, 2025 pm 03:37 PM

    pythonlistsandArraysareBothable.1)列表Sareflexibleandsupportereceneousdatabutarelessmory-Memory-Empefficity.2)ArraysareMoremoremoremoreMemoremorememorememorememoremorememogeneSdatabutlesserversEversementime,defteringcorcttypecrecttypececeDepeceDyusagetoagetoavoavoiDerrors。

    Python vs. C:了解关键差异Python vs. C:了解关键差异Apr 21, 2025 am 12:18 AM

    Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

    Python vs.C:您的项目选择哪种语言?Python vs.C:您的项目选择哪种语言?Apr 21, 2025 am 12:17 AM

    选择Python还是C 取决于项目需求:1)如果需要快速开发、数据处理和原型设计,选择Python;2)如果需要高性能、低延迟和接近硬件的控制,选择C 。

    达到python目标:每天2小时的力量达到python目标:每天2小时的力量Apr 20, 2025 am 12:21 AM

    通过每天投入2小时的Python学习,可以有效提升编程技能。1.学习新知识:阅读文档或观看教程。2.实践:编写代码和完成练习。3.复习:巩固所学内容。4.项目实践:应用所学于实际项目中。这样的结构化学习计划能帮助你系统掌握Python并实现职业目标。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    Atom编辑器mac版下载

    Atom编辑器mac版下载

    最流行的的开源编辑器

    MinGW - 适用于 Windows 的极简 GNU

    MinGW - 适用于 Windows 的极简 GNU

    这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    WebStorm Mac版

    WebStorm Mac版

    好用的JavaScript开发工具