Saya sedang mengembangkan situs yang menggunakan Django untuk memeriksa harga mata uang kripto. Saya ingin memuat nilai yang disimpan dalam file database Django sqlite3 tanpa menyegarkan (F5) menggunakan ajax. Apa yang harus saya lakukan?

(Namun, jika pengguna me-refresh halaman secara manual, nilainya akan berubah. Ini karena nilai dimuat dari database.)

Harga mata uang kripto dan informasi lainnya secara otomatis dikumpulkan oleh perayap dan disimpan dalam waktu nyata di db.sqlite3 di proyek Django Anda.

index.html (template HTML ini statis, nilainya tidak berubah secara waktu nyata.)

{% extends 'exchange/layout.html' %}
{% load humanize %}
{% block title %}XCoin{% endblock %}
{% block body %}
<table class="table table-condensed">
 <thead>
   <tr>
      <th>#</th>
      <th>Name</th>
      <th>Price</th>
      <th>Market Cap</th>
      <th>Volume (24h)</th>
      <th>Circulating Supply</th>
   </tr>
 </thead>
 <tbody>
   {% for coin in coins %}
   <tr>
      <td>{{coin.ranking}}</td>
      <td>[ {{coin.abbreviation}} ]  {{coin.name}}</td>
      <td>{{coin.price|intcomma}}$</td>
      <td>{{coin.marketcap|intcomma}}$</td>
      <td>{{coin.volume|intcomma}}$</td>
      <td>{{coin.circulatingsupply|intcomma}} {{coin.abbreviation}}</td>
   </tr>
   {% endfor %}
 </tbody> 

</table>
{% endblock %}

urls.py

from django.contrib import admin
from django.urls import path
from . import views

app_name = 'exchange'
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='home'),
]

models.py

from django.db import models

class Coin(models.Model):
    ranking = models.IntegerField() # coin ranking
    abbreviation = models.CharField(max_length=10) # coin symbol
    name = models.CharField(max_length=20) # coin name
    price = models.FloatField() # coin price ($)
    marketcap = models.IntegerField() # coin marketcap ($)
    volume = models.IntegerField() # coin volume (24h)
    circulatingsupply = models.IntegerField() # coin supply

    def __str__(self):
        return self.name

views.py

from .models import Coin
from django.shortcuts import render
from django.shortcuts import HttpResponse

def index(request):
    coin = Coin.objects.all()
    context = {'coins':coin}
    return render(request, 'exchange/index.html', context)
0
Hacker Xeros 21 Januari 2020, 23:42

2 jawaban

Jawaban Terbaik

Solusi paling sederhana adalah membuat tampilan yang berisi data dan tampilan yang bertindak sebagai bingkai. Setel timer dalam tampilan bingkai lalu gunakan jQuery.load() (https://api.jquery.com /muat/)

Sebuah contoh akan menjadi:

var l_url = '/path/to/data_view'
var l_html = $('div#test-load');
l_html.load(l_url,function(data,status,jqXGR){
   //add some additional processing here if you want to process the returned data
   //if your data_view is designed correclty you shouldn't need it
}

Menggunakan api dan mengumpulkan data dari db (seperti yang disarankan dalam posting di atas) adalah pilihan yang lebih baik.

0
tstoev 21 Januari 2020, 21:26

Apa yang akan saya lakukan, adalah membuat api yang akan memberi saya nilai (dinamis). kemudian melalui reaksi/sudut atau apa pun yang paling cocok untuk Anda buat acara yang menunjukkan nilai di layar (juga secara dinamis), tetapi tidak merender nilai itu dari konteks yang dilihat, render dari JS yang sama.

Omong-omong, saya akan merekomendasikan menggunakan CBV daripada FBV.

1
Nouvellie 21 Januari 2020, 20:51