1

大学生が宅配食品を注文できるウェブサイトを構築しています。私たちのサイトの特別な属性の 1 つは、顧客があらかじめ設定された配達時間を選択する必要があることです。たとえば、午後 7 時、午後 10 時、深夜にドロップします。

食品に関するすべての情報 (つまり、価格、説明、名前) は静的です。ただし、その特定のドロップ時間の残りの数量は除きます。

明らかに、メニュー ページのすべての食品の HTML をハードコーディングしたくなかったので、html テンプレートに forloop を記述しました。したがって、特定の時間に残っている数量をモデルのどこかに保存する必要があります。唯一の問題は、同じ変数を使用して残りの数量をテンプレートに転送すると、多くの人が同時にメニュー ページにアクセスしている場合に間違った情報が表示されるのではないかと心配していることです。

たとえば、午後 7 時のドロップでブリトーが 10 個残っているとします。午後 10 時のドロップには 40 のブリトーがあります。誰かが他の顧客よりも高速なインターネットを使用している場合、間違った残量が表示される可能性はありますか?

皆さんは、この問題を解決するためにどのように行動しますか? 基本的に、その特定の時間の残りの数量をテンプレートに伝える方法が必要です。そして、私が今持っているソリューションを使用しても、安心できません。多くの人が同時にサイトにアクセスする場合は特に注意してください。

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-->
4

1 に答える 1

1

「より高速なインターネット」または「同じ変数を使用する」がここで何をしなければならないのか(または、特にsqliteと何をしなければならないのか)を理解していません。

この質問は、Web アプリの基本的な特性に関するものです。つまり、それらは要求/応答ベースであるということです。つまり、クライアントがリクエストを行い、サーバーがその時点でのデータのステータスを表すレスポンスで応答します。これを回避する方法はありません。初期ロード後に Ajax を使用してページを更新することで、より動的にすることができます。これは、ページにいる間に StackOverflow が更新メッセージを表示するために行うことです。しかし、それでもまだ遅れがあります。

(リアルタイムの更新を行う方法はいくつかあることに注意してください。ただし、それらは複雑であり、大学の食品注文 Web サイトとしてはほぼ確実にやり過ぎです。)

問題は、なぜこれが重要なのかということです。すべきではありません。ユーザーには、ブリトーが 1 つ残っているというページが表示されます。おそらく、「すぐに注文してください。もうすぐなくなります!」という赤い警告が表示されます。-そして注文ボタンを押します。その注文の送信時に、コードはおそらくその時点での実際のステータスをチェックします。そして、その間に別の注文を処理していて、ブリトーはすでになくなっています。だから何?ユーザーに「申し訳ありませんが、なくなってしまいました。別の方法を試してください」というメッセージを表示するだけです。Web で何かを注文した経験のある人なら誰でも、たとえばコンサート チケットなど、何が起こったのか理解できるでしょう。

于 2012-09-13T09:41:10.003 に答える