Python3+Flask安装使用教程详解


Posted in Python onFebruary 16, 2021

 一、Flask安装环境配置

当前我的开发环境是Miniconda3+PyCharm。开发环境其实无所谓,自己使用Python3+Nodepad都可以。安装Flask库:

pip install Flask

二、第一个Flask应用程序

将以下内容保存为helloworld.py:

# 导入Flask类
from flask import Flask
# 实例化,可视为固定格式
app = Flask(__name__)

# route()方法用于设定路由;类似spring路由配置
@app.route('/helloworld')
def hello_world():
 return 'Hello, World!'

if __name__ == '__main__':
 # app.run(host, port, debug, options)
 # 默认值:host="127.0.0.1", port=5000, debug=False
 app.run(host="0.0.0.0", port=5000)

直接运行该文件,然后访问:http://127.0.0.1:5000/helloworld。结果如下图:

Python3+Flask安装使用教程详解

三、get和post实现

3.1 创建用到的模板文件

Flask默认到templates目录下查找模板文件,在上边helloworld.py同级目录下创建templates文件夹。

在templates文件夹下创建get.html,写入以下内容:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>get请求示例</title>
</head>
<body>
 <form action="/deal_request" method="get">
 <input type="text" name="q" />
 <input type="submit" value="搜索" />
 </form>
</body>
</html>

再在templates文件夹下创建post.html,写入以下内容:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>post请求示例</title>
</head>
<body>
 <form action="/deal_request" method="post">
 <input type="text" name="q" />
 <input type="submit" value="搜索" />
 </form>
</body>
</html>

最后在templates文件夹下创建result.html,写入以下内容:

<!-- Flask 使用Jinja2模板引擎,Jinja2模板引擎源于Django板模所以很多语法和Django是类似的 -->
<h1>{{ result }}</h1>

3.2 编写相关的处理方法

在helloworld.py中添加get_html()、post_html()和deal_request()三个方法,更多说明见注释。当前helloworld.py内容如下:

# 导入Flask类
from flask import Flask
from flask import render_template
from flask import request
# 实例化,可视为固定格式
app = Flask(__name__)

# route()方法用于设定路由;类似spring路由配置
#等价于在方法后写:app.add_url_rule('/', 'helloworld', hello_world)
@app.route('/helloworld')
def hello_world():
 return 'Hello, World!'

# 配置路由,当请求get.html时交由get_html()处理
@app.route('/get.html')
def get_html():
 # 使用render_template()方法重定向到templates文件夹下查找get.html文件
 return render_template('get.html')

# 配置路由,当请求post.html时交由post_html()处理
@app.route('/post.html')
def post_html():
 # 使用render_template()方法重定向到templates文件夹下查找post.html文件
 return render_template('post.html')

# 配置路由,当请求deal_request时交由deal_request()处理
# 默认处理get请求,我们通过methods参数指明也处理post请求
# 当然还可以直接指定methods = ['POST']只处理post请求, 这样下面就不需要if了
@app.route('/deal_request', methods = ['GET', 'POST'])
def deal_request():
 if request.method == "GET":
 # get通过request.args.get("param_name","")形式获取参数值
 get_q = request.args.get("q","")
 return render_template("result.html", result=get_q)
 elif request.method == "POST":
 # post通过request.form["param_name"]形式获取参数值
 post_q = request.form["q"]
 return render_template("result.html", result=post_q)

if __name__ == '__main__':
 # app.run(host, port, debug, options)
 # 默认值:host=127.0.0.1, port=5000, debug=false
 app.run()

3.3 查看运行效果

重新运行helloworld.py。

当前目录结构如下(.idea目录不用管):

Python3+Flask安装使用教程详解

get.html如下:

Python3+Flask安装使用教程详解

get查询结果如下:

Python3+Flask安装使用教程详解

post.html如下:

Python3+Flask安装使用教程详解

post查询结果如下:

Python3+Flask安装使用教程详解

四、restful

所谓restful简单理解就是以json等格式(而非以前的表单格式)发起请求,及以json等格式(而非以前的html)进行响应。

等下我们通过curl模拟rest请求,然后使用jsonify实现rest响应。

4.1 服务端实现代码

# 导入Flask类
from flask import Flask, jsonify
from flask import render_template
from flask import request

# 实例化,可视为固定格式
app = Flask(__name__)

# route()方法用于设定路由;类似spring路由配置
#等价于在方法后写:app.add_url_rule('/', 'helloworld', hello_world)
@app.route('/helloworld')
def hello_world():
 return 'Hello, World!'

# 配置路由,当请求get.html时交由get_html()处理
@app.route('/get.html')
def get_html():
 # 使用render_template()方法重定向到templates文件夹下查找get.html文件
 return render_template('get.html')

# 配置路由,当请求post.html时交由post_html()处理
@app.route('/post.html')
def post_html():
 # 使用render_template()方法重定向到templates文件夹下查找post.html文件
 return render_template('post.html')

# 配置路由,当请求deal_request时交由deal_request()处理
# 默认处理get请求,我们通过methods参数指明也处理post请求
# 当然还可以直接指定methods = ['POST']只处理post请求, 这样下面就不需要if了
@app.route('/deal_request', methods=['GET', 'POST'])
def deal_request():
 if request.method == "GET":
 # get通过request.args.get("param_name","")形式获取参数值
 get_q = request.args.get("q","")
 return render_template("result.html", result=get_q)
 elif request.method == "POST":
 # post通过request.form["param_name"]形式获取参数值
 post_q = request.form["q"]
 return render_template("result.html", result=post_q)

@app.route('/rest_test',methods=['POST'])
def hello_world1():
 """
 通过request.json以字典格式获取post的内容
 通过jsonify实现返回json格式
 """
 post_param = request.json
 result_dict = {
 "result_code": 2000,
 "post_param": post_param
 }
 return jsonify(result_dict)


if __name__ == '__main__':
 # app.run(host, port, debug, options)
 # 默认值:host=127.0.0.1, port=5000, debug=false
 app.run()

4.2 请求模拟

curl -H "Content-Type:application/json" -X POST --data '{"username": "ls","password":"toor"}' http://127.0.0.1:5000/rest_test

4.3 效果截图

Python3+Flask安装使用教程详解

五、Flask与Django比较

5.1 Django配置复杂

如果对Django不是很了解,可以参看

仅从文章长度看就比这篇长很多,所以Django比Flask复杂(得多)是肯定的。更具体比较如下:

比较项 Django Flask 复杂度比较 说明
项目创建 Django需要用命令创建项目 Flask直接编写文件就可运行 Django复杂 Django需要用命令创建项目是因为要创建出整个项目框架
路由 Django使用专门的urls.py文件 Flask直接使用@app.route() Django笨重 Django类似Strut2的配置Flask类似Spring的配置,Flask感觉更好
get和post request.GET['name']和request.POST["name"] request.args.get("name","")和request.form["q"] 差不多 Flask格式上不统一
restful 使用django-resful框架 使用jsonify 差不多 Flask不需要单建一个app,更直观一些
数据库操作 django集成了对数据库的操作 Flask没集成对数据库的操作要另行直连或使用sqlalchemy 差不多 django复杂很大程度来源于对数据库的集成。

5.2 Flask和Django各自适合使用场景

我们经常会听说这样的一个近乎共识的观点:Django是Python最流行的Web框架但配置比较复杂,Flask是一个轻量级的框架配置比较简单如果项目比较小推荐使用Flask。

进一步来说,Flask的轻量来源其“暂时不用的功能都先不做处理”,Django复杂来源于其“可能用到的功能都先集成”;随着项目规模的扩大最终Django有的东西Flask也都需要有。

所以,如果平时你用python是东用一个库西用一个库,东写一个场景西写一个场景,而不是专门开发web,那么你适合使用Flask,因为这样你的学习成本低及以前的知识都能用上去。

本文主要讲解了Python3+Flask安装使用教程如果想查看更多关于Python3+Flask的知识文章请点击下面相关文章

Python 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
python实现360的字符显示界面
Feb 21 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python之列表推导式的用法
Nov 29 Python
pymysql的简单封装代码实例
Jan 08 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python 多线程之threading 模块的使用
Apr 14 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 #Python
Python LMDB库的使用示例
Feb 14 #Python
python 装饰器重要在哪
Feb 14 #Python
python爬虫如何解决图片验证码
Feb 14 #Python
Python实现粒子群算法的示例
Feb 14 #Python
Python中对象的比较操作==和is区别详析
Feb 12 #Python
python绘图模块之利用turtle画图
Feb 12 #Python
You might like
虫族 ZERG 概述
2020/03/14 星际争霸
php调用mysql存储过程
2007/02/14 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php根据年月获取季度的方法
2014/03/31 PHP
PHP递归创建多级目录
2015/11/05 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
C语言变量的命名规则都有哪些
2013/12/27 面试题
信息学院毕业生自荐信范文
2014/03/04 职场文书
面试自我评价范文
2014/09/17 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
使用pytorch实现线性回归
2021/04/11 Python
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python