- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章flask入门之表单的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、原生表单 。
form.html 。
1
2
3
4
5
6
7
8
9
10
11
12
|
{% extends 'common/base.html' %}
{% block title %}
原生表单
{% endblock %}
{% block pagecontent %}
{# <
form
action
=
"{{ url_for('check') }}"
method
=
"post"
>#}
<
form
action
=
"{{ url_for('form') }}"
method
=
"post"
>
<
p
>用户名: <
input
type
=
"text"
name
=
"username"
placeholder
=
"请输入用户名"
maxlength
=
"12"
></
p
>
<
p
>密码: <
input
type
=
"password"
name
=
"userpass"
placeholder
=
"请输入密码..."
></
p
>
<
p
><
input
type
=
"submit"
value
=
"提交"
></
p
>
</
form
>
{% endblock %}
|
manage.py 。
1
2
3
4
5
6
7
8
9
|
@app
.route(
'/form/'
)
def
form():
return
render_template(
'form1.html'
)
#接收表单的数据
@app
.route(
'/check/'
,methods
=
[
'POST'
])
def
check():
print
(request.form)
return
'提交过来了'
|
将俩个路由地址合并为同一个 。
1
2
3
4
5
|
@app
.route(
'/form/'
,methods
=
[
'GET'
,
'POST'
])
def
form():
if
request.method
=
=
'POST'
:
print
(request.form)
return
render_template(
'form1.html'
)
|
2、使用flask-wtf表单扩展库 。
作用: 是一个用于表单处理的扩展库 提供表单的校验 csrf的功能 。
1
|
pip install flask
-
wtf
|
使用 。
(1) 字段类型 。
。
字段名称 | 字段类型 |
---|---|
StringField | 普通文本字段 |
PasswordField | 密码框 |
SubmitField | 提交按钮 |
TextAreaField | 多行文本域 |
HiddenField | 隐藏域 |
DateField | 日期 |
DateTimeField | 日期时间 |
IntegerField | 整形 |
FloatFIeld | 浮点型 |
RadioField | 单选字段 |
SelectField | 下拉 |
FileField | 文件上传字段 |
BooleanField | 布尔字段 |
。
(2) 验证器 。
。
验证器 | 说明 |
---|---|
DataRequired | 必填 |
Length | 长度 min max |
IPAddress | IP地址 |
邮箱 | |
URL | 地址 |
Regexp | 正则匹配 |
EqualTo | 验证俩个字段值的正确性 |
NumberRange | 输入值的范围 min max |
。
实例 。
在manage中 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
from
flask
import
Flask,render_template,request
from
flask_script
import
Manager
from
flask_bootstrap
import
Bootstrap
#导入自定义表单类的基类
from
flask_wtf
import
FlaskForm
#导入表单的字段
from
wtforms
import
StringField,PasswordField,SubmitField
#导入验证器
from
wtforms.validators
import
Length,DataRequired
app
=
Flask(__name__)
bootstrap
=
Bootstrap(app)
#加密种子 csrf需要使用
app.config[
'SECRET_KEY'
]
=
'abcdedff'
manager
=
Manager(app)
class
Login(FlaskForm):
username
=
StringField(
'用户名'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'用户名不能为空!!!'
)])
userpass
=
PasswordField(
'密码'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'密码不能为空!!!'
)])
submit
=
SubmitField(
'登录'
)
@app
.route(
'/'
)
def
index():
return
render_template(
'index.html'
)
@app
.route(
'/form/'
,methods
=
[
'GET'
,
'POST'
])
def
form():
#将表单类实例化
form
=
Login()
if
request.method
=
=
'POST'
:
#验证是否存在正确的csrftoken和 数据的正确性 如果都正确则为真
if
form.validate_on_submit():
# print(request.form)
print
(form.username.data)
return
render_template(
'form2.html'
,form
=
form)
from
flask
import
Flask,render_template,request
from
flask_script
import
Manager
from
flask_bootstrap
import
Bootstrap
#导入自定义表单类的基类
from
flask_wtf
import
FlaskForm
#导入表单的字段
from
wtforms
import
StringField,PasswordField,SubmitField
#导入验证器
from
wtforms.validators
import
Length,DataRequired
app
=
Flask(__name__)
bootstrap
=
Bootstrap(app)
#加密种子 csrf需要使用
app.config[
'SECRET_KEY'
]
=
'abcdedff'
manager
=
Manager(app)
class
Login(FlaskForm):
username
=
StringField(
'用户名'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'用户名不能为空!!!'
)])
userpass
=
PasswordField(
'密码'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'密码不能为空!!!'
)])
submit
=
SubmitField(
'登录'
)
@app
.route(
'/'
)
def
index():
return
render_template(
'index.html'
)
@app
.route(
'/form/'
,methods
=
[
'GET'
,
'POST'
])
def
form():
#将表单类实例化
form
=
Login()
if
request.method
=
=
'POST'
:
#验证是否存在正确的csrftoken和 数据的正确性 如果都正确则为真
if
form.validate_on_submit():
# print(request.form)
print
(form.username.data)
return
render_template(
'form2.html'
,form
=
form)
|
在模板中 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{
%
extends
'common/base.html'
%
}
{
%
block title
%
}
原生表单
{
%
endblock
%
}
{
%
block pagecontent
%
}
<form action
=
"{{ url_for('form') }}"
method
=
"post"
>
<p>{{ form.csrf_token }}<
/
p>
<p>{{ form.username.label() }} {{ form.username(style
=
'color:red;'
,
class
=
'userclass'
,placeholder
=
'请输入用户名'
) }}
{
%
if
form.errors
%
}
<span style
=
"color:red;"
>{{ form.errors.username.
0
}}<
/
span>
{
%
endif
%
}
<
/
p>
<p>{{ form.userpass.label() }} {{ form.userpass() }}<
/
p>
<p>{{ form.submit() }}<
/
p>
<
/
form>
{
%
endblock
%
}
|
使用 bootstrap渲染表单 。
1
2
3
4
5
6
7
8
|
{
%
import
'bootstrap/wtf.html'
as wtf
%
}
{
%
block pagecontent
%
}
<div
class
=
"row"
>
<div
class
=
"col-md-8"
>图片<
/
div>
<div
class
=
"col-md-4"
>{{ wtf.quick_form(form,action
=
"
",method="
") }}
<
/
div>
<
/
div>
{
%
endblock
%
}
|
自定义表单验证器 。
1
2
3
4
5
6
7
|
class
Login(FlaskForm):
...
def
validate_username(
self
,field):
# print(field)
if
field.data
=
=
'zhangsan'
:
# if self.username.data == 'zhangsan':
raise
ValidationError(
'该用户已存在'
)
|
注意:
validate_ 验证的字段名称 为固定格式 。
所有字段和验证器方法的使用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class
Login(FlaskForm):
username
=
StringField(
'用户名'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'用户名不能为空!!!'
)])
userpass
=
PasswordField(
'密码'
,validators
=
[Length(
min
=
6
,
max
=
12
,message
=
'用户名的长度为6~12为'
),DataRequired(message
=
'密码不能为空!!!'
),EqualTo(
'confirm'
,message
=
'俩次密码输入不一致'
)])
confirm
=
PasswordField(
'确认密码'
)
info
=
TextAreaField(
'个人简介'
,validators
=
[Length(
min
=
6
,
max
=
20
,message
=
'内容为6-20个长度'
),DataRequired(message
=
'内容不能为空'
)],render_kw
=
{
"style"
:
"resize:none;"
,
'placeholder'
:
"请输入你此刻的感谢..."
})
hidde
=
HiddenField()
birth
=
DateField(
'出生日期'
)
birth
=
DateTimeField(
'出生日期'
)
age
=
IntegerField(
'年龄'
,validators
=
[NumberRange(
min
=
6
,
max
=
99
,message
=
'年龄为6~99岁'
)])
money
=
FloatField()
sex
=
RadioField(choices
=
[(
'w'
,
'女'
),(
'm'
,
'男'
)])
address
=
SelectField(choices
=
[(
'1001'
,
'北京'
),(
'1002'
,
'上海'
),(
'1003'
,
'天津'
)])
file
=
FileField(
'文件上传'
)
argee
=
BooleanField(
'请仔细阅读以上条款'
)
ip
=
StringField(
'IPV4'
,validators
=
[IPAddress(message
=
'请输入正确的ip地址'
)])
url
=
StringField(
'url地址'
,validators
=
[URL(message
=
'输入正确的url地址'
)])
email
=
StringField(
'email'
,validators
=
[Email(message
=
'请输入正确的邮箱地址'
)])
preg
=
StringField(
'手机号码'
,validators
=
[Regexp(
'^[1][3-8][0-9]{9}$'
,flags
=
re.I,message
=
'请输入正确的手机号码'
)])
submit
=
SubmitField(
'登录'
)
|
3、flash 消息的显示 。
概述: 当用户请求 或者有消息的显示 通过flash,get_flashed_messages 来进行操作 。
导入 。
from flask import flash,get_flashed_messages 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
from
flask
import
flash,get_flashed_messages
class
Login(FlaskForm):
username
=
StringField(
'用户名'
,validators
=
[DataRequired(message
=
'用户名不能为空'
)])
userpass
=
PasswordField(
'密码'
,validators
=
[DataRequired(message
=
'密码不能为空'
)])
submit
=
SubmitField(
'登录'
)
@app
.route(
'/form/'
,methods
=
[
'GET'
,
'POST'
])
def
form():
form
=
Login()
if
form.validate_on_submit():
if
form.username.data
=
=
'zhangsan'
and
form.userpass.data
=
=
'123456'
:
flash(
'登录成功'
)
return
redirect(url_for(
'index'
))
else
:
flash(
'当前用户不存在'
)
return
render_template(
'user/login.html'
,form
=
form)
|
使用 。
1
2
3
|
{
%
for
message
in
get_flashed_messages()
%
}
<div
class
=
"alert alert-danger"
role
=
"alert"
>{{ message }}<
/
div>
{
%
endfor
%
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://segmentfault.com/a/1190000015228524 。
最后此篇关于flask入门之表单的实现的文章就讲到这里了,如果你想了解更多关于flask入门之表单的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在遵循Flask-potion教程并尝试保护我的api。我一直试图找出如何在User端点上设置权限,以使一个User无法查看另一个User的记录。这是我的代码: class UserResourc
项目设置 Python 3.5.3 flask 0.12.2 目录 . ├── Core │ ├── BackgroundProcessManager.py │ ├── FirebaseDat
我正在构建 flask 应用程序并决定这次尝试应用程序工厂方法,但是遇到了 flask 迁移的麻烦并且无法找出简单的解决方案。 请注意,我想将配置位置作为选项传递给脚本 管理.py: manager
我尝试通过以下示例代码来熟悉Flask-APScheduler插件:https://github.com/viniciuschiele/flask-apscheduler/blob/master/ex
我一周前刚刚了解了 Flask 和 JWT,所以我真的需要一些帮助。有人可以解释一下flask-jwt和flask-jwt-extended之间的区别吗? 最佳答案 Flask-JWT 没有那么多功能
我是 Flask 的新手,我只是想用它创建一个简单的市场。我的网站上有三种类型的用户 [卖家、买家、管理员]。我认为每种类型的用户都应该有自己的注册和登录,因为他们的角色应该提供不同类型的信息。另一方
基本上,我想做一些非常简单的事情:我想创建一个用于删除数据库中条目的表单。 模板正在创建一个包含所有条目的html表,没有任何麻烦。我现在的问题是:如何将其转换为每行都有链接的表单。 当然,我可以通过
我对Flask来说非常陌生,其中一个基本要求是我需要SEO友好的URL。 我说一条路线 @app.route('/sales/') @app.route(/sales/) def get_sales(
一直在为用户管理系统开发Flask-user,但是我看不到自定义登录页面和注册页面的方法。我使用pip安装了flask-user pip install flask-user 任何帮助,将不胜感激 最
我有一个奇怪的情况,不知道如何找到问题。 我已经创建了一个这样的蓝图 reportjobsmod = Blueprint('jobreports', __name__, url_prefix='/jo
我认为在 Flask 中拥有实例变量的正确方法是添加用户和 session ,但我正在尝试测试一个概念,我还不想经历所有这些。我试图让一个网络应用程序将图像加载到一个变量中,然后可以对其执行不同的图像
select = SelectField("City") form.select.choices = [(places['name'], places['name']) for places in p
这个问题在这里已经有了答案: Provide extra information to Flask's app.logger (2 个回答) 3年前关闭。 我正在运行一个 flask 应用程序。我想写
我当时正在编程一个非常不错的api,使用json从游戏服务器到我的网站空间获取一些json数据, 但是每次我使用angular发送请求时,我都会得到以下信息:127.0.0.1--[20 / Mar
我已经开发了一个上传表单,以将特定的.xlsx文件作为上传。要求是要处理非xlsx上载的任何异常(例如zip,exe文件)。我正在使用pyexcel库读取上传内容。我尝试创建以下代码来处理此异常: e
我使用此功能在网站上捕获404错误: @app.errorhandler(404) def page_not_found(e): logger.warning('User raised an
我正在尝试同时使用 Flask Restful 和 Flask SocketIO。我已经制作了一个 Flask Restful 应用程序,但现在我想使用 Flask SocketIO 在客户端和我的服
我有一些 Flask 应用程序,我通过设置 FLASK_APP 来运行它们。环境变量和调用 flask run .自 FLASK_DEBUG也设置了,每当我更改一些代码时,应用程序都可以方便地重新加载
我目前正在使用 Flask 构建一个应用程序。我正在努力访问 Flask 实例“app”以及 Flask-mail 实例“mail”。 下面是我的项目的样子: └── my-project ├
Remember-me是 parameter flask_login.login_user(user, remember=False, duration=None, force=False, fres
我是一名优秀的程序员,十分优秀!