1

我正在建立一个网站,大学生可以在其中订购外卖食品。我们网站的一个特殊属性是客户必须选择预设的交货时间。例如,我们在晚上 7 点、晚上 10 点和午夜有一个下降。

关于食物的所有信息都是静态的(即价格、描述、名称),除了特定投放时间的剩余数量。

显然我不想为我的菜单页面上的所有食物项目硬编码 HTML,所以我在 html 模板中编写了一个 forloop。所以我需要将特定时间剩余的数量存储在我的模型中的某个地方。唯一的问题是我害怕如果我使用相同的变量将剩余数量传输到我的模板,如果很多人同时访问菜单页面,我会给出错误的信息。

例如,假设晚上 7 点下降了 10 个墨西哥卷饼。晚上 10 点下降有 40 个墨西哥卷饼。如果某人的互联网速度比其他客户更快,是否有可能显示错误的剩余数量?

你们将如何解决这个问题?我基本上需要一种方法来告诉我的模板该特定时间剩余的数量。并且使用我现在拥有的解决方案,并没有让我感到安心。特别是如果有很多人要同时访问该站点。

视图.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-->
4

1 回答 1

1

我不明白“更快的互联网”或“使用相同的变量”与这里的任何事情有什么关系(或者,实际上,它与 sqlite 有什么关系)。

这个问题是关于 Web 应用程序的一个基本属性:它们是基于请求/响应的。即客户端发出请求,服务器回复响应,表示当时数据的状态。根本无法解决这个问题:您可以通过使用 Ajax 在初始加载后更新页面来使其更具动态性,这就是 StackOverflow 在页面上显示更新消息时所做的事情。但即便如此,仍有延迟。

(我应该注意到,有一些方法可以进行实时更新,但它们很复杂,而且对于大学食品订购网站来说几乎可以肯定是矫枉过正。)

现在的问题是,为什么这很重要?它不应该。用户看到一个页面显示还剩 1 个墨西哥卷饼 - 可能带有红色警告,上面写着“赶快下单!差点没了!” - 他们按下订单按钮。提交该订单后,您的代码可能会检查当时的实际状态。而且,你猜怎么着,与此同时,你已经处理了另一个订单,而墨西哥卷饼已经消失了。所以呢?您只需向用户显示一条消息,“对不起,它已经消失了,试试别的”。任何有在网上订购东西(例如音乐会门票)经验的人都会明白发生了什么。

于 2012-09-13T09:41:10.003 回答