Python编程在flask中模拟进行Restful的CRUD操作


Posted in Python onDecember 28, 2018

这篇文章中我们将通过对HelloWorld的message进行操作,介绍一下如何使用flask进行Restful的CRUD。

概要信息

Python编程在flask中模拟进行Restful的CRUD操作

事前准备:flask

liumiaocn:flask liumiao$ which flask
/usr/local/bin/flask
liumiaocn:flask liumiao$ flask --version
Flask 1.0.2
Python 2.7.10 (default, Jul 15 2017, 17:16:57) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
liumiaocn:flask liumiao$

代码示例:HTTP谓词(GET)

就像angular的插值表达式在模版中的作用一样,在flask中也可以一样使用,如果不熟悉angular的插值表达式的话也不要紧,看完下面的例子,基本上就会有一个大致的印象。

代码示例

liumiaocn:flask liumiao$ cat flask_4.py 
#!/usr/bin/python
from flask import Flask
from flask import render_template
app = Flask(__name__)
greeting_messages=["Hello World", "Hello Python"]
@app.route("/api/messages",methods=['GET'])
def get_messages():
  return render_template("resttest.html",messages=greeting_messages) 
if __name__ == "__main__":
  app.debug=True
  app.run(host='0.0.0.0',port=7000)
liumiaocn:flask liumiao$

模版文件

liumiaocn:flask liumiao$ cat templates/resttest.html 
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Hello Restful</title>
</head>
<body>
    {% for message in messages %}
 <h1>{{ message }}</h1>
    {% endfor %}
</body>
</html>
liumiaocn:flask liumiao$

代码解析:app.route中指定了HTTP谓词GET,缺省GET可以省略,如果一个方法对应多个谓词动作,通过request.method来分离时,可以写成methods=[‘GET','POST']的形式

执行&确认

liumiaocn:flask liumiao$ ./flask_4.py 
 * Serving Flask app "flask_4" (lazy loading)
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:7000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 131-533-062

页面确认

Python编程在flask中模拟进行Restful的CRUD操作

代码示例:HTTP谓词(DELETE|PUT|POST)

liumiaocn:flask liumiao$ cat flask_4.py 
#!/usr/bin/python
from flask import Flask
from flask import render_template
from flask import request
import json
app = Flask(__name__)
greeting_messages=["Hello World", "Hello Python"]
#HTTP: GET: Retrieve operation
@app.route("/api/messages",methods=['GET'])
def get_messages():
  return render_template("resttest.html",messages=greeting_messages) 
#HTTP: DELETE: Delete operation
@app.route("/api/messages/<messageid>",methods=['DELETE'])
def delete_message(messageid):
  global greeting_messages
  del greeting_messages[int(messageid)]
  return render_template("resttest.html",messages=greeting_messages) 
#HTTP: PUT: Update operation
#HTTP: POST: Create operation
@app.route("/api/messages/<messageid>",methods=['PUT','POST'])
def update_message(messageid):
  global greeting_message
  msg_info=json.loads(request.get_data(True,True,False))
  #msg_info=request.args.get('message_info')
  #msg_info=request.form.get('message_info','default value')
  #msg_info=request.values.get('message_info','hello...')
  greeting_messages.append("Hello " + msg_info["message_info"])
  return render_template("resttest.html",messages=greeting_messages) 
if __name__ == "__main__":
  app.debug=True
  app.run(host='0.0.0.0',port=7000)
liumiaocn:flask liumiao$

执行&结果确认

执行日志

liumiaocn:flask liumiao$ ./flask_4.py 
 * Serving Flask app "flask_4" (lazy loading)
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:7000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 131-533-062

结果确认:Delete

liumiaocn:flask liumiao$ curl -X DELETE http://localhost:7000/api/messages/1
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello Restful</title>
</head>
<body>
  <h1>Hello World</h1>
</body>
</html>liumiaocn:flask liumiao$

可以看到执行一次DELETE之后,两条消息现在只剩下一条消息了,接下来使用POST添加再添加一条

liumiaocn:flask liumiao$ curl -X POST -d '{"message_info":"LiuMiaoPost"}' http://localhost:7000/api/messages/3
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello Restful</title>
</head>
<body>
  <h1>Hello World</h1>
  <h1>Hello LiuMiaoPost</h1>
</body>
</html>liumiaocn:flask liumiao$

再执行一次PUT操作

liumiaocn:flask liumiao$ curl -X PUT -d '{"message_info":"LiuMiaoPut"}' http://localhost:7000/api/messages/4
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello Restful</title>
</head>
<body>
  <h1>Hello World</h1>
  <h1>Hello LiuMiaoPost</h1>
  <h1>Hello LiuMiaoPut</h1>
</body>
</html>liumiaocn:flask liumiao$

小结

这篇文章中,使用最简单的方式在flask中模拟了一下如何进行Restful的CRUD操作,当然,实际的做法有很多种,在接下来的文章中还会介绍另外一种非常常见的轮子flask-restful.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python的Django框架中的数据库配置指南
Jul 17 Python
Python脚本实时处理log文件的方法
Nov 21 Python
python和shell获取文本内容的方法
Jun 05 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
代码实例讲解python3的编码问题
Jul 08 Python
Python PIL库图片灰化处理
Apr 07 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Python基础教程之输入输出和运算符
Jul 26 Python
python3.5的包存放的具体路径
Aug 16 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
python实现网络五子棋
Apr 11 Python
python获取服务器响应cookie的实例
Dec 28 #Python
基于Python在MacOS上安装robotframework-ride
Dec 28 #Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 #Python
Python编程图形库之Pillow使用方法讲解
Dec 28 #Python
对python中大文件的导入与导出方法详解
Dec 28 #Python
Python编程深度学习计算库之numpy
Dec 28 #Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 #Python
You might like
php简单静态页生成过程
2008/03/27 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
解决python运行效率不高的问题
2020/07/20 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
工作经常出错的检讨书
2014/09/13 职场文书
新年祝酒词大全
2015/08/11 职场文书
导游词之西递宏村
2019/12/10 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技