Я написал API-интерфейс для колбы и базу данных SQLite с peewee. Я могу «попасть» в мой список произведений искусства, для которых я храню данные. Я также могу «получать» отдельные фрагменты, «постить» и «ставить» без проблем. Однако, если я хочу удалить одну часть, мой API удаляет ВСЕ записи частей. Прямо сейчас я просто тестирую свой API, используя почтальон, поэтому я знаю, что это не ошибка AJAX или javascript (о которой я напишу позже). Любое руководство может быть полезным.
Я попытался увеличить количество запросов, необходимых для создания запроса на удаление, где поле create_by в моей базе данных (которое является целочисленным идентификатором) должно совпадать с идентификатором аутентификации пользователя. Я создал двух пользователей и разместил по два разных фрагмента каждый, и выполняя запрос на удаление фрагмента, все еще удалил все фрагменты.
def piece_or_404(id):
try:
piece = models.Piece.get(models.Piece.id==id)
except models.Piece.DoesNotExist:
abort(404)
else:
return piece
class Piece(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument(
'title',
required=True,
help='No title provided',
location=['form', 'json']
)
self.reqparse.add_argument(
'location',
required=True,
help='No url provided',
location=['form', 'json']
)
self.reqparse.add_argument(
'description',
required=False,
nullable=True,
location=['form', 'json'],
)
self.reqparse.add_argument(
'created',
type=inputs.date,
required=False,
help='Date not in YYYY-mm-dd format',
location=['form', 'json']
)
self.reqparse.add_argument(
'price',
type=inputs.positive,
required=True,
help='No price provided',
location=['form', 'json']
)
self.reqparse.add_argument(
'created_by',
type=inputs.positive,
required=True,
help='No user provided',
location=['form', 'json']
)
super().__init__()
@auth.login_required
def delete(self, id):
try:
Piece = models.Piece.select().where(
models.Piece.id==id
).get()
except models.Piece.DoesNotExist:
return make_response(json.dumps(
{'error': 'That Piece does not exist or is not editable'}
), 403)
query = Piece.delete()
query.execute()
return '', 204, {'Location': url_for('resources.pieces.pieces')}
Если у меня есть фрагменты с идентификаторами 1, 2 и 3, то при выполнении действительного запроса на удаление на url.com/api/v1/pieces/1 следует удалить только фрагмент с идентификатором 1.