昨日的內容教授大家如何透過POSTMAN來保護我們的程式,今日的內容就在處理之前遇到的BUG。這裡介紹大家一個新的函式庫flask-marshmallow,透過此函式庫可以讓我們的程式在處理請求參數更彈性,接下來就進入我們今天的教程。
本文章同步放置於此
以下先讓大家回顧一下目前的程式碼:
from flask_restful import Resource, reqparse
users = [{
'name': 'kirai',
}]
class User (Resource):
parser = reqparse.RequestParser()
parser.add_argument('email', required=True, help='Email is required')
parser.add_argument('password', required=True, help='Password is required')
def get(self, name):
find = [item for item in users if item['name'] == name]
if len(find) == 0:
return {
'message': 'username not exist!'
}, 403
user = find[0]
if not user:
return {
'message': 'username not exist!'
}, 403
return {
'message': '',
'user': user
}
def post(self, name):
arg = self.parser.parse_args()
user = {
'name': name,
'email': arg['email'],
'password': arg['password']
}
global users
users.append(user)
return {
'message': 'Insert user success',
'user': user
}
def put(self, name):
arg = self.parser.parse_args()
find = [item for item in users if item['name'] == name]
if len(find) == 0:
return {
'message': 'username not exist!'
}, 403
user = find[0]
user['email'] = arg['email']
user['password'] = arg['password']
return {
'message': 'Update user success',
'user': user
}
def delete(self, name):
global users
users = [item for item in users if item['name'] != name]
return {
'message': 'Delete done!'
}
class Users(Resource):
def get(self):
return {
'message': '',
'users': users
}
大家還記得我們之前遇到新增以及更新使用者所遇到的問題嗎,那就是目前的寫法沒有辦法驗證email
以及password
資料的正確性,頂多只能確定使用者有提交此參數,所以這裡我們要介紹一個套件來取代原來flask-restul內建的reqparse。
安裝的方法很簡單就是輸入以下指令即可:
pip install flask-marshmallow
在使用flask-marshmallow之前先告訴大家甚麼是flask-marshmallow,這函式庫其實也沒太大的學問,僅是將marshmallow與flask整合起來而已,所以其主要內容還是要參照marshmallow的api。
在安裝完flask-marshmallow後要處理的是如何在我們的flask-restful加入flask-marshmallow的函式庫,這邊為了我們後續開發方便我們先新增一個ma.py
在common
資料夾內,檔案的內容如下:
from flask_marshmallow import Marshmallow
ma = Marshmallow()
為什麼我們要做這個動作呢,主要是為了避免以後的開法產生循環參考的狀況,因為在後續的動作很常會使用到ma
這個實體。
在設定好flask_marshmallow後要把flask_marshmallow加到我們的flask-restfut應用程序之中,首先先列出截至目前為止app.py如下:
from flask import Flask
from flask_restful import Api
from resources.user import User
app = Flask(__name__)
api = Api(app)
api.add_resource(User, "/user/<string: name>")
if __name__ == "__main__":
app.run()
而加入flask_marshmallow的方式就是將原先app.py修下內容如下:
from flask import Flask
from flask_restful import Api
from resources.user import User
app = Flask(__name__)
api = Api(app)
api.add_resource(User, "/user/<string: name>")
if __name__ == "__main__":
from common.ma import ma
ma.init_app(app)
app.run()
如此我們就可以在專案中使用flask_marshmallow來解析我們接收到的請求參數。
今日的內容主要是告訴大家之前的程序有些甚麼問題,還有提出我們可以透過flask_marshmallow來解決這問題,並且教授大家如何在原來的程序之中加入flask_marshmallow。不過截至目前為止還沒有說到flask_marshmallow如何使用,這部分待明日在告訴大家如何使用,敬請期待。