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 相关文章推荐
深入理解Javascript中的this关键字
Mar 27 Python
python杀死一个线程的方法
Sep 06 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python发送告警邮件脚本
Sep 17 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python 动态导入对象,importlib.import_module()的使用方法
Aug 28 Python
python 实现单通道转3通道
Dec 03 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
python实现图片压缩代码实例
2019/08/12 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
Python实现分数序列求和
2020/02/25 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
旅游节目策划方案
2014/05/26 职场文书
人力资源部岗位职责
2015/02/11 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP