Django REST 프레임워크 사용 | 암호 통화 API 구축을 통한 실시간 업데이트

개발자가 왜요?


지금은 Django와 REST 프레임워크를 사용하여 또 다른 멋진 프로젝트를 만들 때입니다.
이 문서에서는 실시간 REST API를 구축합니다.
유튜브 채널에서 영상 강좌 제공 -
계속하기 전에 REVERSE PYTHON보세요.UI UX 디자인에서 비슷한 글을 더 많이 찾을 수 있으며 마음에 들면 소셜미디어나 친구와 공유하세요.
현재 암호화폐에 관심이 있어 React에서 사용할 수 있도록 암호화폐 API를 만들기로 했습니다.우리는 장시간의 요청이 시간을 초과하지 않도록 끊임없이 데이터를 캡처하고 업데이트해야 한다.

설치 및 구성


cryptocurrency tracking이라는 새 프로젝트를 만드는 것부터 시작해서 프로젝트에 tracking API라는 프로그램을 만듭니다
django-admin startproject cryptocurrencytracking
cd cryptocurrencytracking
django-admin startapp trackingAPI
REST 프레임워크를 설치합니다.
pip install djangorestframework
설치가 완료되면 설정을 엽니다.py와 설치된 프로그램을 업데이트합니다.
INSTALLED_APPS = [
    ...

    'rest_framework',
    'trackingAPI',  
]
그래서 내가 전에 말했듯이 우리는 장기적인 요구를 처리해야 한다.미나리는 파이톤/Django 생태계에서 백엔드 작업 처리를 하는 데 가장 좋은 선택이다.간단명료한 API를 갖추고 있으며 Django와 완벽하게 통합되어 있습니다.따라서, 우리는 미나리를 사용하여 시간을 소모하는 임무를 처리하는데, 방법은 임무를 대기열에 전달하여 백엔드에서 실행하고, 시종일관 서버가 새로운 요청에 응답할 준비를 하도록 하는 것이다.
미나리를 설치하려면 다음 명령을 실행합니다.
pip install Celery
미나리는 정보를 보내고 받는 해결 방안이 필요하다.일반적으로 메시지 브로커라는 단독 서비스 형식으로 나타난다.우리는 미나리를 사용하여 RabbitMQ 메시지 전달 시스템을 사용할 것이다. 왜냐하면 미나리는 건장하고 안정적인 성능을 제공하며 미나리와의 상호작용이 양호하기 때문이다.
다음 명령을 사용하여 Ubuntu 저장소에서 RabbitMQ를 설치할 수 있습니다.
sudo apt-get install rabbitmq-server
그런 다음 RabbitMQ 서비스를 활성화하고 시작합니다.
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
Install RabbitMQ on Mac
설치가 완료되면 CELERY BROKER URL 구성을 설정 끝에 추가합니다.py 파일:
CELERY_BROKER_URL = 'amqp://localhost'
그리고 미나리를 만든다.니 프로젝트에서

미나리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 프로그램 설정에서 작업 모듈을 불러옵니다.
지금, 당신의; 초기화 중입니다.미나리 입력:
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에서 암호화폐 값을 캡처합니다.
Beauty Soup은 HTML 및 XML 파일에서 데이터를 추출하는 Python 라이브러리입니다.이것은 당신이 가장 좋아하는 해상도와 함께 사용되며, 내비게이션, 검색, 해석 트리의 관용 방법을 제공합니다.그것은 보통 프로그래머를 위해 몇 시간 또는 며칠 동안의 업무 시간을 절약할 수 있다.터미널에서 다음 명령을 실행하여 beautifulsoup을 설치합니다.
pip install beautifulsoup4
이제 tasks라는 새 파일을 만듭니다.py는 저희 프로그램 트랙킹 API에 있습니다.
# 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 퀘스트 장식기는 라이브러리와 다시 사용할 수 있는 프로그램에 매우 유용합니다. 사용자의 프로그램에 접근할 수 없기 때문입니다.
보시다시피 우리는 데이터를 캡처하고 쓸모없는 문자를 지우고 데이터베이스에 새 대상을 만들고 있습니다.
일단 데이터가 그물에 걸리면, 우리는 이 대상들을 논쟁적으로 갱신해야 한다.
#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


그래!현재 객체가 업데이트되고 있으므로 REST 프레임워크를 사용하여 API를 작성해야 합니다.
현재, 서열화 프로그램을 만듭니다.우리 프로그램에서
서열화 프로그램은 조회 집합과 모델 실례 등 복잡한 데이터를 본체 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']
ModelSerializer 클래스는 모델 필드에 대응하는 필드를 포함하는 서열화기 클래스를 자동으로 만들 수 있는 단축키를 제공합니다.
자세한 내용은 documentation
다음 단계에서는 API 뷰를 구성하므로 뷰를 엽니다.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
마지막으로 URL을 구성합니다.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초 또는 분마다 페이지를 새로 고쳐 보십시오. 값이 바뀌고 있음을 알 수 있습니다.
my GitHub에서 클론을 생성하거나 다운로드할 수 있습니다.

피로하다 / 암호 통화 REST API Django


Django REST 프레임워크를 사용한 API


암호 통화 REST API Django


Django REST 프레임워크를 사용한 API

개시하다


이 자습서는 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
View on GitHub

임무 완수!


나는 네가 이 강좌에서 뭔가를 배우고 소셜 미디어에서 나를 주목할 수 있기를 바란다.동시 검사REVERSE PYTHON

좋은 웹페이지 즐겨찾기