Study_microblog笔记Part 3--web表单
本部分学习如何使用表单为用户发表动态和登录认证提供途径。处理web表单使用flask-wtf插件。
1、安装flask-wtf.
(microblog) D:\pythonProgram\PycharmProjects\microblog>pip install flask-wtf
Collecting flask-wtfDownloading Flask_WTF-0.15.1-py2.py3-none-any.whl (13 kB)
Requirement already satisfied: itsdangerous in d:\pycharmprojects\flask\microblog\lib\site-packages (from flask-wtf) (2.0.1)
Requirement already satisfied: Flask in d:\pycharmprojects\flask\microblog\lib\site-packages (from flask-wtf) (2.0.1)
Collecting WTFormsUsing cached WTForms-2.3.3-py2.py3-none-any.whl (169 kB)
Requirement already satisfied: Werkzeug>=2.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask-wtf) (2.0.1)
Requirement already satisfied: click>=7.1.2 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask-wtf) (8.0.1)
Requirement already satisfied: Jinja2>=3.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask-wtf) (3.0.1)
Requirement already satisfied: colorama in d:\pycharmprojects\flask\microblog\lib\site-packages (from click>=7.1.2->Flask->flask-wtf) (0.4.4)
Requirement already satisfied: MarkupSafe>=2.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Jinja2>=3.0->Flask->flask-wtf) (2.0.1)
Installing collected packages: WTForms, flask-wtf
Successfully installed WTForms-2.3.3 flask-wtf-0.15.1
2、对程序进行配置。
Flask(也可能是Flask插件)为使用者提供了一些可自由配置的选项。你需要决定传入什么样的配置变量列表到框架中。有几种途径来为应用指定配置选项。最基本的解决方案是使用app.config对象,它是一个类似字典的对象,可以将配置以键值的方式存储其中。例如,你可以这样做:
app = Flask(__name__)
app.config['SECRET_KEY'] = 'you-will-never-guess'
# ... add more variables here as needed
配置和应用代码不应该处于同一个部分,而是使用稍微复杂点的结构,将配置保存到一个单独的文件中。使用类来存储配置变量,这个配置类存储到单独的Python模块,以保持良好的组织结构。下面就让你见识一下这个存储在顶级目录下,名为config.py的模块的配置类吧:
import osclass Config(object):SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
拥有了这样一份配置文件,我还需要通知Flask读取并使用它。可以在生成Flask应用之后,利用app.config.from_object()方法来完成这个操作:
from flask import Flask
from config import Configapp = Flask(__name__)
app.config.from_object(Config)from app import routes
可以使用app.config中的字典语法来访问配置项。 在下面的Python交互式会话中,你可以看到密钥的值:
app.config['SECRET_KEY']
'you-will-never-guess'
3、用户登录表单。
表单类的定义:Flask-WTF插件使用Python类来表示Web表单,表单类单独存储到名为app/forms.py的模块中。定义用户登录表单来做一个开始,它会要求用户输入username和password,并提供一个“remember me”的复选框和提交按钮:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequiredclass LoginForm(FlaskForm):username = StringField('Username', validators=[DataRequired()])password = PasswordField('Password', validators=[DataRequired()])remember_me = BooleanField('Remember Me')submit = SubmitField('Sign In')
表单模板:LoginForm类中定义的字段支持自渲染为HTML元素,把登录模板存储在文件app/templates/login.html 中,代码如下:
{% extends "base.html" %}{% block content %}<h1>Sign In</h1><form action="" method="post" novalidate>{{ form.hidden_tag() }}<p>{{ form.username.label }}<br>{{ form.username(size=32) }}</p><p>{{ form.password.label }}<br>{{ form.password(size=32) }}</p><p>{{ form.remember_me() }} {{ form.remember_me.label }}</p><p>{{ form.submit() }}</p></form>
{% endblock %}
表单视图:编写一个新的视图函数来渲染上面创建的模板。函数的逻辑只需创建一个form实例,并将其传入渲染模板的函数中即可,然后用/login URL来关联它。这个视图函数也存储到app/routes.py模块中,代码如下:
from flask import render_template
from app import app
from app.forms import LoginForm# ...@app.route('/login')
def login():form = LoginForm()return render_template('login.html', title='Sign In', form=form)
在基础模板templates/base.html的导航栏上添加登录的链接,以便访问:
<div>Microblog:<a href="/index">Home</a><a href="/login">Login</a>
</div>
接收表单数据:点击提交按钮,浏览器将显示“Method Not Allowed”错误。这是因为之前的登录视图功能到目前为止只完成了一半的工作。 它可以在网页上显示表单,但没有逻辑来处理用户提交的数据。Flask-WTF可以轻松完成这部分工作, 以下是视图函数的更新版本,它接受和验证用户提交的数据:
@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():flash('Login requested for user {}, remember_me={}'.format(form.username.data, form.remember_me.data))return redirect('/index')return render_template('login.html', title='Sign In', form=form)
当你调用flash()函数后,Flask会存储这个消息,但是却不会奇迹般地直接出现在页面上。模板需要将消息渲染到基础模板中,才能让所有派生出来的模板都能显示出来。更新后的基础模板代码如下:
<html><head>{% if title %}<title>{{ title }} - microblog</title>{% else %}<title>microblog</title>{% endif %}</head><body><div>Microblog:<a href="/index">Home</a><a href="/login">Login</a></div><hr>{% with messages = get_flashed_messages() %}{% if messages %}<ul>{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}{% block content %}{% endblock %}</body>
</html>
完善字段验证。这是给username和password字段添加了验证描述性错误消息渲染逻辑之后的登录模板:
{% extends "base.html" %}
{% block content %}<h1>Sign In</h1><form action="" method="post" novalidate>{{ form.hidden_tag() }}<p>{{ form.username.label }}<br>{{ form.username(size=32) }}<br>{% for error in form.username.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.password.label }}<br>{{ form.password(size=32) }}<br>{% for error in form.password.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.remember_me() }} {{ form.remember_me.label }}</p><p>{{ form.submit() }}</p></form>
{% endblock %}
拥有验证器的字段都会用form.<field_name>.errors来渲染错误信息。 一个字段的验证错误信息结果是一个列表,因为字段可以附加多个验证器,并且多个验证器都可能会提供错误消息以显示给用户。
生成链接,用flask的url_for()函数名代替URL:
<div>Microblog:<a href="{{ url_for('index') }}">Home</a><a href="{{ url_for('login') }}">Login</a></div>
login()视图函数也做了相应变更:
from flask import render_template, flash, redirect, url_for# ...@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():# ...return redirect(url_for('index'))# ...
Study_microblog笔记Part 3--web表单相关推荐
- Flask Web表单
title: flask学习笔记 subtitle: 3. flask Web表单 date: 2018-12-14 10:17:28 --- Web表单 HTML表单是用户和web站点或应用程序之间 ...
- Flask之Web表单使用
Web表单使用 @(Flask) request对象包含客户端发出的所有请求信息. request.form能获取POST请求中提交的表单数据. 使用的包 Flask-WTF可以把处理Web表单的过程 ...
- 使用 PEAR的Text_CAPTCHA保护Web表单[翻译]
使用 PEAR的Text_CAPTCHA保护Web表单 作者 Marcus Whitney 翻译 mikespook 来源 http://phpsec.org 当你在网络上有公开的表单的时候,你总是需 ...
- 【Web安全】PHP与Web表单交互-POST方法与GET方法(看不懂你来打我)
PHP与Web页面交互是实现PHP网站与用户交互的重要手段.在PHP中提供了两种与Web页面交互的方法,一种是通过Web表单提交数据,另一种是通过URL参数传递. 这里我们将详细讲解表单的相关知识,为 ...
- 用php实现一个简易的web表单生成器,PHP—Web表单生成器
1.实例: 2. 需求分析 在项目的实际开发中,经常需要设计各种各样表单.直接编写HTML表单虽然简单,但修改.维护相对麻烦. 因此,可以利用PHP实现一个Web表单生成器,使其可以根据具体的需求定制 ...
- Flask开发系列之Web表单
Flask开发系列之Web表单 简单示例 from flask import Flask, request, render_templateapp = Flask(__name__) @app.rou ...
- web表单设计:点石成金_设计复杂的用户表单:12个UX最佳实践
web表单设计:点石成金 It's been a few years that I've been taking interest in designing complex user forms, w ...
- 用php实现一个简易的web表单生成器,网络编程PHP Web表单生成器案例分析
本文实例讲述了PHP Web表单生成器.分享给大家供大家参考,具体如下: 1.实例: 2. 需求分析 在项目的实际开发中,经常需要设计各种各样表单.直接编写HTML表单虽然简单,但修改.维护相对麻烦. ...
- 专注于 web报表, web打印, 自定义web表单, web工作流管理系统 方面的技术
专注于 web报表, web打印, 自定义web表单, web工作流管理系统 方面的技术, 官方网站为: http://www.fcsoft.com.cn/
最新文章
- golang new make 区别
- echarts中如何使用timeline组件
- Nhibernate 3.0 cookbook学习笔记 创建事务自动包裹的访问层
- 手机壳鸿蒙,手机壳黑榜发布 真相太惊人!
- SAwUML – UML-based, contractual software architectures and their formal analysis using SPIN
- usage: git remote add [options] name url -f, --fetch fetch the remote branches ...
- 05.java多线程问题
- Yii 多表关联relations,需要与with()方法联合使用
- Jvisualvm简单使用教程
- 树莓派4B安装桌面控件wbar和conky,美化桌面(解决报错)
- 学美容化妆培训学校到哪里最好
- 用C语言建立一个顺序栈
- “棱镜”入侵手机App, 爱加密有效防窃听
- 大火的扩散模型终于杀到了NLP领域
- java中用于定义小数的关键字_Java中用于定义小数的关键字有两个:() 和 (),后者精度高于前者。...
- python 横坐标只显示部分数据_解决echarts中横坐标值显示不全(自动隐藏)问题
- NSDP协议PORTAL服务器源码
- Retinex、log对数变换、直方图均衡化区别,边缘增强Retinex算法与拉普拉斯算法联系、均衡化与亮度调节算法、大津阈值计算
- 4D毫米波雷达硬件系统架构
- 我们经常遇到网络不通的故障,列举出常见的故障原因,检查方法以及解决方案
热门文章
- 教学:3DMAX如何快速建模游戏模型,附带百G基础教程
- iPhone已停用怎么办
- Argument 2 passed to think\\filesystem\\Driver::putFile() must be an instance of think\\File
- 06FFMPEG的AVCodecContext结构体分析
- 三大运营商2G3G4G频段分布
- 车联网通信协议之C-V2X
- 【考研系列】-二战在家复习经历
- 遥感图像目标检测常用数据集及下载链接汇总
- 微信公众号服务器配置token验证失败问题及菜单创建失败问题小结
- 你知道照片怎么变清晰吗?增强照片清晰度的方法