我正在建立一个有关本地加密货币市场的新网站,并希望通过价格变化来控制当前“要价”的颜色。
我使用请求从市场提供的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语句中使用价格之前保存价格,该语句会更改当前价格的文本颜色。
如果更新价格较高,我希望它为绿色,如果更新价格低于旧价格,我希望它为红色。
感谢您的帮助!
答案 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)
我会做什么:
将价格与时间戳一起存储在数据库中(用于了解哪些记录是最新记录,并找出“旧”价格)
将API请求移至自定义管理命令-该命令还将负责将结果写入数据库-并设置cron作业以每X周期执行一次此命令(取决于价格的快慢)更改以及您希望达到的准确度,这将避免在每个请求上都击中API-大多数API都有速率限制,并且如果您在给定时间内发送太多请求会踢您,并且db查询通常会更快而不是HTTP请求。
从数据库中提供价格。 wrt /检测更改,您可以直接将其与数据库存储的先前批次(具有较旧时间戳记的批次)进行比较,也可以将当前批次的时间戳记存储在会话中并与这些值进行比较,这取决于对您而言最有意义的(或您可以混合使用两种方法:如果会话中没有时间戳,则使用第一种解决方案;如果会话中没有时间戳,则使用第二种解决方案。
FWIW,将价格永久保留在本地也可以显示一段时间内的价格变化...这可能比单个红色/绿色标志更有用。