Flask web开发处理POST请求实现(登录案例)


Posted in Python onJuly 26, 2018

本文我们以一个登录例子来说明Flask对 post请求的处理机制。

1、创建应用目录,如

mkdir example
cd example

2、在应用目录下创建  run.py文件,内容如下

from flask import Flask
from flask import render_template, redirect,url_for
from flask import request

app = Flask(__name__)

@app.route('/login', methods=['POST','GET'])
def login():
  error = None
  if request.method == 'POST':
    if request.form['username']=='admin':
      return redirect(url_for('home',username=request.form['username']))
    else:
      error = 'Invalid username/password'
  return render_template('login.html', error=error)

@app.route('/home')
def home():
  return render_template('home.html', username=request.args.get('username'))

if __name__ == '__main__':
  app.debug = True
  app.run('0.0.0.0',80)

上面的代码解释如下:

1)上面的代码用到了几个flask的方法

render_template : 将请求定位到模板文件上,处理模板文件后,将结果作为请求的响应返回

redirect:将请求的响应重定向到新的url上。上面的例子是,当登录成功后,重定向到 home页面。

url_for:根据参数生成url

2)request对象的使用

request对象包含了所有的请求信息,通过它可获取所需要的请求信息。

3)app.route增加了methods参数,指明该url支持的http请求方式,默认是get方式。上面例子 /login即作为get,也作为post的请求目标。

3、在应用目录下创建 templates目录,在templates目录下创建 login.html 和 home.html,内容分别如下:

1)login.html文件

<!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <meta charset="utf-8">
  <title>login</title>
 </head>
 <body>
  <form style="margin:20px;border:1px solid red" method="post" action="/login">
    <span>username:</span><input type="text" name="username" id="username"><br/>
    <span>password:</span><input type="password" name="password" id="password"><br/>
    <button type="submit" id="loginBtn">login</button>
  </form>
  {% if error %}
    <h1 style="color:red">{{ error }}!</h1>
  {% endif %}
 </body>
</html>

2)home.html

<!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <meta charset="utf-8">
  <title>home</title>
 </head>
 <body>
  <h1>wlcome {{username}} , this is home</h1>
 </body>
</html>

4、启动服务

在应用目录下运行  python  run.py

5、测试访问

http://192.168.142.138/login

注意:登录成功后,会进入 http://192.168.142.138/home?username=admin 页面

这个url显示不好。可以通过session的方式来不需要将username传入,而是在home.html中通过session获取。

这个在后面的文章中介绍。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析中国天气网的天气数据
Mar 21 Python
Python 抓取动态网页内容方案详解
Dec 25 Python
如何在Python中编写并发程序
Feb 27 Python
深入理解python try异常处理机制
Jun 01 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
Keras搭建自编码器操作
Jul 03 Python
Python爬虫开发与项目实战
Dec 16 Python
python 6种方法实现单例模式
Dec 15 Python
python3判断IP地址的方法
Mar 04 Python
基于tensorflow加载部分层的方法
Jul 26 #Python
利用python画出折线图
Jul 26 #Python
浅谈flask源码之请求过程
Jul 26 #Python
python画折线图的程序
Jul 26 #Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 #Python
78行Python代码实现现微信撤回消息功能
Jul 26 #Python
python opencv实现图片旋转矩形分割
Jul 26 #Python
You might like
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
js面向对象的写法
2016/02/19 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python实现批量压缩图片
2018/01/25 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
写给学生的新学期寄语
2014/01/18 职场文书
护士感人事迹
2014/05/01 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
个人授权委托书模板
2014/09/14 职场文书
2015年消防工作总结
2015/04/24 职场文书
2015年话务员工作总结
2015/04/29 职场文书
小学运动会宣传稿
2015/07/23 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang