如何在变量更改值之前保存其值

时间:2019-01-23 14:29:35

标签: python django

我正在建立一个有关本地加密货币市场的新网站,并希望通过价格变化来控制当前“要价”的颜色。

我使用请求从市场提供的API中获取数据集。比起Django,我通过新字典将数据传递到模板中。

views.py文件;

from django.shortcuts import render
import requests

def index(request):
   url = 'https://koineks.com/ticker'
   r = requests.get(url).json()
   koineks_index = {
    'fiyatBTC' : r['BTC']['ask'],
    'fiyatETH' : r['ETH']['ask'],
    'fiyatXRP' : r['XRP']['ask'],
    'fiyatBCH' : r['BCH']['ask'],
    'fiyatUSDT' : r['USDT']['ask'],
   }
   context = {'koineks_index' : koineks_index}
   return render(request, 'calc/calc.html', context)

html文件;

<html>
<body>
        <p>
        BTC buy price: <span style="color:green">{{koineks_index.fiyatBTC}}</span> (₺)
        ETH.buy: <span style="color:green">{{koineks_index.fiyatETH}}</span> (₺)
        XRP.buy: <span style="color:green">{{koineks_index.fiyatXRP}}</span> (₺)
        USDT.buy: <span style="color:green">{{koineks_index.fiyatUSDT}}</span> (₺)
        BCH.buy: <span style="color:green">{{koineks_index.fiyatBCH}}</span> (₺)
        </p>
</body>
</html>

如何在更新价格以在If / else语句中使用价格之前保存价格,该语句会更改当前价格的文本颜色。

如果更新价格较高,我希望它为绿色,如果更新价格低于旧价格,我希望它为红色。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这是会话解决方案

from django.shortcuts import render
import requests

def index(request):
   url = 'https://koineks.com/ticker'
   r = requests.get(url).json()

   previous_prices = request.session.get('previous_prices', [0, 0, 0, 0, 0])

   koineks_index = {
    'fiyatBTC' : r['BTC']['ask'],
    'fiyatETH' : r['ETH']['ask'],
    'fiyatXRP' : r['XRP']['ask'],
    'fiyatBCH' : r['BCH']['ask'],
    'fiyatUSDT' : r['USDT']['ask'],
   }

   colors = ['green' if x else 'red' for x in map(lambda price: float(koineks_index[price[0]]) >= float(price[1]), zip(koineks_index, previous_prices))]

   request.session['previous_prices'] = [koineks_index[key] for key in koineks_index]

   context = {'koineks_index' : koineks_index, 'colors': colors}

   return render(request, 'price/calc.html', context)

模板

<html>
<body>
        <p>
        BTC buy price: <span style="color:{{colors.0}}">{{koineks_index.fiyatBTC}}</span> (₺)
        ETH.buy: <span style="color:{{colors.1}}">{{koineks_index.fiyatETH}}</span> (₺)
        XRP.buy: <span style="color:{{colors.2}}">{{koineks_index.fiyatXRP}}</span> (₺)
        USDT.buy: <span style="color:{{colors.3}}">{{koineks_index.fiyatUSDT}}</span> (₺)
        BCH.buy: <span style="color:{{colors.4}}">{{koineks_index.fiyatBCH}}</span> (₺)
        </p>
</body>
</html>

答案 1 :(得分:0)

我会做什么:

  1. 将价格与时间戳一起存储在数据库中(用于了解哪些记录是最新记录,并找出“旧”价格)

  2. 将API请求移至自定义管理命令-该命令还将负责将结果写入数据库-并设置cron作业以每X周期执行一次此命令(取决于价格的快慢)更改以及您希望达到的准确度,这将避免在每个请求上都击中API-大多数API都有速率限制,并且如果您在给定时间内发送太多请求会踢您,并且db查询通常会更快而不是HTTP请求。

  3. 您认为
  4. 从数据库中提供价格。 wrt /检测更改,您可以直接将其与数据库存储的先前批次(具有较旧时间戳记的批次)进行比较,也可以将当前批次的时间戳记存储在会话中并与这些值进行比较,这取决于对您而言最有意义的(或您可以混合使用两种方法:如果会话中没有时间戳,则使用第一种解决方案;如果会话中没有时间戳,则使用第二种解决方案。

FWIW,将价格永久保留在本地也可以显示一段时间内的价格变化...这可能比单个红色/绿色标志更有用。