【发布时间】:2018-08-19 22:50:12
【问题描述】:
我是 django 的新手,我必须用它开发一个 REST API。我在 mysql db 上有数据,我想根据需要更新其中一个。我使用 PyMySQL,每个数据有 5 个字段(petId、name、species、gender、birthday)。例如,url 可以是
.../api/pets/3/update?name=fluffy,age=4
或
.../api/pets/3/update?age=5
或
.../api/pets/3/update?age=2,gender=f,name=fluffy
在每种情况下,这都应该使用给定的参数更新 id 为 3 的宠物。如您所见,参数的位置和数量可能会有所不同。
在我的 views.py 我有这个方法
def update_a_pet(requested_pet_id, **data):
pet = get_a_pet(requested_pet_id)
pet_id = data.get('petId', pet[petId])
pet_name = data.get('name', pet[name])
pet_species = data.get('species', pet[species])
pet_gender = data.get('gender', pet[gender])
pet_birthday = data.get('birthday', pet[birthday])
try:
with create_connection().cursor() as cursor:
sql = "UPDATE `%s` SET `%s` = `%d`, `%s` = `%s`, `%s` = `%s`, `%s` = `%s`, `%s` = `%s` WHERE `%s` = `%d`"
cursor.execute(sql, (table_name, petId, pet_id, name, pet_name, species, pet_species, gender, pet_gender,
birthday, pet_birthday, petId, requested_pet_id))
create_connection().commit()
我打算用 requested_pet_id 变量和所有其他参数作为 **data 获取 id。
在 urls.py 我有下面这行来完成这个任务。但我不知道如何传递不同数量和类型的参数。
url('api/pets/(?P<requested_pet_id>[0-9]+)/update/$', views.update_a_pet),
这是我目前所能想到的。如果有可能有更好的方法,我也会提出建议。谢谢。
【问题讨论】: