91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-24 23:43:24 來源:腳本之家 閱讀:397 作者:Alien-Hu 欄目:開發技術

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)

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

2.API接口:Resource充當路由的角色

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

其實就是想表達,在資源路由上(resources)定義多個方法(get,post,put等),就可以實現多種效果

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'下面,就可以實現2種請求方法
(2)add_resource方法中第一個參數:視圖函數名;第二個參數:路由的具體地址,以及string:todo_id代表傳遞的是一個字符串,且是必要參數。
(3)request.form[‘data']獲取request里面,form表單的key為data的參數,如果request里面,沒有data參數,那報錯。如果有包含data的多個參數,那也只會取data這一個參數

step1:為字典todos定義參數,key為todo1

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

step2:獲取todos里面的todo1的參數

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

step3:更新老的數據,多傳遞其他參數

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

step4:獲取最新的參數:

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

step5:不傳遞data參數,查看報錯情況:

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

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

這個問題詳情可以參考如下博文,已經解釋很詳細了:
https://www.jb51.net/article/176173.htm

簡單理解是:
url通過endpoint來去查找視圖函數(通常endpoint的名字與視圖函數名一致),但是如果不一致的時候,就需要有針對性的指定某個視圖函數去執行,也或者多個藍圖里面有一樣的視圖函數的場景下,需要指定具體的endpoint

4.API接口:參數解析

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

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表單里面獲取定義的參數

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

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

5.API接口:案例一(在form表單里面傳遞參數)

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


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

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

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

step1:第一次get請求,獲取原始的Tasks列表

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

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

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

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

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

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 Updata_Delete(Resource):
 def get(self, t_id):    # 根據t_id獲取對應的value
  abort_if_todo_doesnt_exist(t_id)
  return Tasks[t_id]

 def delete(self, t_id):   # 根據t_id刪除對應的value
  abort_if_todo_doesnt_exist(t_id)
  del Tasks[t_id]
  return 'delete success', 204

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

 def put(self, t_id):   # 根據t_id添加對應的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完整信息

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

step2:添加信息key值為:t5,內容為:studying

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

step3:查看t5值的情況

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

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那曲县| 凤台县| 固阳县| 富民县| 永川市| 仁布县| 嘉兴市| 汉阴县| 通榆县| 冀州市| 綦江县| 高阳县| 曲水县| 辽阳县| 咸宁市| 称多县| 安新县| 淮安市| 象州县| 尼木县| 彭山县| 余庆县| 嘉禾县| 建宁县| 阿城市| 沁源县| 游戏| 桃园市| 平安县| 松桃| 金堂县| 海盐县| 礼泉县| 井冈山市| 图们市| 法库县| 邯郸市| 聂荣县| 鄂伦春自治旗| 城步| 通化县|