Flask表单(Flask-WTF)
2024-10-01 13:38:43
1、request.from获取POST表单数据
# hello.py
#coding:utf-8 from flask import Flask,request,render_template app = Flask(__name__) @app.route('/',methods=['GET']) #methods是一个列表
def home():
return render_template('home.html') @app.route('/signin',methods=['GET'])
def signin_form():
return render_template('form.html') @app.route('/signin',methods=['POST'])
def signin():
username = request.form['username']
password = request.form['password']
if username == 'admin' and password == 'password':
return render_template('signin-ok.html',username=username)
else:
return render_template('form.html',message='用户名或者密码错误,请重新登陆>>',username=username) if __name__ == '__main__':
app.run()
# form.html
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<title>登陆界面</title>
</head>
<body>
{% if message %}
<p style="color:red">{{ message }}</p>
{% endif %}
<form action='/signin' method="post">
<legend>请登陆您的账号:</legend>
<input type="text" name="username" placeholder='Username' value="{{ username }}"><br>
<input type="password" name="password" placeholder="Password" value="{{ password }}"><br>
<button type="submit">登陆</button>
</form>
</body>
</html>
# home.html
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<title>主页</title>
</head>
<body>
<h1>你好,欢迎来到首页</h1>
<p><a href="/signin">点击登陆</a></p>
</body>
</html>
#signin-ok.html
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<title>登陆成功</title>
</head>
<body>
<h1>欢迎你,{{ username }}</h1>
</body>
</html>
2、使用Flask-WTF扩展
# hello.py
#coding:utf-8 from flask import Flask,render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.wtf import Form
from wtforms import StringField,SubmitField
from wtforms.validators import Required app = Flask(__name__)
app.config['SECRET_KEY']='hard to guess string'
bootstrap = Bootstrap(app) class NameForm(Form):
name = StringField('what is your name?',validators=[Required()])
submit = SubmitField('Submit') @app.route('/',methods=['GET','POST'])
def index():
name = None
form = NameForm()
if form.validate_on_submit():
name = form.name.data #没有这一步,submit后name=None
form.name.data = '' #没有这一步,submit后文字框还会遗留上一次输入的文字
return render_template('index.html',form=form,name=name) if __name__ == '__main__':
app.run()
# index.py
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky{% endblock %} {% block page_content %}
<div class="page-header">
<h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
<!-- 导入wtf.html渲染整个Flsk-WTF表单,参数form是hello.py中传过来的form实例-->
{{ wtf.quick_form(form) }}
{% endblock %}
附:共同的基模板
# base.html
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %} {% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a> </div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/">Twitter</a></li>
<li><a href="/">Blog</a></li>
</ul>
</div>
</div>
</div>
{% endblock %} {% block content %}
<div class="container">
<div class="page-header">
{% block page_content %}{% endblock %}
</div>
</div> {% endblock %}
最新文章
- 【翻译六】java-连接和实例
- Java中的Bigdecimal类型运算
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- android下asynchttp库对于session的支持
- QC、IQC、IPQC、FQC、OQC、QA分别的定义
- LINUX下安装PHP(CGI模式)和NGINX[转]
- Eclipse 卸载插件
- android 双卡手机发短信/判断手机是否为双卡
- GDKOI2017滚粗记
- Actifio最新软件下载更新
- H5转图片支持保存
- ckeditor5 增加居中alignment
- OpenGL——旋转的六边形(动画)
- Linux 高级文本处理命令
- python selenium 模拟登陆百度账号
- 推荐《Java编程思想》
- eclipse.ini 内存设置
- windows环境安装tensorflow
- WDF(Windows Driver Frameworks)驱动框架源码!!
- 『C++』Temp_2018_12_26
热门文章
- Leetcode_21_Merge Two Sorted Lists
- Eclipse 创建 Maven 项目、Maven JavaWeb 项目
- 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题
- 时间序列分解-STL分解法
- Leetcode_165_Compare Version Numbers
- 《Oracle Applications DBA 基础》- 9 - Concurrent Processing
- 【Python】Shell MD5使用的那些事
- DrawerLayout实现网易新闻抽屉效果
- Android遍历获取指定目录的文件
- eclipse中Debug简单记忆