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 相关文章推荐
简单使用Python自动生成文章
Dec 25 Python
Python实现把json格式转换成文本或sql文件
Jul 10 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
dataframe设置两个条件取值的实例
Apr 12 Python
python实现linux下抓包并存库功能
Jul 18 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
pandas数据集的端到端处理
Feb 18 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
python中列表的含义及用法
May 26 Python
基于Python采集爬取微信公众号历史数据
Nov 27 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
业务经理岗位职责
2013/11/11 职场文书
全神贯注教学反思
2014/02/03 职场文书
生物制药专业求职信
2014/03/11 职场文书
体育馆的标语
2014/06/24 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
电台广播稿范文
2015/08/19 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
解析MySQL索引的作用
2022/03/03 MySQL
python+opencv实现目标跟踪过程
2022/06/21 Python