Рубрики
Без рубрики

Как заполнить вашу базу данных с внешнего API в Django.

В сегодняшней записи я собираюсь объяснить, как заполнить вашу базу данных с помощью данных с внешнего API I … Теги с Python, Django, API, CodeNewie.

В сегодняшней записи я собираюсь объяснить, как заполнить вашу базу данных с помощью данных с внешнего API в Django, создавая небольшой проект. Для этого мы собираемся использовать API Meadb – https://www.themealdb.com/api.php а также загрузка для стилизации.

Во-первых, создайте новый проект и вашу виртуальную среду.

django-admin startproject meal_project

Измените в каталог проекта и создайте новое приложение:

cd meal_project
python manage.py startapp meal_app

Добавьте недавно созданное приложение в установленные приложения под «settings.py»

INSTALLED_APPS = [
'meal_app',
]

В корневом каталоге создайте папку «шаблонов» и добавьте ее в «settings.py»

TEMPLATES = [
 'DIRS': [os.path.join(BASE_DIR, 'templates')],
]

В MOAL_APP создайте файл ‘urls.cy’ и в файле ‘urls rection rects rects.cy, включите путь к файлу urls rets.py.

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include ('meal_app.urls'))
]

В еле_app.urls добавьте путь к нашему взгляду. В наших представлениях мы будем иметь вид списка и подробную информацию.

from django.urls import  path
from product_app import views

urlpatterns = [
    path('', views.get_meals, name = "get_meals"),
    path('meals//',views.meal_detail, name = "meal_detail")
]

В папке шаблонов создайте папку «Питание» и внутри нее «Base.html», из которой будут наследуются все другие шаблоны.

base.html :

{% load static %}




    
    
    Movie App
    
    


{% block content%}
{% endblock %}







Тогда еда .html.

{% extends 'meals/base.html'%}
{% load static %}
{% block content %} 
    

Search for your favorite Meals


{% endblock %}

еда .html Содержит простую форму поиска и кнопку отправки.

Далее нам нужно создать модель, которую мы заполнили с данными из API еды DB. Поля на модели соответствуют специфическим атрибутам на API, с которыми мы хотим заполнить нашу базу данных.

models.py

from django.db import models

class Meal(models.Model):
    name = models.CharField(max_length=50, blank = True, null = True)
    category = models.CharField(max_length=10, blank = True, null = True)
    instructions = models.CharField(max_length=4000, blank = True, null = True)
    region = models.CharField(max_length=20, blank = True, null = True)
    slug = models.SlugField(default = 'test')
    image_url = models.CharField( max_length=50, blank = True, null = True)

    def __str__(self):
        return self.name

Как выглядит наш API:

В настоящее время время перенести нашу базу данных и создать наши таблицы базы данных.

python manage.py makemigrations
python manage.py migrate

Далее нам нужно установить библиотеку Python, которая помогает сделать HTTP-запросы;

pip install requests

Основная логика проекта будет проживать в Просмотр .py Отказ

from django.shortcuts import  render
from meal_app.models import Meal
import requests

def get_meals(request):
    all_meals = {}
    if 'name' in request.GET:
        name = request.GET['name']
        url = 
        'https://www.themealdb.com/api/json/v1/1/search.php? 
        s=%s' % name
        response = requests.get(url)
        data = response.json()
        meals = data['meals']

        for i in meals:
            meal_data = Meal(
                name = i['strMeal'],
                category = i['strCategory'],
                instructions = i['strInstructions'],
                region = i['strArea'],
                slug = i['idMeal'],
                image_url = i['strMealThumb']
            )
            meal_data.save()
            all_meals = Meal.objects.all().order_by('-id')

    return render (request, 'meals/meal.html', { "all_meals": 
    all_meals} )

В функции get_meals Определено выше, мы получаем значение пользовательских типов в ввод поиска, используя запрос. Получить и назначить его переменной название .Потом Мы передаем эту переменную в качестве нашего поискового запроса в URL-адрес, когда мы производим HTTP-запрос. Мы получаем ответ и конвертируем его JSON. Это возвращает список, который мы сохраняем в переменной Питание Отказ

name = request.GET['name']
url = 'https://www.themealdb.com/api/json/v1/1/search.php?s=%s' % name
response = requests.get(url)
data = response.json()
meals = data['meals']

Теперь, чтобы заполнить нашу базу данных с помощью списка наш HTTP-запрос, возвращаемый, нам нужно включить в список элементов списка и назначить параметры в виде полей в нашей модели.

 for i in meals:
            meal_data = Meal(
                name = i['strMeal'],
                category = i['strCategory'],
                instructions = i['strInstructions'],
                region = i['strArea'],
                slug = i['idMeal'],
                image_url = i['strMealThumb']
            )

Затем мы сохраняем в базе данных и передаем ее как контекст наших шаблонов:

from django.shortcuts import  render
from meal_app.models import Meal
import requests

def get_meals(request):
    all_meals = {}
    if 'name' in request.GET:
        name = request.GET['name']
        url = 
        'https://www.themealdb.com/api/json/v1/1/search.php? 
        s=%s' % name
        response = requests.get(url)
        data = response.json()
        meals = data['meals']

        for i in meals:
            meal_data = Meal(
                name = i['strMeal'],
                category = i['strCategory'],
                instructions = i['strInstructions'],
                region = i['strArea'],
                slug = i['idMeal'],
                image_url = i['strMealThumb']
            )
            meal_data.save()
            all_meals = Meal.objects.all().order_by('-id')

    return render (request, 'meals/meal.html', { "all_meals": 
    all_meals} )

В пределах Еда, HTML

{% extends 'meals/base.html'%}
{% load static %}
{% block content %}
  

Search for your favorite Meals




{% for meal in all_meals %}
Card image cap

{{ meal.name }}


{{ meal.region }}




{% endfor %}
{% endblock %}

Теперь, если пользователь ищет еду; Он отображает на странице и автоматически сохраняется в базе данных.

Страница списка еды :

База данных :

Наконец, мы создаем детали еды:

еда_detail.html.

{% extends 'meals/base.html'%}
{% load static %}
{% block content %}






{{ meal.name }}

Food Description

{{ meal.instructions }}

Food Details

  • {{ meal.category }}
  • {{ meal.region }}
{% endblock %}

в views.py

def meal_detail(request, id):
    meal = Meal.objects.get(id = id)
    print(meal)
    return render (
        request,
        'meals/meal_detail.html',
        {'meal': meal}
    )

Теперь, когда мы нажимаем на Узнать больше кнопка Мы доставлены в еда_details.html шаблон

Спасибо! ☺ ️

Оригинал: “https://dev.to/yahaya_hk/how-to-populate-your-database-with-data-from-an-external-api-in-django-398i”