亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中Flask-RESTful編寫API接口(小白入門)

 更新時(shí)間:2019年12月11日 10:54:00   作者:Alien-Hu  
這篇文章主要介紹了Python中Flask-RESTful編寫API接口(小白入門),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.API接口:hello world 案例

from flask import Flask
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
 def get(self):
  return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
 app.run(debug=True)

這里寫圖片描述

2.API接口:Resource充當(dāng)路由的角色

官方文檔的說(shuō)法:
Flask-RESTful 提供的最主要的基礎(chǔ)就是資源(resources)。資源(Resources)是構(gòu)建在 Flask 可拔插視圖 之上,只要在你的資源(resource)上定義方法就能夠容易地訪問(wèn)多個(gè) HTTP 方法.

其實(shí)就是想表達(dá),在資源路由上(resources)定義多個(gè)方法(get,post,put等),就可以實(shí)現(xiàn)多種效果

from flask import Flask, request
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)

todos = {}

class TodoSimple(Resource):
 def get(self, todo_id):
  return {todo_id: todos[todo_id]}

 def put(self, todo_id):
  todos[todo_id] = request.form['data']
  return {todo_id: todos[todo_id]}

api.add_resource(TodoSimple, '/<string:todo_id>')

if __name__ == '__main__':
 app.run(debug=True)

解釋:
(1)TodoSimple類定義了2種方法,最終地址/string:todo_id'下面,就可以實(shí)現(xiàn)2種請(qǐng)求方法
(2)add_resource方法中第一個(gè)參數(shù):視圖函數(shù)名;第二個(gè)參數(shù):路由的具體地址,以及string:todo_id代表傳遞的是一個(gè)字符串,且是必要參數(shù)。
(3)request.form[‘data']獲取request里面,form表單的key為data的參數(shù),如果request里面,沒(méi)有data參數(shù),那報(bào)錯(cuò)。如果有包含data的多個(gè)參數(shù),那也只會(huì)取data這一個(gè)參數(shù)

step1:為字典todos定義參數(shù),key為todo1

這里寫圖片描述

step2:獲取todos里面的todo1的參數(shù)

這里寫圖片描述

step3:更新老的數(shù)據(jù),多傳遞其他參數(shù)

這里寫圖片描述

step4:獲取最新的參數(shù):

這里寫圖片描述

step5:不傳遞data參數(shù),查看報(bào)錯(cuò)情況:

這里寫圖片描述

3.API接口:endpoint(端口)的理解:

這個(gè)問(wèn)題詳情可以參考如下博文,已經(jīng)解釋很詳細(xì)了:
http://chabaoo.cn/article/176173.htm

簡(jiǎn)單理解是:
url通過(guò)endpoint來(lái)去查找視圖函數(shù)(通常endpoint的名字與視圖函數(shù)名一致),但是如果不一致的時(shí)候,就需要有針對(duì)性的指定某個(gè)視圖函數(shù)去執(zhí)行,也或者多個(gè)藍(lán)圖里面有一樣的視圖函數(shù)的場(chǎng)景下,需要指定具體的endpoint

4.API接口:參數(shù)解析

官方文檔:
(1)盡管 Flask 能夠簡(jiǎn)單地訪問(wèn)請(qǐng)求數(shù)據(jù)(比如查詢字符串或者 POST 表單編碼的數(shù)據(jù)),驗(yàn)證表單數(shù)據(jù)仍然很痛苦。Flask-RESTful 內(nèi)置了支持驗(yàn)證請(qǐng)求數(shù)據(jù),它使用了一個(gè)類似 argparse 的庫(kù)。
(2)需要注意地是與 argparse 模塊不同,reqparse.RequestParser.parse_args() 返回一個(gè) Python 字典而不是一個(gè)自定義的數(shù)據(jù)結(jié)構(gòu)。

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)

parser = reqparse.RequestParser()
parser.add_argument('task', type=str)
parser.add_argument('name', type=str)


# 獲取 & 更新
class Get_Modify(Resource):
 def post(self):
  args = parser.parse_args()
  print(args)
  return args, 201


api.add_resource(Get_Modify, '/get_modify')

if __name__ == '__main__':
 app.run(debug=True)

step1:從form表單里面獲取定義的參數(shù)

這里寫圖片描述

解釋:
即使傳遞其他參數(shù),最終也只會(huì)讀取定義的2個(gè)參數(shù)的值
通過(guò)如上代碼說(shuō)明:reqparse.RequestParser.parse_args(),即如上的args可以獲取到request的form表單的參數(shù),最終是一個(gè)字典

5.API接口:案例一(在form表單里面?zhèn)鬟f參數(shù))

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)

Tasks = {
 't1': {'task': 'eat an app'},
 't2': {'task': 'play football'},
 't3': {'task': 'watching TV'},
}

def abort_if_todo_doesnt_exist(t_id):
 if t_id not in Tasks:
  abort(404, message="Todo {} doesn't exist".format(t_id))


parser = reqparse.RequestParser()
parser.add_argument('task', type=str)


# 獲取 & 更新
class Get_Modify(Resource):
 def get(self):
  return Tasks

 def post(self):
  args = parser.parse_args()
  t_id = int(max(Tasks.keys()).lstrip('t')) + 1
  t_id = 't%i' % t_id
  Tasks[t_id] = {'task': args['task']}
  return Tasks[t_id], 201


# 設(shè)置每個(gè)視圖函數(shù)的訪問(wèn)格式
api.add_resource(Get_Modify, '/get_modify')

if __name__ == '__main__':
 app.run(debug=True)

解釋:
(1)如上的函數(shù),get是獲取總的列表Tasks
(2)post是添加最新的一個(gè)key的值,且key的值是以“t”開(kāi)頭,數(shù)字自增的一種形式
(3)max(Tasks.keys())這個(gè)可以獲取到Tasks列表里面,索引最大的key值,在沒(méi)添加的時(shí)候,索引最大為t3
(4)x_string.lstrip(‘t'),這個(gè)可以截取x_string字符串里面以't'開(kāi)始的剩余字符串。例如t3最終得到3,最終int(max(Tasks.keys()).lstrip(‘t')) + 1這一行的意思是,得到列表最大的一個(gè)key的索引,然后自增到下一個(gè)。
(5)在希望在form表單里面?zhèn)鬟f參數(shù),需要在函數(shù)里面,使用args = parser.parse_args()接收傳遞的參數(shù),具體key值通過(guò)add_argument函數(shù)設(shè)置

step1:第一次get請(qǐng)求,獲取原始的Tasks列表

這里寫圖片描述

step2:第二次post請(qǐng)求,添加value的值為studying,且第三次get請(qǐng)求,查看最新Tasks

這里寫圖片描述

這里寫圖片描述

6.API接口:案例二(通過(guò)url里面的參數(shù)作為查詢的參數(shù))

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)

Tasks = {
 't1': {'task': 'eat an app'},
 't2': {'task': 'play football'},
 't3': {'task': 'watching TV'},
}


def abort_if_todo_doesnt_exist(t_id):
 if t_id not in Tasks:
  abort(404, message="Todo {} doesn't exist".format(t_id))


parser = reqparse.RequestParser()
parser.add_argument('task', type=str)


# 更新 & 刪除 任務(wù)
class Updata_Delete(Resource):
 def get(self, t_id):    # 根據(jù)t_id獲取對(duì)應(yīng)的value
  abort_if_todo_doesnt_exist(t_id)
  return Tasks[t_id]

 def delete(self, t_id):   # 根據(jù)t_id刪除對(duì)應(yīng)的value
  abort_if_todo_doesnt_exist(t_id)
  del Tasks[t_id]
  return 'delete success', 204

 def post(self, t_id):   # 判斷t_id是否存在,并返回Tasks整個(gè)列表
  abort_if_todo_doesnt_exist(t_id)
  return Tasks,201

 def put(self, t_id):   # 根據(jù)t_id添加對(duì)應(yīng)的value,并返回所有值
  args = parser.parse_args()
  task = {'task': args['task']}
  Tasks[t_id] = task
  return Tasks, 201


api.add_resource(Updata_Delete, '/update_delete/<t_id>')

if __name__ == '__main__':
 app.run(debug=True)

step1:查看Tasks完整信息

這里寫圖片描述

step2:添加信息key值為:t5,內(nèi)容為:studying

這里寫圖片描述

step3:查看t5值的情況

這里寫圖片描述

step4:刪除t1的值,然后查看Tasks的完整信息

這里寫圖片描述

這里寫圖片描述

解釋:
(1)通過(guò)url傳遞參數(shù),給視圖函數(shù),這種方式一般用在get請(qǐng)求,post請(qǐng)求通過(guò)form表單形式比較實(shí)用
(2)通過(guò)url傳遞參數(shù),需要定義函數(shù)時(shí)候,使用形參t_id,且在使用add_resource()函數(shù)的使用,url參數(shù)形式最后添加<t_id>變量,例如'/update_delete/<t_id>'這個(gè)形式。
(3)delete這個(gè)函數(shù),最終執(zhí)行刪除是成功的,但是最終并沒(méi)有返回return的字符串"delete success",具體原因不詳,可能是用法不對(duì),后續(xù)再更新中說(shuō)明.
(return ‘delete success', 204 將 204去掉即可)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 解壓pkl文件的方法

    python 解壓pkl文件的方法

    今天小編就為大家分享一篇python 解壓pkl文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 用python批量移動(dòng)文件

    用python批量移動(dòng)文件

    這篇文章主要介紹了如何用python批量移動(dòng)文件,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python如何讀寫json數(shù)據(jù)

    python如何讀寫json數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了python如何讀寫json數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python+django實(shí)現(xiàn)文件下載

    Python+django實(shí)現(xiàn)文件下載

    本文是python+django系列的第二篇文章,主要是講述是先文件下載的方法和代碼,有需要的小伙伴可以參考下。
    2016-01-01
  • 淺談pymysql查詢語(yǔ)句中帶有in時(shí)傳遞參數(shù)的問(wèn)題

    淺談pymysql查詢語(yǔ)句中帶有in時(shí)傳遞參數(shù)的問(wèn)題

    這篇文章主要介紹了淺談pymysql查詢語(yǔ)句中帶有in時(shí)傳遞參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 淺析PyTorch中nn.Linear的使用

    淺析PyTorch中nn.Linear的使用

    這篇文章主要介紹了淺析PyTorch中nn.Linear的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python threading模塊condition原理及運(yùn)行流程詳解

    Python threading模塊condition原理及運(yùn)行流程詳解

    這篇文章主要介紹了Python threading模塊condition原理及運(yùn)行流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Django中URL的參數(shù)傳遞的實(shí)現(xiàn)

    Django中URL的參數(shù)傳遞的實(shí)現(xiàn)

    這篇文章主要介紹了Django中URL的參數(shù)傳遞的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python3中requests庫(kù)重定向獲取URL

    python3中requests庫(kù)重定向獲取URL

    這篇文章主要介紹了python3中requests庫(kù)重定向獲取URL,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 使用Python實(shí)現(xiàn)FTP文件自動(dòng)傳輸腳本

    使用Python實(shí)現(xiàn)FTP文件自動(dòng)傳輸腳本

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)FTP文件自動(dòng)傳輸腳本,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2023-12-12

最新評(píng)論