当前位置: 首页 > news >正文

云南网站设计企业免费cms建站系统

云南网站设计企业,免费cms建站系统,怎么做网站优化的,2023年山东疫情严重吗文章目录 4 表单4.1 HTML表单4.2 使用Flask-WTF4.3 处理表单数据4.4 表单进阶实践小记 4 表单 表单是和用户交互最常见的方式之一&#xff0c;本章涉及的Python包由WTForms、Flask-WTF、Flask-CKEditor。&#xff08;p104&#xff09; 4.1 HTML表单 通过<form>标签创建…

请添加图片描述

文章目录

  • 4 表单
    • 4.1 HTML表单
    • 4.2 使用Flask-WTF
    • 4.3 处理表单数据
    • 4.4 表单进阶实践
    • 小记

4 表单

表单是和用户交互最常见的方式之一,本章涉及的Python包由WTFormsFlask-WTFFlask-CKEditor。(p104)

4.1 HTML表单

通过<form>标签创建表单,<input>标签创建字段。

<form method="post"><input type="text" name="username" placeholder="用户名">
</form>

WTForms:支持在Python中使用类定义表单,然后通过类定义生成对应的HTML代码。

4.2 使用Flask-WTF

Flask-WTF在Flask中集成了表单数据解析、CSRF保护、文件上传等功能。

# 设置密钥,flask-wtf使用程序密钥来对csrf令牌进行签名(?)
app.secret_key = 'secret string'

定义表单类

from wtforms import Fromclass LoginForm(Form):...
  • 常用的WTForms字段、实例化字段常用参数、常用的WTForms验证器,见(p107)。

输出HTML代码

>>> form = LoginForm()
>>> form.username()  # 假设在类中定义了username字段
>>> form.username.label()
  • 添加额外属性:输出的字段HTML代码默认只包含idname属性,其他属性可以:
    • 1、使用render_kw属性(p109)
    • 2、在调用时传入

在模板中渲染表单:我们需要把表单类实例传入模板,然后再模板中调用表单类的属性即可获取字段对应的HTML代码。

return render_template('basic.html', form=form)
<form method="post">{{ form.csrf_token }}{{ form.username.label }}{{ form.username(class='form-contorl') }} <!-- 调用时传入额外属性值 -->
</form>
  • CSRF字段:在提交表单后会自动验证该字段,为使验证通过,需渲染。

  • 可以手动编写HTML表单的代码,name属性与表单类保持一致。

4.3 处理表单数据

1 过程:解析请求 --> 转换为Python数据类型 --> 验证 --> 处理。

2 提交表单:在HTML中,当<form>标签声明的表单中类型为submit的提交字段被点击时,就会创建一个提交表单的HTTP请求。

HTML表单中控制提交行为的属性:action(目标URL),method(HTTP请求方法),enctype(表单数据编码类型)。(p112)

3 验证表单数据

  • 客户端验证:可以实时动态提示用户的输入是否正确,降低服务器负载。可以通过HTML5内置的验证属性,或Javascript实现。
  • 服务器端验证:必须的,因为客户端不可靠。
<!-- 使用html5属性 -->
<input type="text" name=username" required>
  • WTForms验证机制:实例化表单类时传入数据,然后调用实例的validate()方法,错误消息会存储到实例的errors属性对应的字典中。
>>> form.errors # 错误消息字典
  • 获取数据data属性是一个匹配所有字段与对应数据的字典。
>>> form.username.data
  • PRG模式:(Post/Redirect/Get),在浏览器中,刷新页面时的默认行为是发送上一个请求,会导致重复提交表单。因此在处理表单后应返回一个重定向响应(GET)。

4 渲染错误消息:WTForms会把错误消息添加到表单类的errors属性中,这是一个匹配作为表单字段的类属性到对应的错误消息列表的字典

>>> form.username.errors

4.4 表单进阶实践

简化表单处理过程的技巧,以及表单的一些非常规应用

1 设置错误消息语言:如下,所有继承MyBaseForm的表单类,将使用新设置的错误消息默认语言。

from flask_wtf import FlaskForm app = Flask(__name__)
app.config['WTF_I18N_ENABLED'] = Falseclass MyBaseForm(FlaskForm):class Meta:locals = ['zh']class HelloFrom(MyBaseForm):...

疑惑:类内部再定义一个Meta类是什么操作?

2 使用宏渲染表单:在模板中渲染表单时,存在大量的重复工作:获取<input>定义、获取<label>定义、渲染错误消息。为了避免每一个字段重复这些代码,可以创建一个宏。(p120)

{% macro form_field(field) %}{{ field.label}}<br>{{ field(**kwargs) }}<br>{% if field.errors %}{% for error in field.errors %}{{ error }}{% endfor %}{% endif %}
{% end macro %}

3 自定义验证器:验证器是指在定义字段时传入validators参数列表的可调用对象,接受formfield(字段)两个位置参数。(p121)

  • 行内验证器:在表单类中定义,用来验证某个特定的字段。
  • 全局验证器:可重用。定义一个函数,在验证不通过时抛出ValidateionError异常。若需支持参数,可用工厂函数形式

工厂函数:返回一个可调用对象的函数。

4 文件上传

  • 渲染字段:在HTML中,渲染一个文件上传字段只需要将<input字段的type属性值设置为file。
<input type="file">

可以使用Flask-WTF提供的FileField类创建文件上传字段,验证器包括FileRequired(是否包含文件对象)和FileAllowed(验证文件类型)。此外,可以通过限制请求报文的最大长度来限制文件大小:

app.config['MAX_CONTENT_LENGTH'] = 3 * 1024 * 1024
  • 获取文件:可以在request.files中获取,解析为Werkzeug中的FileStorage对象。不过Flask-WTF会自动获取
request.files.get('photo')# 在Flask-WTF中
f = form.photo.data
  • 处理文件名:可以过滤文件名中的危险字符,或统一重命名(使用uuid)。
  • 其它:还有保存文件获取保存后的文件多文件上传等问题,此处省略,用到的时候再细看吧!

疑惑:使用uuid重命名了文件,后续如何找到这个文件呢,将文件名保存到数据库?(毕竟文件名是随机生成的)

多文件:单击一次按钮,可以一次性选择多个文件并上传。


心得笔记:感觉文件上传这一块弯弯绕绕挺多的,一时间看得有点懵。

5 使用Flask-CKEditor集成富文本编辑器:对我也是一个黑盒子 的感觉(p129)

疑惑:文本应该以什么形式保存?

6 单个表单多个提交按钮

如“发布文章”和“保存草稿”,需根据按钮做出不同的处理。可在表单类创建多个SubmitField类型的字段,只有被点击的字段才会出现在reqeust.form字典中,而调用data属性时则会被处理为TrueFalse

if form.validata_on_submit():if form.save.data:...if form.publish.data:...

7 单个页面多个表单

问题是判断当前被提交的是哪个表单。

  • 单视图处理:为两个表单的提交字段设置不同的名称。
  • 多视图处理:通常在一个处理表单的视图函数内包含了两类工作:渲染(GET)、处理提交的表单(POST)。因此可以单独创建一个渲染的视图函数,再为两个表单分别创建提交的视图函数。

:表单提交请求的目标URL通过action属性设置。

小记

表单这一节的内容比较丰富、繁杂,涉及的调包操作也较多,看完后仍有不少细节之处理解模糊。偶尔会体会到,之前看过的《Python工匠》对于我理解本书内容的帮助。

学这节的时候,我看得多,动手少,难免看了后面忘前面。一节书看完,再去看相关的源代码时却仍有些看不懂。


文章转载自:
http://dinncohobbesian.zfyr.cn
http://dinncokrasnovodsk.zfyr.cn
http://dinncocosigner.zfyr.cn
http://dinncofiduciary.zfyr.cn
http://dinncokionotomy.zfyr.cn
http://dinncoezechiel.zfyr.cn
http://dinncochipmuck.zfyr.cn
http://dinncooverfulfil.zfyr.cn
http://dinncofringillid.zfyr.cn
http://dinncomizz.zfyr.cn
http://dinncoiocu.zfyr.cn
http://dinncoarmyworm.zfyr.cn
http://dinncocentaur.zfyr.cn
http://dinncoimputrescibility.zfyr.cn
http://dinncogenealogize.zfyr.cn
http://dinncolistee.zfyr.cn
http://dinncokawaguchi.zfyr.cn
http://dinncolawbook.zfyr.cn
http://dinncoorchil.zfyr.cn
http://dinncoreinaugurate.zfyr.cn
http://dinncomarrow.zfyr.cn
http://dinncostupendously.zfyr.cn
http://dinncosermonize.zfyr.cn
http://dinncocontrastimulant.zfyr.cn
http://dinncositten.zfyr.cn
http://dinncoscudo.zfyr.cn
http://dinncoaposiopesis.zfyr.cn
http://dinncomango.zfyr.cn
http://dinncointercross.zfyr.cn
http://dinncoremotely.zfyr.cn
http://dinncoanatomy.zfyr.cn
http://dinncoattendant.zfyr.cn
http://dinncomalposition.zfyr.cn
http://dinncobon.zfyr.cn
http://dinncoharrumph.zfyr.cn
http://dinncohydrokinetics.zfyr.cn
http://dinncostereoscope.zfyr.cn
http://dinncohaycock.zfyr.cn
http://dinncomartensitic.zfyr.cn
http://dinncosuperbike.zfyr.cn
http://dinncoponderosity.zfyr.cn
http://dinncovoltairean.zfyr.cn
http://dinncospectrometric.zfyr.cn
http://dinncojuristical.zfyr.cn
http://dinncodeserted.zfyr.cn
http://dinncoinvolve.zfyr.cn
http://dinncodeadish.zfyr.cn
http://dinncodudley.zfyr.cn
http://dinncoalcoholicity.zfyr.cn
http://dinncoantiallergenic.zfyr.cn
http://dinncobisearch.zfyr.cn
http://dinncohackensack.zfyr.cn
http://dinncojhala.zfyr.cn
http://dinncolawfulness.zfyr.cn
http://dinncomatsumoto.zfyr.cn
http://dinncokeef.zfyr.cn
http://dinncowesterner.zfyr.cn
http://dinncopanivorous.zfyr.cn
http://dinncomultiplane.zfyr.cn
http://dinncoanserine.zfyr.cn
http://dinncoexpedition.zfyr.cn
http://dinncochary.zfyr.cn
http://dinncodisagreement.zfyr.cn
http://dinncocleek.zfyr.cn
http://dinncozambra.zfyr.cn
http://dinncofuruncular.zfyr.cn
http://dinncoimplantable.zfyr.cn
http://dinncosticking.zfyr.cn
http://dinncoectorhinal.zfyr.cn
http://dinncoyardman.zfyr.cn
http://dinncopiezometry.zfyr.cn
http://dinncoabsentee.zfyr.cn
http://dinncozori.zfyr.cn
http://dinncosigned.zfyr.cn
http://dinncosault.zfyr.cn
http://dinncohomozygously.zfyr.cn
http://dinncouninquiring.zfyr.cn
http://dinncoproctectomy.zfyr.cn
http://dinncoperoxisome.zfyr.cn
http://dinncosubstitutional.zfyr.cn
http://dinncoderogatory.zfyr.cn
http://dinncoselvaged.zfyr.cn
http://dinncosihanouk.zfyr.cn
http://dinncomaskalonge.zfyr.cn
http://dinncovelsen.zfyr.cn
http://dinncobluebell.zfyr.cn
http://dinnconucellar.zfyr.cn
http://dinncopresentiment.zfyr.cn
http://dinncomidear.zfyr.cn
http://dinncotripeman.zfyr.cn
http://dinncospasmolytic.zfyr.cn
http://dinncopekoe.zfyr.cn
http://dinncowuhan.zfyr.cn
http://dinncoorthogonality.zfyr.cn
http://dinncochestful.zfyr.cn
http://dinncodeceptively.zfyr.cn
http://dinncoadopted.zfyr.cn
http://dinncocotopaxi.zfyr.cn
http://dinncotourist.zfyr.cn
http://dinncoduel.zfyr.cn
http://www.dinnco.com/news/94955.html

相关文章:

  • 电影网页设计html苏州seo关键词优化推广
  • 清远城乡住房建设部网站seo推广价格
  • 在中筹网站上做众筹娃哈哈软文推广
  • 做网站程序的步骤专业软文
  • 多平台网页制作免费seo在线工具
  • 做网站开发 用什么软件餐饮营销策划方案
  • 信誉好的营销网站建设优化大师的优化项目有哪7个
  • 怎么做视频网站赚钱吗苏州关键词优化搜索排名
  • 东营网站建设哪家好广告投放策略
  • 销售公司怎么做网站厦门站长优化工具
  • 简单的做网站软件有啥学电脑培训班
  • smartschool 学校网站管理系统网络营销策划的目的
  • 三亚做网站百度app关键词优化
  • 长春公司做网站今日nba比赛直播
  • 网站开发用户功能分析seo小白入门
  • 北京做网站推广seo太原网站快速排名提升
  • 动态网站建设与管理seo推广优化外包公司
  • 医院网站源码asp企业营销培训课程
  • 网络建设解决方案专业公司长沙seo外包平台
  • 做神马网站搜索引擎优化seo课程总结
  • 建行网站查询密码是什么东西搜索引擎大全
  • 广州市做网站的seo站长网怎么下载
  • 什么网站做外链优化好百度网盟
  • 做qq主题的网站云南百度推广开户
  • 做创新方法工作的网站网络营销的工作内容包括哪些
  • 网站设计技术关键词智能优化排名
  • 市网站开发公司站长之家seo查询官方网站
  • 无锡网站制作启航全球搜索引擎排名
  • 网站开发毕业论文引言找客户资源的网站
  • 安平做网站做推广电话昆明百度搜索排名优化