Rejoignez-Nous sur

Implémentez des mises à jour en temps réel avec Django Framework REST: création d'une API de crypto-monnaie

News

Implémentez des mises à jour en temps réel avec Django Framework REST: création d'une API de crypto-monnaie

Il est temps de créer un autre projet sympa en utilisant Django et REST Framework.

Dans cet article, nous allons créer une API REST en temps réel.

Actuellement, je suis intéressé par la crypto-monnaie, j'ai donc décidé de créer une API de crypto-monnaie pour l'utiliser dans React. Eh bien, nous devons explorer et mettre à jour les données en continu et éviter les longs délais d'attente des demandes.

Installation et configuration

Commençons par créer un nouveau projet nommé suivi des crypto-monnaies et à l'intérieur de votre projet, créez une application nommée trackingAPI

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

et installez REST Framework:

pip install djangorestframework

Une fois l'installation terminée, ouvrez votre settings.py et mettez à jour INSTALLED_APPS.

INSTALLED_APPS = (
    ...

    'rest_framework',
    'trackingAPI',  
)

Donc, j'ai déclaré avant de devoir traiter les demandes à long terme. Le céleri est le meilleur choix pour effectuer un traitement de tâche en arrière-plan dans l'écosystème Python / Django. Il a une API simple et claire, et il s'intègre parfaitement avec Django. Ainsi, nous utilisons Celery pour gérer les tâches fastidieuses en les passant dans la file d'attente pour être exécutées en arrière-plan et en gardant toujours le serveur prêt à répondre aux nouvelles demandes.

Pour installer céleri, exécutez la commande suivante:

Le céleri a besoin d'une solution pour envoyer et recevoir des messages; cela se présente généralement sous la forme d'un service distinct appelé courtier de messages. Nous allons configurer le céleri pour utiliser le système de messagerie RabbitMQ, car il fournit des performances robustes et stables et interagit bien avec le céleri.

Nous pouvons installer RabbitMQ via les référentiels d'Ubuntu en suivant la commande:

sudo apt-get install rabbitmq-server

Ensuite, activez et démarrez le service RabbitMQ:

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

Une fois l'installation terminée, ajoutez la configuration CELERY_BROKER_URL à la fin du fichier settings.py:

CELERY_BROKER_URL = 'amqp://localhost'

Ensuite, créez celery.py à l'intérieur de votre projet.

AKDc0p7ZDncP6OQbnTDbvHt6mVE2
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()

Nous définissons le module de paramètres Django par défaut pour le programme «céleri» et chargeons les modules de tâches à partir de toutes les configurations d'applications Django enregistrées.

Maintenant à l'intérieur de votre __init__.py importer le céleri:

from .celery import app as celery_app

__all__ = ('celery_app')

Cela garantira que notre application Celery sera chargée à chaque démarrage de Django.

Création d'un modèle

Dans votre models.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
Nous allons explorer le site Web nommé Coinranking et si vous visitez le site, vous pouvez y voir les noms des champs.
AKDc0p7ZDncP6OQbnTDbvHt6mVE2 08g03z08

Analyse des données de crypto-monnaie

Nous utiliserons BeautifulSoup pour explorer les valeurs de crypto-monnaie dans l'URL donnée.

Beautiful Soup est une bibliothèque Python pour extraire des données de fichiers HTML et XML. Il fonctionne avec votre analyseur préféré pour fournir des moyens idiomatiques de navigation, de recherche et de modification de l'arbre d'analyse. Il économise généralement des heures ou des jours de travail aux programmeurs. Exécutez la commande suivante dans votre terminal pour installer beautifulsoup:

pip install beautifulsoup4

Maintenant, créez un nouveau fichier nommé tasks.py à l'intérieur de notre application 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 créera l'instance indépendante de la tâche pour chaque application, rendant la tâche réutilisable. Cela rend le décorateur @shared_task utile pour les bibliothèques et les applications réutilisables, car ils n'auront pas accès à l'application de l'utilisateur.

Comme vous le voyez, nous explorons nos données et les nettoyons des caractères inutiles, puis créons un nouvel objet dans la base de données.

Une fois les données analysées, nous devons continuellement mettre à jour ces objets.

#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:      
    crawl_currency()

while True:
    sleep(15)
    update_currency()

Comme vous le voyez, nous explorons les données toutes les 15 secondes et mettons à jour nos objets.

Si vous voulez voir le résultat démarrer le céleri dans le terminal:

celery -A cryptocurrencytracking worker -l info

et allez vérifier votre administrateur pour voir les objets créés.

API de construction

Bien! Maintenant, nos objets sont mis à jour et nous devons créer une API à l'aide de REST Framework.

Maintenant, créez serializers.py à l'intérieur de notre application.

Les sérialiseurs permettent de convertir des données complexes telles que des ensembles de requêtes et des instances de modèle en types de données Python natifs qui peuvent ensuite être facilement rendus en JSON, XML ou d'autres types de contenu. Les sérialiseurs fournissent également une désérialisation, permettant aux données analysées d'être reconverties en types complexes, après avoir d'abord validé les données entrantes.

#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')

le ModelSerializer La classe fournit un raccourci qui vous permet de créer automatiquement une classe Serializer avec des champs qui correspondent aux champs du modèle.

L'étape suivante consiste à créer des vues API, alors ouvrez 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

et enfin configurer 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()),
)

lorsque vous exécutez le serveur et le céleri (terminaux séparés), vous verrez le résultat suivant:

AKDc0p7ZDncP6OQbnTDbvHt6mVE2 e1mn3znb

Essayez de rafraîchir la page toutes les 15 secondes ou toutes les minutes et vous remarquerez que les valeurs changent.

Vous pouvez cloner ou télécharger ce projet depuis mon GitHub:

Mission accomplie!

J'espère que vous avez appris quelque chose de ce tutoriel et assurez-vous que vous me suivez sur les réseaux sociaux. Vérifiez également PYTHON INVERSE pour plus.

Rester connecté!



Traduction de l’article de coderasha : Article Original

BlockBlog

Le Meilleur de l'Actualité Blockchain Francophone & Internationale | News, Guides, Avis & Tutoriels pour s'informer et démarrer facilement avec Bitcoin, les Crypto-Monnaies et le Blockchain. En Savoir Plus sur L'Équipe BlockBlog

Commenter cet Article

Commenter cet Article

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus dans News

Top
accumsan fringilla ut pulvinar elit. Sed massa venenatis,