我正在建立一个大学生可以订购送餐的网站。关于我们网站的一个特殊属性是客户必须选择预设的交货时间。例如,我们在晚上7点,晚上10点和午夜都有下降。
有关食物的所有信息都是静态的(即价格,描述,名称),但特定停药时间的剩余数量除外。
显然我不想为我菜单页面上的所有食品硬编码HTML,所以我在html模板中写了一个forloop。所以我需要在模型中的某个地方存储特定时间的剩余数量。唯一的问题是我害怕如果我使用相同的变量将剩余数量的数量传输到我的模板,如果很多人同时访问菜单页面,我会给出错误的信息。
例如,假设7pm下降剩下10个墨西哥卷饼。下午10点的下降有40个卷饼。如果有人比其他客户有更快的互联网,是否有可能显示错误的剩余数量?
你们怎么去解决这个问题? 我基本上需要一种方法来告诉我的模板特定时间剩余的数量。并使用我现在的解决方案,不会让我感到安心。 Esp,如果有很多人同时访问该网站。
view.py
orders = OrderItem.objects.filter(date__range=[now - timedelta(hours=20), now]).filter(time=hour)
steak_and_egg = 0
queso = 0
for food in orders:
if food.product.name == "Steak and Egg Burrito":
steak_and_egg = steak_and_egg + food.quantity
elif food.product.name == "Queso Burrito":
queso = queso + food.quantity
#if burritos are sold out, then tell template not to display "buy" link
quantity_steak_and_egg = max_cotixan_steak_and_egg - steak_and_egg
quantity_queso = max_cotixan_queso - queso
#psuedocode
steakandegg.quantity_remaining = quantity_steak_and_egg
queso.quantity_remaining = quantity_queso
HTML:
{% for item in food %}
<div id="food_set">
<img src="{{item.photo_menu.url}}" alt="" id="thumbnail photo" />
<div style='overflow:hidden'>
<p id="food_name">{{item.name}}</p>
<p id="price">${{item.price}}</p>
</div>
<p id="food_restaurant">By {{item.restaurant}}</p>
<div id="food_footer">
<img src="{{MEDIA_URL}}/images/order_dots.png" alt="" id="order_dots" />
<a id ="order_button" href="{{item.slug}}"></a>
<p id="quantity_remaining">{{item.quantity_remaining}} left</p>
</div><!-- end food_footer-->
</div><!-- end food_set-->
答案 0 :(得分:1)
我不明白“更快的互联网”或“使用相同的变量”与这里的任何事情有什么关系(或者,实际上,它与sqlite有什么关系)。
这个问题是关于网络应用的基本属性:它们是基于请求/响应的。也就是说,客户端发出请求,服务器回复响应,该响应表示当时的数据的状态。没有办法解决这个问题:通过在初始加载后使用Ajax更新页面,可以使其更具动态性,这就是StackOverflow在您进入页面时显示更新消息的功能。但即便如此,仍有延迟。
(我应该注意到有一些方法可以进行实时更新,但它们很复杂,而且对于大学的食品订购网站来说几乎肯定是过度的。)
现在的问题是,为什么这很重要?它不应该。用户看到一个页面说有剩下1个墨西哥卷饼 - 也许有一个红色警告说“快速订购!几乎消失!” - 然后按下订单按钮。提交该订单后,您的代码可能会检查当时的实际状态。而且,猜猜是什么,与此同时你已经处理了另一个订单,而且卷饼已经消失了。所以呢?您只需向用户显示一条消息,“对不起,它消失了,尝试别的东西”。任何有网络订购经验的人 - 比如音乐会门票 - 都会明白发生了什么。