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 %}

最新文章

  1. 【翻译六】java-连接和实例
  2. Java中的Bigdecimal类型运算
  3. 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
  4. android下asynchttp库对于session的支持
  5. QC、IQC、IPQC、FQC、OQC、QA分别的定义
  6. LINUX下安装PHP(CGI模式)和NGINX[转]
  7. Eclipse 卸载插件
  8. android 双卡手机发短信/判断手机是否为双卡
  9. GDKOI2017滚粗记
  10. Actifio最新软件下载更新
  11. H5转图片支持保存
  12. ckeditor5 增加居中alignment
  13. OpenGL——旋转的六边形(动画)
  14. Linux 高级文本处理命令
  15. python selenium 模拟登陆百度账号
  16. 推荐《Java编程思想》
  17. eclipse.ini 内存设置
  18. windows环境安装tensorflow
  19. WDF(Windows Driver Frameworks)驱动框架源码!!
  20. 『C++』Temp_2018_12_26

热门文章

  1. Leetcode_21_Merge Two Sorted Lists
  2. Eclipse 创建 Maven 项目、Maven JavaWeb 项目
  3. 菜鸟玩云计算之十四:克隆虚拟机及ssh登录的问题
  4. 时间序列分解-STL分解法
  5. Leetcode_165_Compare Version Numbers
  6. 《Oracle Applications DBA 基础》- 9 - Concurrent Processing
  7. 【Python】Shell MD5使用的那些事
  8. DrawerLayout实现网易新闻抽屉效果
  9. Android遍历获取指定目录的文件
  10. eclipse中Debug简单记忆