表单

在Web程序中,表单时和用户交互最常见的方式之一。用户注册、登录、撰写文章、编辑设置,无一不用到表单。不过,表单的处理不简单。要创建表单,验证用户输入的内容,向用户显示错误提示,还要获取并保存数据。

WTForms可以做这些事情,WTForms是一个使用python编写的表单库,它使得表单的定义、验证(服务器端)和处理变得非常轻松。下面学习一下web程序中处理表单的方法和技巧。

HTML表单

在html中,表单通过<form>标签来创建,表单中的字段使用<input>标签定义。下面是一个表单:

  1. <form method="post">
  2. <label for="username">Username</label><br>
  3. <input type="text" name="username" placeholder="Ross Gellar"><br>
  4. <label for="password">Password</label><br>
  5. <input type="password" name="password" placeholder="19870308"><br>
  6. <input id="remember" name="remember" type="checkbox" checked>
  7. <label for="remember"><small>Remember me</small></label><br>
  8. <input type="submit" name="submit" value="Log in">
  9. </form>

在html表单中,我们创建<input>标签标示各种输入字段,<label>标签则用来定义字段的标签文字。可以在<from>和<input>标签中使用各种属性来对表单进行设置。

上面的表单被浏览器解析后会生成两个输入框,一个勾选框和一个提交按钮。

运行程序后,在浏览器中输入URL:127.0.0.1:5000/html,会触发视图函数,页面如下:

示例相关文件:
appFrom.py:
  1. #encoding=utf-8
  2. from flask import Flask,render_template,flash,redirect,url_for,session
  3. import os#用不到
  4.  
  5. app = Flask(__name__)
  6. app.secret_key = os.getenv('SECRET_KEY','secret string')#用不到
  7.  
  8. @app.route('/html',methods=['GET','POST'])
  9. def html():
  10. return render_template('pure_html.html')
  11.  
  12. if __name__ == '__main__':
  13. app.run(debug=True)
基模板baseFrom.html:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. {% block head %}
  5. {% block metas %}
  6. <meta charset="UTF-8">
  7. {% endblock metas %}
  8.  
  9. <title>{% block title %}Form - HelloFlask{% endblock %}</title>
  10. <link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
  11. {% block styles %}
  12. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
  13. {% endblock styles %}
  14. {% endblock head %}
  15. </head>
  16. <body>
  17. <nav>
  18. {% block nav %}
  19. <ul>
  20. <li><a href="{{ url_for('html') }}">Home</a></li>
  21. </ul>
  22. {% endblock %}
  23. </nav>
  24. <main>
  25. {% for message in get_flashed_messages() %}
  26. <div class="alert">
  27. {{ message }}
  28. </div>
  29. {% endfor %}
  30. {% block content %}{% endblock %}
  31. </main>
  32. <footer>
  33. {% block footer %}
  34. <small> &copy; 2019 <a href="https://www.cnblogs.com/xiaxiaoxu/" title="xiaxiaoxu's blog">夏晓旭的博客</a> /
  35. <a href="https://github.com/xiaxiaoxu/hybridDrivenTestFramework" title="Contact me on GitHub">GitHub</a> /
  36. <a href="http://helloflask.com" title="A HelloFlask project">Learning from GreyLi's HelloFlask</a>
  37. </small>
  38. {% endblock %}
  39. </footer>
  40. {% block scripts %}{% endblock %}
  41. </body>
  42. </html>

存放表单的子模板:pure_html.html

  1. {% extends 'baseForm.html' %}
  2.  
  3. {% block content %}
  4. <h2>Pure HTML Form</h2>
  5.  
  6. <form method="post">
  7. <label for="username">Username</label><br>
  8. <input type="text" name="username" placeholder="Ross Gellar"><br>
  9. <label for="password">Password</label><br>
  10. <input type="password" name="password" placeholder="19870308"><br>
  11. <input id="remember" name="remember" type="checkbox" checked>
  12. <label for="remember"><small>Remember me</small></label><br>
  13. <input type="submit" name="submit" value="Log in">
  14. </form>
  15. {% endblock %}

WTForms支持在python中使用类定义表单,然后通过类定义生成对应的HTML代码,这种方式更方便,易于重用。因此,除非是非常简单的程序,或者想让表单的定义更加灵活,否则不会再模板中直接使用HTML编写表单。

flask 表单的更多相关文章

  1. flask表单,orm,csrf

    flask表单是flask中最基本的功能. 它是负责HTML页面中数据采集的部分,它由三部分组成:表单标签,表单域,表单按钮组成,通过表单用户输入的数据提交给服务器. flask表单封装了WTForm ...

  2. flask表单提交的两种方式

    一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html <form method="post" action="/mockservice&qu ...

  3. Flask表单(Flask-WTF)

    1.request.from获取POST表单数据 # hello.py #coding:utf-8 from flask import Flask,request,render_template ap ...

  4. Flask表单(form)的应用

    导入模块request模块 #指定请求方式,使用methods属性 @app.route("/",methods=['GET','POST']) def index(): #判断c ...

  5. flask表单标签

    环境:python2.7+flask+flask_wtf 内容:flask的部分常用表单标签 test.py # -*- coding: utf-8 -*- # flask web_form 表单控件 ...

  6. Flask从入门到精通之Flask表单渲染成HTML

    表单字段是可调用的,在模板中调用后会渲染成HTML.假设视图函数把一个NameForm 实例通过参数form 传入模板,在模板中可以生成一个简单的表单,如下所示: <form method=&q ...

  7. Flask从入门到精通之Flask表单

    Flask请求对象包含客户端发出的所有请求信息.其中,request.form 能获取POST 请求中提交的表单数据.尽管Flask 的请求对象提供的信息足够用于处理Web 表单,但有些任务很单调,而 ...

  8. flask表单flask-wtf

    一.安装pip install flask-wtf 二.创建一个flask的项目引入相对应的包 from flask import Flask,render_template import flask ...

  9. Flask表单验证

    学习内容:①判断请求方式(request.method) from flask import Flask,render_template,request app = Flask(__name__) @ ...

随机推荐

  1. AutoML初创公司探智立方:模型的物竞天择与适者生存

    从回归分析的出现到深度学习的蓬勃发展,这条算法的进化路线与其说是「机器替代人」,不如说是「机器帮助人类完毕我们不擅长的事」. 这份「不擅长」列表里有「不擅长从大量数据中寻找规律」.「不擅长同一时候完毕 ...

  2. 由于找不到 MSVCR100.dll,无法继续执行代码

    由于找不到 MSVCR100.dll,无法继续执行代码.重新安装程序可能会解决此问题 360软件管家中找到  进行安装即可

  3. LigerUi遮罩的两个方法

    $.ligerDialog.waitting('正在查询,请稍候...'); $.ligerDialog.close();

  4. jquery中把一串字符串分割,如:123456789后者abcdefg类型的

    函数:slice() 功能:arrayObject.slice(start,end) start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元 ...

  5. maven设置每次构建获取最新版本号

    build.gradle中的依赖是通过设置maven依赖实现.我们知道,maven可以说是通过一个坐标定位来确定唯一一个包的,所说的坐标定位分别是groupId,artifactId和version三 ...

  6. linux 常用简单命令

    1.ps获取dhcpd进程状态 ps -aux |grep dhcpd |grep -v grep  排除包含grep的那条进程 ps -aux |grep dhcpd |grep -v grep | ...

  7. cocos2d-x C++ (Android)集成第三方微信分享

    ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...

  8. Solaris 10主机名和IP地址步骤

    1.修改主机名: hostname newname vi /etc/hosts vi /etc/hostname.e1000g0 vi /etc/nodename init 6 #重启 --confi ...

  9. node.js初识11

    1.EJS  Embedded JavaScript templates 模板引擎 .EJS的效率不高,因为他后台是通过字符串来处理的 <ul> <% for(var i = 0 ; ...

  10. XXE攻击学习

    环境:lAMP simplexml_load_string.php代码内容 <?php $data = file_get_contents('php://input'); $xml = simp ...