我正在使用Flask构建REST API,将照片添加到数据库中。数据库在PhotoModel类中抽象化。 API接收一个JSON格式化的HTTP POST,其中包含bin字符串中的图片和名称,所有其他参数都是可选的。
如果发布的JSON中没有某个参数,如何构建“photo”对象? 在数据库Model(PhotoModel)上我只指定了两个必修项,因此只考虑JSON中存在的params的逻辑应该在下面的函数中。
def add_photo():
"""Add photo to database"""
if request.method == 'POST' and request.headers['Content-Type'] == 'application/json':
photo = PhotoModel(
name = request.json['name'],
device_version = request.json['device_version'],
date = request.json['date'],
picture = request.json['picture'],
comment = request.json['comment']
)
try:
photo.put()
return "200"
except CapabilityDisabledError:
return "500 DB read-only"
else:
return "415 Unsupported Media Type"
我无法弄清楚如何做,任何指针都会有帮助
答案 0 :(得分:1)
您可以将请求字典作为关键字参数传递给PhotoModel
:
photo = PhotoModel(**request.json)
答案 1 :(得分:0)
看看peewee它带有JSON中的RESTful API。它也是一个轻型ORM引擎。
答案 2 :(得分:0)
我发现了JSON Schema,它可以很好地验证JSON请求。
创建一个可用于所有视图的装饰器:
from functools import update_wrapper
from jsonschema import validate as jsonschema_validate
def validate(schema):
def decorator(f):
def wrapped_function(*args, **kwargs):
# Validate request Content Type
if request.json is None:
raise ValidationError("Content Type must be JSON")
# Validate document
jsonschema_validate(request.json, schema)
return f(*args, **kwargs)
return update_wrapper(wrapped_function, f)
return decorator
为您的观点使用装饰器:
@app.route('/', methods=['POST'])
@validate(schema)
def insert_document():
# now your request.json object is validated against the specified schema
答案 3 :(得分:0)
data = request.get_json() #You can use any method here.
#Below the required parameters outside the try
email=data['email']
role=data['role']
try:
#Here are the optional json parameters inside a try
firstname = data['firstname']
lastname = data['lastname']
except KeyError:
#Here handle the exception, maybe parse some default values.
pass