Как передать данные Bing Web Search API из Django для отображения в React
У меня получилось вывести данные из результатов поиска в папку Django под названием api.py с помощью Python. Но как мне теперь перенести эти данные в react, чтобы отобразить их? Может ли кто-нибудь помочь мне с подробным описанием того, как это сделать. Заранее большое спасибо!
У меня также есть ключ API Bing, хранящийся в файле .env, который находится на том же уровне файлов, что и файл api.py.
API веб-поиска Bing: https://learn.microsoft.com/en-us/bing/search-apis/bing-web-search/reference/endpoints
code: в файле api.py
`from pprint import pprint
import requests
from decouple import config
subscription_key = config('subscription_key', default='')
search_url = "https://api.bing.microsoft.com/v7.0/search"
search_term = 'iphone 13'
headers = {"Ocp-Apim-Subscription-Key": subscription_key}
params = {"q": search_term, "textDecorations": True, "textFormat": "HTML"}
response = requests.get(search_url, headers=headers, params=params)
response.raise_for_status()
search_results = response.json()
pages = search_results\['webPages'\]
results = pages\['value'\]
pprint(results\[0\])`
Вот какие данные я получаю в терминале:
Я пробовал искать в stackoverflow и во всем интернете, не нашел никого, кто бы действительно использовал этот API...
Краткий ответ
Почему бы вам не создать GET api в приложении Django и не разместить всю эту логику внутри представления DRF. Например, отобразите эту конечную точку на вашем представлении
/my-view
. И, наконец, вызовите этот api из вашего react-приложения
Подробный ответ:
ШАГ 1: Создайте представление в файле views.py:
from django.shortcuts import render from django.http import HttpResponse из pprint import pprint импортировать запросы from decouple import config
def my_view(request):
subscription_key = config('subscription_key', default='')
search_url = "https://api.bing.microsoft.com/v7.0/search"
search_term = 'iphone 13'
headers = {"Ocp-Apim-Subscription-Key": subscription_key}
params = {"q": search_term, "textDecorations": True,
"textFormat": "HTML"}
response = requests.get(search_url,headers=headers,params=params)
response.raise_for_status()
search_results = response.json()
pages = search_results\['webPages'\]
results = pages\['value'\]
pprint(results\[0\])`
return results
ШАГ 2: Вам нужно сопоставить функцию представления с URL. Откройте файл urls.py вашего приложения и добавьте шаблон URL для вашего представления. Например:
from django.urls import path
from . import views
urlpatterns = [
path('my-view/', views.my_view, name='my-view'),
]
ШАГ 3:
Создайте компонент в React :
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const MyComponent = () => {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await axios.get('http://your-django-api-url/my-view/');
setData(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
};
fetchData();
}, []);
return (
<div>
<h1>My Component</h1>
{data ? (
<ul>
{data.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
) : (
<p>Loading...</p>
)}
</div>
);
};
export default MyComponent;
Шаг 4:
Рендеринг этого компонента :
import React from 'react';
import MyComponent from './MyComponent';
const App = () => {
return (
<div>
<h1>My React App</h1>
<MyComponent />
</div>
);
};
export default App;
```This is what I have, I am getting an AttributError-list object has no attribute get. What am I doing wrong?```
[console][1] https://i.stack.imgur.com/5yT6P.png
[views/react][1]: https://i.stack.imgur.com/aJiBM.png
[paths][1]: https://i.stack.imgur.com/TBBZx.png```