Как объединить данные из двух API в Python
Итак, до сих пор я использовал только получение / отправку данных из одного API за раз. Я не уверен, как я могу объединить данные из двух API. Аналогично SQL, есть ли какой-нибудь способ объединения таблиц для достижения того же с API?
Я хотел бы отображать фотографии персонала вместе с другими данными о персонале в html-шаблоне.
API 1
https://test.com/api/Staff/GetStaffDetails
StaffId, Firstname, Lastname, Email
API 2
https://test.com/api/Staff/GetStaffPhotos
Id (this matches with the StaffId), Photo
Информация о персонале
def StaffDetails(request, *, context):
url = "https://test.com/api/Staff/GetStaffDetails"
headers = {
"X-DOMAIN": "test",
"X-TOKEN": "123456789qwertyuiop",
"User-Agent": "",
}
response = requests.post(url, headers=headers)
data = response.json()
random_data = random.sample(data, min(5, len(data)))
context = {"data": random_data}
return render(request, "StaffDetails.html", context)
StaffDetails.html
<table border="1">
<tr>
<td>STAFFID</td>
<td>FIRSTNAME</td>
<td>LASTNAME</td>
<td>EMAIL</td>
</tr>
{% for row in data %}
<tr>
<td>{{ row.StaffId }}</td>
<td>{{ row.Firstname }}</td>
<td>{{ row.Lastname }}</td>
<td>{{ row.Email }}</td>
</tr>
{% endfor %}
</table>
Фотография персонала
def StaffPhoto(request, *, context):
url = "https://test.com/api/Staff/GetStaffPhotos"
headers = {
"X-DOMAIN": "test",
"X-TOKEN": "123456789qwertyuiop",
"User-Agent": "",
}
response = requests.post(url, headers=headers)
data = response.json()
random_data = random.sample(data, min(5, len(data)))
context = {"data": random_data}
return render(request, "StaffPhoto.html", context)
StaffPhoto.html
<table border="1">
<tr>
<td>ID</td>
<td>PHOTO</td>
</tr>
{% for row in data %}
<tr>
<td>{{ row.Id }}</td>
<td><img src="data:image/jpeg;base64,{{ row.Photo }}" width="100px"></td>
</tr>
{% endfor %}
</table>
Спасибо вам.
Кажется, у вас есть изображения в виде списка словарей
[{'id': number1, 'image': image1}, {'id': number2, 'image': image2}, ...]
но если вы преобразуете его в словарь
{number1:image1, number2:image2}
тогда вам не нужно к нему присоединяться. потому что вы можете напрямую использовать row['StaffId']
для получения изображения из этого словаря
Минимальный рабочий пример:
data_staff = [
{'StaffId': 1, 'Firstname': 'A', 'Lastname':'A', 'Email': 'A.A@gmail.com'},
{'StaffId': 2, 'Firstname': 'B', 'Lastname':'B', 'Email': 'B.B@gmail.com'},
{'StaffId': 3, 'Firstname': 'C', 'Lastname':'C', 'Email': 'C.C@gmail.com'},
{'StaffId': 4, 'Firstname': 'D', 'Lastname':'D', 'Email': 'D.D@gmail.com'},
]
data_images = [
{'id': 1, 'image': 'image_A_A'},
{'id': 2, 'image': 'image_B_B'},
{'id': 3, 'image': 'image_C_C'},
{'id': 4, 'image': 'image_D_D'},
]
# convert to dictionary
images = {item['id']:item['image'] for item in data_images}
for item in data_staff:
_id = item['StaffId']
print(_id, item['Firstname'], images[_id])
Результат:
1 A image_A_A
2 B image_B_B
3 C image_C_C
4 D image_D_D