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

Реализовать обновления в режиме реального времени с помощью Django Rest Framework | Строительство криптовалюты API

Что случилось, разработчики? Пришло время создать еще один прохладный проект, используя Django и Framework. В этом… Tagged с Python, Django, WebDev, Tuperial.

Пришло время создать еще один прохладный проект, используя Django и Framework.

В этом посте мы собираемся построить API REST в реальном времени.

Канал YouTube с видеоуроками – Обратный питон youtube

Прежде чем мы продолжим, посмотрите Обратный питон Анкет Вы можете найти больше таких статей с дизайном UI UX, и если вам понравилось, поделитесь в социальных сетях или с друзьями.

В настоящее время я заинтересован в криптовалюте, поэтому я решил создать API криптовалюты, чтобы использовать его в React. Что ж, нам нужно постоянно ползать и постоянно обновлять данные и избегать долгосрочного тайм -аута.

Установка и конфигурация

Начнем с создания нового проекта с именем CryptocurrencyTracking и внутри вашего проекта создать приложение с именем Trackingapi

django-admin startproject cryptocurrencytracking
cd cryptocurrencytracking
django-admin startapp trackingAPI

и установить платформу REST:

pip install djangorestframework

После завершения установки откройте свой настройки.py и обновление stasted_apps.

INSTALLED_APPS = [
    ...

    'rest_framework',
    'trackingAPI',  
]

Итак, я заявил, прежде чем нам понадобятся долгосрочные запросы. Сельдерей является лучшим выбором для выполнения обработки фоновой задачи в экосистеме Python/Django. Он имеет простой и четкий API, и он прекрасно интегрируется с Django. Таким образом, мы используем сельдерея для выполнения трудоемких задач, передавая их в очередь, чтобы выполняться в фоновом режиме, и всегда поддерживать сервер готовым отвечать на новые запросы.

Чтобы установить выполнение сельдерея следующая команда:

pip install Celery

Сельдерея требует решения для отправки и получения сообщений; Обычно это происходит в виде отдельной службы, называемой брокером сообщения. Мы будем настраивать сельдерей, чтобы использовать Rabbitmq Система обмена сообщениями, поскольку она обеспечивает надежные, стабильные производительность и хорошо взаимодействует с сельдереем.

Мы можем установить RabbitMQ через репозитории Ubuntu, следующая команда:

sudo apt-get install rabbitmq-server

Затем включите и запустите услугу RabbitMQ:

sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

Установите Rabbitmq на Mac

После завершения установки добавьте конфигурацию celery_broker_url в конец настройки.py файл:

CELERY_BROKER_URL = 'amqp://localhost'

Затем создайте celery.py внутри вашего проекта.

celery.py

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cryptocurrencytracking.settings')

app = Celery('cryptocurrencytracking')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

Мы настраиваем модуль настройки Django по умолчанию для программы «Сельдерея» и загрузки модулей задач из всех зарегистрированных конфигураций приложения Django.

Теперь внутри твоего __init__.py импортировать сельдерей:

from .celery import app as celery_app

__all__ = ['celery_app']

Это убедится, что наше приложение для сельдерея загружается каждый раз, когда начинается Django.

Создание модели

В вашем модели.py :

from django.db import models

class Cryptocurrency(models.Model): 
    cryptocurrency = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    market_cap = models.CharField(max_length=100)
    change = models.CharField(max_length=100)

    def __str__(self):
        return self.cryptocurrency

Мы собираемся ползать на сайте с именем Coinranking И если вы посетите сайт, вы увидите там имена поля.

Ползание данных криптовалюты

Мы будем использовать BeautifulSoup для ползания значений криптовалюты в данном URL.

Beautiful Soup – это библиотека Python для извлечения данных из файлов HTML и XML. Он работает с вашим любимым анализатором, чтобы обеспечить идиоматические способы навигации, поиска и изменения дерева анализа. Обычно это экономит программисты или дни работы. Запустите следующую команду в вашем терминале для установки BeautifulSoup:

pip install beautifulsoup4

Теперь создайте новый файл с именем tasks.py Внутри нашего приложения Trackingapi Анкет

# tasks.py

from time import sleep
from celery import shared_task
from bs4 import BeautifulSoup
from urllib.request import urlopen, Request

from .models import Cryptocurrency


@shared_task
# do some heavy stuff
def crawl_currency():
    print('Crawling data and creating objects in database ..')
    req = Request('https://coinranking.com', headers={'User-Agent': 'Mozilla/5.0'})
    html = urlopen(req).read()
    bs = BeautifulSoup(html, 'html.parser')
    # Find first 5 table rows
    rows = bs.find('tbody', class_="table__body").find_all('tr', class_="table__row")[0:5]
    for row in rows:
        cryptocurrency = row.find('span', class_="profile__name").get_text().strip().replace('\n', '')
        values = row.find_all('div', class_="valuta")
        price = values[0].get_text().strip().replace('\n', '')
        market_cap = values[1].get_text().strip().replace('\n', '')
        change = row.find('div', class_="change").find('span').get_text().strip().replace('\n', '')
        print({'cryptocurrency': cryptocurrency, 'price':price, 'market_cap':market_cap, 'change':change}) 
        # Create object in database from crawled data 
        Cryptocurrency.objects.create(
            cryptocurrency = cryptocurrency,
            price = price,
            market_cap = market_cap,
            change = change
        )
        # Sleep 3 seconds to avoid any errors
        sleep(3)

@shared_task создаст независимый экземпляр задачи для каждого приложения, делая задачу повторно используемым. Это делает декоратор @shared_task полезным для библиотек и многоразовых приложений, поскольку он не будет иметь доступа к приложению пользователя.

Как вы видите, мы ползаем наши данные и чистим их от бесполезных символов, а затем создают новый объект в базе данных.

После ползания данных нам нужно довольствоваться этими объектами.

#tasks.py
@shared_task
def update_currency():
    print('Updating data ..')
    req = Request('https://coinranking.com', headers={'User-Agent': 'Mozilla/5.0'})
    html = urlopen(req).read()
    bs = BeautifulSoup(html, 'html.parser')

    rows = bs.find('tbody', class_="table__body").find_all('tr', class_="table__row")[0:5]
    for row in rows:
        cryptocurrency = row.find('span', class_="profile__name").get_text().strip().replace('\n', '')
        values = row.find_all('div', class_="valuta")
        price = values[0].get_text().strip().replace('\n', '')
        market_cap = values[1].get_text().strip().replace('\n', '')
        change = row.find('div', class_="change").find('span').get_text().strip().replace('\n', '')
        print({'cryptocurrency': cryptocurrency, 'price':price, 'market_cap':market_cap, 'change':change})
        data = {'cryptocurrency': cryptocurrency, 'price':price, 'market_cap':market_cap, 'change':change}
       Cryptocurrency.objects.filter(cryptocurrency=cryptocurrency).update(**data)

        sleep(3)   
# Run this function if database is empty
if not Cryptocurrency.objects.all():      
    crawl_currency()

while True:
    sleep(15)
    update_currency()

Как вы видите, мы ползаем данные каждые 15 секунд и обновляем наши объекты.

Если вы хотите увидеть сельдерей начала результата в терминале:

celery -A cryptocurrencytracking worker -l info

И зайдите, проверьте своего администратора, чтобы увидеть созданные объекты.

Здание API

Хорошо! Теперь наши объекты обновляются, и нам нужно создать API с помощью Framework REST.

Теперь создайте serializers.py В нашем приложении.

Сериализаторы позволяют преобразовать сложные данные, такие как запросы и экземпляры модели, в нативные данные Python, которые затем можно легко отображать в JSON, XML или другие типы контента. Сериализаторы также обеспечивают десериализацию, позволяя конвертировать данные обратно в сложные типы после сначала проверки входящих данных.

#serializers.py

from rest_framework import serializers
from .models import Cryptocurrency


class CryptocurrencySerializer(serializers.ModelSerializer):
    class Meta:
        model = Cryptocurrency
        fields = ['cryptocurrency', 'price', 'market_cap', 'change']

Класс моделейализатора предоставляет ярлык, который позволяет автоматически создавать класс сериализатора с полями, которые соответствуют полям модели.

Для получения дополнительной информации посмотрите документация

Следующим шагом является создание видов API, так что открыт views.py :

#views.py
from django.shortcuts import render
from rest_framework import generics
from .models import Cryptocurrency
from .serializers import CryptocurrencySerializer

class ListCryptocurrencyView(generics.ListAPIView):
    """
    Provides a get method handler.
    """
    queryset = Cryptocurrency.objects.all()
    serializer_class = CryptocurrencySerializer

и, наконец, настройте urls.py

#urls.py
from django.contrib import admin
from django.urls import path
from trackingAPI.views import ListCryptocurrencyView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', ListCryptocurrencyView.as_view()),
]

Когда вы запустите сервер и сельдерей (отдельные терминалы), вы увидите следующее результат:

Постарайтесь обновить страницу каждые 15 секунд или каждую минуту, и вы заметите, что значения меняются.

Вы можете клонировать или загрузить этот проект с моего GitHub:

Raszidzie/Cryptocurrency-Rest-Api-Django

API, построенный из Framework Django REST

API, построенный из Framework Django REST

Начиная

Этот урок работает на Python 3+ и Django 2+.

Установить зависимости:

python3 -m pip3 install -r requirements.txt

Запустить следующие команды:

python3 manage.py makemigrations trackingAPI
python3 manage.py migrate
python3 manage.py runserver

и начать работник сельдерея:

celery -A cryptocurrencytracking worker -l info

Миссия выполнена!

Я надеюсь, что вы кое -что узнали из этого урока и убедитесь, что вы следите за мной в социальных сетях. Также проверьте Обратный питон

Оригинал: “https://dev.to/coderasha/implement-real-time-updates-with-django-rest-framework-building-cryptocurrency-api-1kld”