Python restful框架接口开发实现


Posted in Python onApril 13, 2020

理解

  • 每一个URL代表一种资源
  • 客户端和服务端之间,传递这种资源的某种表现层,客户端通过四个HTTP动词
  • 对服务端资源进行操作,实现“表现层状态转化”
  • 资源:网络的具体信息,如图片、文字等
  • 表现层:"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现
  • 状态转化:访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
  • 4个HTTP动词:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

安装 flask restful

1.cmd输入:pip install flask,安装flask

2.cmd输入:pip install flask-restful,安装flask-restful

安装过程中会出现如下报错:

You are using pip version 9.0.1, however version 19.2.3 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' comm and.

解决方法

升级pip python -m pip install --upgrade pip

注意:某些Flask版本下,引入模块时采用from flask.ext.restful import Api出错,则可以使用from flask_restful import Api

官网教程

例证

restful.py 内容:

#!/usr/bin/python3
# encoding:utf-8
from flask import Flask,request
from flask_restful import reqparse, abort, Api, Resource

#初始化app、api
app = Flask(__name__)
api = Api(app)

LISTS = [
  {'parameter': '首页'},
  {'parameter': '登录'},
  {'parameter': '后台'}
]

# /LISTS/<list_id>(url参数),判断输入的参数值列表LISTS下标越界,越界则退出
def abort_if_list_doesnt_exist(list_id):
  try:
    LISTS[list_id]
  except IndexError:
    abort(404, message="输入的值,不在范围内")
'''
add_argument('per_page', type=int, location='args') str
add_argument中通过指定参数名、参数类型、参数获取方式来获取参数对象并支持做合法性校验
第一个参数是需要获取的参数的名称
参数type: 参数指的类型, 如果参数中可能包含中文需要使用six.text_type. 或直接不指定type
参数location: 获取参数的方式,可选的有args(url中获取)、json(json类型的)、form(表单方式提交)
参数required:是否必要,默认非必要提供 required=True(必须)
参数help:针对必要的参数,如果请求时没有提供,则会返回help中相应的信息
'''
parser = reqparse.RequestParser()
#入参parameter,location='json'表示为入参为json格式
parser.add_argument('parameter',location='json')

# 路由类,函数get、post、put、delete等实现http请求方法
# url不带入参 /LISTS
class c_dictList(Resource):
  #类型get,根据列表LISTS,处理,返回一个新的列表r_lists
  def get(self):
    r_lists = []
    for listV in LISTS:
      if listV:
        new_list = {}
        #LISTS列表存的是字典,遍历时为字典listV['parameter'],可获取字典值
        new_list['parameter'] = listV['parameter']
        #LISTS为列表,index可以查出对应下标值
        new_list['url'] = 'url/'+ str(LISTS.index(listV))
        #LISTS列表中添加字典
        r_lists.append(new_list)
    return r_lists
    
  #类型post,在列表LISTS后添加一个值,并返回列表值
  def post(self):
    args = parser.parse_args()
    list_id = len(LISTS)
    #args['parameter'],入参
    LISTS.append({'parameter': args['parameter']}) 
    return LISTS, 201
  
# 路由类,函数get、post、put、delete等实现http请求方法
# url带入参 /LISTS/<list_id>
class c_dict(Resource):
  #根据输入url入参值作为LISTS的下标,返回该值
  def get(self, list_id):
    url_int = int(list_id)
    abort_if_list_doesnt_exist(url_int)
    return LISTS[url_int]
  #根据输入url入参值作为LISTS的下标,修改该值,并返回列表值
  def put(self, list_id):
    url_int = int(list_id)
    args = parser.parse_args()
    #args['parameter'],入参
    parameter = {'parameter': args['parameter']}
    LISTS[url_int] = parameter
    return LISTS, 201
  #根据输入url入参值作为LISTS的下标,删除该值
  def delete(self, list_id):
    url_int = int(list_id)
    abort_if_list_doesnt_exist(url_int)
    del LISTS[url_int]
    return '', 204
#设置资源路由api.add_resource(类名,url路径)
#url,不带入参,如:http://127.0.0.1:8891/LISTS
api.add_resource(c_dictList, '/LISTS')
#url,带入参,<list_id>为变量值,如:http://127.0.0.1:8891/LISTS/1
api.add_resource(c_dict, '/LISTS/<list_id>')

if __name__ == '__main__':
  #不设置ip、端口,默认:http://127.0.0.1:5000/
  #app.run(debug=True)
  #设置ip、端口
  app.run(host="127.0.0.1", port=8891,debug=True)

控制台运行结果:

Serving Flask app "123" (lazy loading) * Environment: production
WARNING: This is a development server. Do not use it in a productiondeployment. Use a production WSGI server instead. * Debug mode: onRestarting with stat * Debugger is active! * Debugger PIN: 279-443-943 * Running on http://127.0.0.1:8891/ (Press CTRL+C toquit)

postman调用结果

url不带参数

get

Python restful框架接口开发实现

post,有请求入参,格式为json,入参值追加到列表后面

Python restful框架接口开发实现

url带参数get,根据url入参值如下图值=1,作为LISTS的下标,获取列表值

Python restful框架接口开发实现

put ,根据url入参值如下图值=1,作为LISTS的下标,修改该列表值为请求入参值,登录改为订单

Python restful框架接口开发实现

put ,根据url入参值如下图值=2,作为LISTS的下标,删除该值,成功返回状态204

Python restful框架接口开发实现

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

Python 相关文章推荐
Python中字符编码简介、方法及使用建议
Jan 08 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Windows下python3.7安装教程
Jul 31 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
Python importlib模块重载使用方法详解
Oct 13 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 #Python
windows上彻底删除jupyter notebook的实现
Apr 13 #Python
Python json转字典字符方法实例解析
Apr 13 #Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 #Python
Python unittest框架操作实例解析
Apr 13 #Python
windows python3安装Jupyter Notebooks教程
Apr 13 #Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 #Python
You might like
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
javascript hashtable实现代码
2009/10/13 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
python连接oracle数据库实例
2014/10/17 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
浅析Python 责任链设计模式
2020/09/11 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
奥巴马连任演讲稿
2014/05/15 职场文书
三严三实对照检查材料
2014/08/25 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
亮剑观后感600字
2015/06/05 职场文书
同事欢送会致辞
2015/07/31 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS
Golang 结构体数据集合
2022/04/22 Golang
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers