Flask模板和wtforms

Flask模板和wtforms

一、模板

在 Jinja2 模板引擎中,可以使用各种功能来渲染变量、进行循环和逻辑判断,这与 Django 的模板系统有很多相似之处,但也存在一些差异。

1.渲染变量

在 Jinja2 中,可以通过使用双大括号 {{ }} 来渲染变量。

<td>{{k}}</td>
<td>{{v.name}}</td>
<td>{{v['name']}}</td>
<td>{{v.get('name')}}</td>

2.循环

Jinja2 使用 {% for %} 标签来进行循环

{% for k,v in user_dict.items() %}
<tr>...
</tr>
{% endfor %}

3.逻辑判断

Jinja2 使用 {% if %} 标签来进行逻辑判断

{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}

4.函数调用

在 Flask 中,可以将函数传递给模板并在模板中调用它们。

这与 Django 不同,Django 通常要求在视图函数中处理所有逻辑,然后将结果传递给模板。

@app.route('/')
def index():return render_template('index.html', ff=func1)
{{ ff('六五') }}
{{ ff('六五')|safe }}   //确保渲染的内容不会被自动转义

5.小结

  • Jinja2 的模板语法与 Django 的模板语法非常相似,但有一些小的差异。
  • 在 Flask 中,可以将函数传递给模板,并在模板中直接调用它们,这是 Flask 和 Django 模板系统的一个主要区别。
  • Markup 类用于在 Flask 中标记内容为安全的,防止自动转义。
  • {% for %}{% if %} 标签用于循环和条件判断。
  • |safe 过滤器用于防止自动转义。

二、wtforms

WTForms 是一个表单处理库,它可以帮助我们在 Flask 应用中轻松创建表单,进行数据验证,并与前端模板集成。

1. 安装模块

pip install wtforms

2.使用 WTForms 创建表单

  • 登录表单示例
class LoginForm(Form):name = simple.StringField('用户名', [validators.DataRequired('用户名不能为空.'),validators.Length(min=6, max=18, '用户名长度必须大于6且小于18')], widget=widgets.TextInput(), render_kw={'class': 'form-control'})pwd = simple.PasswordField('密码', [validators.DataRequired('密码不能为空.'),validators.Length(min=8, '密码长度必须大于8'),validators.Regexp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}','密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'})
  • 注册表单示例
class RegisterForm(Form):# 其他字段定义...pwd_confirm = simple.PasswordField('重复密码', [validators.DataRequired('重复密码不能为空.'),validators.EqualTo('pwd', '两次密码输入不一致')], widget=widgets.PasswordInput(), render_kw={'class': 'form-control'})# 自定义验证方法def validate_pwd_confirm(self, field):if field.data != self.data['pwd']:raise validators.StopValidation("密码不一致")

3.创建路由和视图函数

在 Flask 应用中,我们为表单创建路由,并在对应的视图函数中处理 GET 和 POST 请求。

  • 登录和注册视图

  • @app.route('/login', methods=['GET', 'POST'])
    def login():form = LoginForm()if request.method == 'POST' and form.validate():print('用户提交数据通过格式验证:', form.data)return render_template('login.html', form=form)
    
  • @app.route('/register', methods=['GET', 'POST'])
    def register():form = RegisterForm()if request.method == 'POST' and form.validate():print('用户提交数据通过格式验证:', form.data)return render_template('register.html', form=form)
    

4.渲染表单

在 HTML 模板中,我们使用 Jinja2 模板语法来渲染表单字段和错误信息。

  • 登录表单模板 login.html

    • <form method="post"><p>{{ form.name.label }} {{ form.name }} {{ form.name.errors[0] }}</p><p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors[0] }}</p><input type="submit" value="提交">
      </form>
      
  • 注册表单模板 register.html

    • <form method="post" novalidate>{% for field in form %}<p>{{ field.label }}: {{ field }} {{ field.errors[0] }}</p>{% endfor %}<input type="submit" value="提交">
      </form>
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python编程题2

1. 编写函数isodd(x)&#xff0c;若x不是整数&#xff0c;给出提示后退出程序&#xff1b;如果x为奇数&#xff0c;返回True&#xff0c;如果x为偶数&#xff0c;返回False。 def isodd(x):if int(x)!x:print("x不是整数&#xff0c;程序退出")returnelif x//2 ! x/…

如何使用VScode创建和上传Arduino项目

Visual Studio Code &#xff08;VS Code&#xff09; 是一种非常流行的通用集成开发环境 &#xff08;IDE&#xff09;。IDE 是一种将文本编辑器、编程界面、调试视图和项目管理集成在一个地方的软件。这个开源项目由微软领导&#xff0c;可以在所有操作系统上运行。使 VS Cod…

如何在CSS中设置px值

在CSS中设置px&#xff08;像素&#xff09;值非常简单。px是CSS中最常用的长度单位之一&#xff0c;用于指定元素的大小、位置、间距等。 以下是一些示例&#xff0c;展示如何在CSS中使用px值&#xff1a; 设置元素宽度和高度 css复制代码 .box { width: 200px; /* 设置元素…

8-Pandas iteration遍历

Pandas iteration遍历 遍历是众多编程语言中必备的一种操作&#xff0c;比如 Python 语言通过 for 循环来遍历列表结构。那么 Pandas 是如何遍历 Series 和 DataFrame 结构呢&#xff1f;我们应该明确&#xff0c;它们的数据结构类型不同的&#xff0c;遍历的方法必然会存在差…

介绍两个压测工具pgbench\sysbench,可视化监控工具NMON

性能评估做不好&#xff0c;开会又领导点名叼了。/(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~ 挨叼了&#xff0c;也要写文章&#xff0c;记录下我的笔记。 写篇文章 对数据库、OS性能的性能评估&#xff0c;需要选择合适的压测工具&#xff0c;给找出数据库的运行瓶颈 pgbench 这是…

AI音乐的何去何从

引言 在过去的一个月里&#xff0c;多个先进的音乐生成大模型相继上线。这些AI模型不仅降低了普通人创作音乐的门槛&#xff0c;还在音乐圈内引发了关于AI是否会彻底颠覆传统音乐创作的广泛讨论。在短暂的兴奋过后&#xff0c;人们开始理性地审视这些AI产品的版权归属问题&…

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率&#xff1f;2 图像超分辨率通常有哪些方法&#xff1f;&#xff08;1&#xff09;基于插值的方法&#xff08;2&#xff09;基于重建的方法&#xff08;3&#xff09;基于学习的方法&#xff08;LR im…

Leetcode 78 数组子集

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1…

docker拉取Redis

拉取Redis redis的读写分离&#xff1a;https://blog.csdn.net/qq_51076413/article/details/123462448 Java整合Jedis&#xff1a;https://blog.csdn.net/qq_51076413/article/details/123462857 Java整合Redis&#xff1a;https://blog.csdn.net/qq_51076413/article/details…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-46语义分割和数据集

46语义分割和数据集 # 图像分割和实例分割 """ 图像分割将图像划分为若干组成区域&#xff0c;这类问题的方法通常利用图像中像素之间的相关性。 它在训练时不需要有关图像像素的标签信息&#xff0c;在预测时也无法保证分割出的区域具有我们希望得到的语义。 图…

企业im(即时通讯)作为安全专属的移动数字化平台的重要工具

企业IM即时通讯作为安全专属的移动数字化平台的重要工具&#xff0c;正在越来越多的企业中发挥着重要的作用。随着移动技术和数字化转型的发展&#xff0c;企业对于安全、高效的内部沟通和协作工具的需求也越来越迫切。本文将探讨企业IM即时通讯作为安全专属的移动数字化平台的…

JAVA学习笔记-JAVA基础语法-DAY19-File类、递归

第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) &#xff1a;通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(St…

【Science重磅】以纳米级分辨率重建的人类大脑皮层颗粒片段

翻查五月的Science发现一个有意思的项目《A petavoxel fragment of human cerebral cortex reconstructed at nanoscale resolution》由美国哈佛大学Jeff W. Lichtman 和美国谷歌研究中心 Viren Jain 共同合作 据介绍&#xff0c;充分了解人类大脑是如何工作的机理&#xff0c…

[Redis]主从模式

启动主从复制 由于我们只有一台机器&#xff0c;所以我们只能在机器上开多个redis程序来演示不同的机器 因为一个端口号只能被一个进程绑定&#xff0c;所以我们需要修改配置&#xff0c;绑定不同的端口号&#xff0c;并且还要修改工作目录&#xff08;数据持久化的位置&#…

七天速通javaSE:第六天 对象:类与对象

文章目录 前言一、认识对象1. 编程思想1.1 面向过程1.2 面向对象 2. 面向对象编程&#xff08;oop&#xff09; 二、再识方法1. 修饰符2. 参数的传递与赋值2.1 值传递2.2 引用传递 总结&#xff1a; 三、创建与初始化对象1. 类与对象的关系2. 创建与初始化对象 四、构造函数1. …

mac查看服务端口

在macOS上查看当前打开的端口及对应的服务&#xff0c;可以使用以下命令&#xff1a; 使用netstat命令&#xff08;需要安装netstat&#xff0c;可以通过安装net-tools来获取&#xff09; netstat -an | grep LISTEN

Debugging using Visual Studio Code

One of the key features of Visual Studio Code is its great debugging support. VS Code’s built-in debugger helps accelerate your edit, compile, and debug loop. Debugger extensions VS Code 内置了对 Node.js 运行时的调试支持,可以调试 JavaScript、TypeScript…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手&#xff0c;该工具基于GPT-4-200k设计并实现其功能&#xff0c;可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

Echarts地图实现:杭州市困难人数分布【动画滚动播放】

Echarts地图实现&#xff1a;杭州市困难人数分布 实现功能 杭州市地区以及散点图分布结合的形式数据展示动画轮播可进去杭州市下级地区可返回杭州市地图展示 效果预览 实现思路 使用ECharts的地图和散点图功能结合实现地区分布通过动画轮播展示数据变化实现下级地区数据的展…

【Python】已解决ModuleNotFoundError: No module named ‘tensorflow‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘tensorflow‘ 一、分析问题背景 ModuleNotFoundError: No module named ‘tensorflow’ 是一个常见的错误&#xff0c;通常在Pytho…