无法使用python 27和gae

时间:2017-02-06 14:24:46

标签: python html5 google-app-engine jinja2

我正在构建购物车应用程序。我有应用程序的登录,注销和注册部分工作。当用户完成应用程序的注册部分时,他们会被重定向到他们被呈现的项目选择时,如下所示:

{% extends 'base.html' %}

{% block content %}

<h1>Gigi's Catering Menu</h1>

<form method="post">
    <label>
        <div><h2>Large Gourmet Meat & Cheese Tray</h2></div>
        <p>
             Fresh Roast Sirloin Beef, Baked Ham, and
             Roasted Turkey with Swiss and
             American Cheese<br>
             Serves 20-25 people
        </p>
        Price would be $54.99 Per Tray
        <input type="hidden" name="unq_id" value="1">
        <input type="hidden" name="product_name" value="Large Gourmet Meat & Cheese Tray">
        <input type="hidden" name="price" value="54.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>GiGi's Signature Chicken Salad</h2></div>
        <h3>Mini Croissants Tray Sold by the Dozen</h3>
        Price would be per Dozen $26.99
        <input type="hidden" name="unq_id" value="2">
        <input type="hidden" name="product_name" value="Chicken Salad Mini Croissants Tray">
        <input type="hidden" name="price" value="26.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
        <h3>Chicken Salad Sold by the Pound</h3>
        Price would be per Pound $7.99
        <input type="hidden" name="unq_id" value="3">
        <input type="hidden" name="product_name" value="Chicken Salad Sold by the Pound">
        <input type="hidden" name="price" value="7.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Relish Tray</h2></div>
        <p>
            Carrot Sticks, Celery Sticks, Olives, and
            Butterchip Pickles Served with Ranch Veggie Dip<br>
            Serves 10-15 people
        </p>
        Price would be $19.99 Per Tray
        <input type="hidden" name="unq_id" value="4">
        <input type="hidden" name="product_name" value="Relish Tray">
        <input type="hidden" name="price" value="19.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Fruit Tray</h2></div>
        <p>Strawberries, Grapes, Pineapple, Honey Dew, Cantaloupe, and
        Watermelon (when in season)<br>
        Serves 15-20 people
        </p>
        Price would be $39.99 Per Tray
        <input type="hidden" name="unq_id" value="5">
        <input type="hidden" name="product_name" value="Fruit Tray">
        <input type="hidden" name="price" value="39.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Toasted Ravioli</h2></div>
        <p>Served with Marinara Sauce<br>
        Serves 15-20 people
        </p>
        Price would be $19.99 Per Tray
        <input type="hidden" name="unq_id" value="6">
        <input type="hidden" name="product_name" value="Toasted Ravioli">
        <input type="hidden" name="price" value="19.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>3 Foot Party Sub</h2></div>
        <p>Fresh Roasted Sirloin Beef, Baked Ham, Hard
        Salami, Swiss Cheese, American Cheese, and
        Green Leaf Lettuce<br>
        Serves 10-15 people
        </p>
        Price would be $39.99 Each
        <input type="hidden" name="unq_id" value="7">
        <input type="hidden" name="product_name" value="3 Foot Party Sub">
        <input type="hidden" name="price" value="39.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Wing Tray</h2></div>
        <p>You can have your Wing Tray as a Buffalo Wing or Wild Wing. You can
        provide further information in the bottom section of this menu.<br>
        Serves 15-20 people and costs about $19.99 Per Tray
        </p>
        Wing Tray - Select This: Buffalo Wing
        <input type="hidden" name="unq_id" value="8">
        <input type="hidden" name="product_name" value="Buffalo Wing Tray">
        <input type="hidden" name="price" value="19.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
        <br><br>
        Wing Tray - Select This: Wild Wing
        <input type="hidden" name="unq_id" value="9">
        <input type="hidden" name="product_name" value="Wild Wing Tray">
        <input type="hidden" name="price" value="19.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>GiGi's Fresh Made Potato Chips</h2></div>
        <p>Served with a French Onion Dip Tray<br>
        Serves 10-15 people
        </p>
        Price would be $16.99 Per Tray
        <input type="hidden" name="unq_id" value="10">
        <input type="hidden" name="product_name" value="Potato Chips Served with French Onion Dip Tray">
        <input type="hidden" name="price" value="16.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>GiGi's Mini Sweet rolls</h2></div>
        <ul>
            <li>Ham & Swiss Cheese</li>
            <li>Fresh Roasted Sirloin Beef & Cheddar Cheese</li>
            <li>Fresh Roasted Turkey & Provel Cheese</li>
            <li>$21.99 Per Dozen
        </ul>
        Price would be Ham and Swiss
        <input type="hidden" name="unq_id" value="11">
        <input type="hidden" name="product_name" value="Sweet Rolls Ham and Swiss By The Dozen">
        <input type="hidden" name="price" value="21.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
        <br>
        Price would be Roast Beef and Cheddar Cheese
        <input type="hidden" name="unq_id" value="12">
        <input type="hidden" name="product_name" value="Sweet Rolls Roast Beef and Cheddar Cheese By The Dozen">
        <input type="hidden" name="price" value="21.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
        <br>
        Price would be Roasted Turkey and Provel Cheese
        <input type="hidden" name="unq_id" value="13">
        <input type="hidden" name="product_name" value="Sweet Rolls Roasted Turkey and Provel Cheese By The Dozen">
        <input type="hidden" name="price" value="21.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>GiGi's Brownie Tray</h2></div>
        <p>Serves 10-15 people</p>
        Price would be $19.99 Per Tray
        <input type="hidden" name="unq_id" value="14">
        <input type="hidden" name="product_name" value="GiGi's Brownie Tray">
        <input type="hidden" name="price" value="19.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Variety Wrap Platter</h2></div>
        <p>Our Variety Wrap Platters come with Chicken Caesar, Turkey Ranch, and
        Buffalo Chicken Tender w/Ranch
        </p>
        Price would be $25.99 Per Tray
        <input type="hidden" name="unq_id" value="15">
        <input type="hidden" name="product_name" value="Variety Wrap Platter">
        <input type="hidden" name="price" value="25.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>Tea Sandwiches</h2></div>
        <p>GiGi's Signature Chicken Salad or Tuna Salad on Wheatberry Bread<br>
        Serves 10-15 people<br>
        $25.99 Per Tray</p>
        Price would be Chicken Salad
        <input type="hidden" name="unq_id" value="16">
        <input type="hidden" name="product_name" value="Tea Sandwiches with Chicken Salad on Wheatberry Bread">
        <input type="hidden" name="price" value="25.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
        <br>
        Price would be Tuna Salad
        <input type="hidden" name="unq_id" value="17">
        <input type="hidden" name="product_name" value="Tea Sandwiches with Tuna Salad on Wheatberry Bread">
        <input type="hidden" name="price" value="25.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <label>
        <div><h2>GiGi's Cookie Tray</h2></div>
        <p>Our Cookie Trays come with Chocolate Chip and Sugar Cookies<br>
        Serves 10-20 people</p>
        Price would be $16.99 Per Tray
        <input type="hidden" name="unq_id" value="18">
        <input type="hidden" name="product_name" value="Gigi's Cookie Tray">
        <input type="hidden" name="price" value="16.99">
        Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
    </label>
    <br>
    <hr style="height:0px">
    <br>
    <label>
        <div><h1>GiGi's Lunch Boxes</h1></div>
        <ul style="list-style-type:disc">
        <li><h2>Choice of Meat:</h2></li>
            <ul style="list-style-type:square">
                 <li>Fresh Roasted Sirloin Beef</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="100">
                 <input type="hidden" name="product_name" value="Lunch Box: Meat - Roast Beef">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Fresh Ham</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="101">
                 <input type="hidden" name="product_name" value="Lunch Box: Meat - Ham">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Fresh Roasted Turkey</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="102">
                 <input type="hidden" name="product_name" value="Lunch Box: Meat - Roasted Turkey">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Chicken Salad</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="103">
                 <input type="hidden" name="product_name" value="Lunch Box: Chicken Salad">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Tuna Salad</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="104">
                 <input type="hidden" name="product_name" value="Lunch Box: Tuna Salad">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
            </ul>
        <li><h2>Choice of Cheese:</h2></li>
            <ul style="list-style-type:square">
                 <li>Cheddar Cheese</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="110">
                 <input type="hidden" name="product_name" value="Lunch Box: Cheese - Cheddar">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Swiss Cheese</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="111">
                 <input type="hidden" name="product_name" value="Lunch Box: Cheese - Swiss">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Provolone Cheese</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="112">
                 <input type="hidden" name="product_name" value="Lunch Box: Cheese - Provolone">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Pepper Jack Cheese</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="113">
                 <input type="hidden" name="product_name" value="Lunch Box: Cheese - Pepper Jack">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
            </ul>
        <li><h2>Choice of Bread:</h2></li>
            <ul style="list-style-type:square">
                 <li>Wheatberry</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="120">
                 <input type="hidden" name="product_name" value="Lunch Box: Bread - Wheatberry">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Hoagie</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="121">
                 <input type="hidden" name="product_name" value="Lunch Box: Bread - Hoagie">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Pretzel</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="122">
                 <input type="hidden" name="product_name" value="Lunch Box: Bread - Pretzel">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Croissant</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="123">
                 <input type="hidden" name="product_name" value="Lunch Box: Bread - Croissant">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
            </ul>
        <li><h2>Choice of a Side Item:</h2></li>
            <ul style="list-style-type:square">
                 <li>Potato Salad</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="130">
                 <input type="hidden" name="product_name" value="Lunch Box: Side - Potato Salad">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Pasta Salad</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="131">
                 <input type="hidden" name="product_name" value="Lunch Box: Side - Pasta Salad">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Potato Chips</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="132">
                 <input type="hidden" name="product_name" value="Lunch Box: Side - Potato Chips">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
            </ul>
        <li><h2>Choice of a Dessert:</h2></li>
            <ul style="list-style-type:square">
                 <li>Brownie</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="140">
                 <input type="hidden" name="product_name" value="Lunch Box: Dessert - Brownie">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
                 <li>Cookie</li>
                 <input type="checkbox" name="chkbox" value="True"> Select this Item
                 <input type="hidden" name="unq_id" value="141">
                 <input type="hidden" name="product_name" value="Lunch Box: Dessert - Cookie">
                 Qty: <input type="text" name="qty" id="q01" value="{{qty}}">
            </ul>
        </ul>
        <p>All of our Lunch Box meals come with Lettuce & Tomato.</p>
        <p>A Whole Meal In a Box! For $9.49 Each</p>
    </label>
    <br>
    <hr style="height:0px">
    <br>
        <label>
        <div>Additional Comments and/or Special Requests</div>
        <textarea name="body">{{body}}</textarea>
        </label>
    <div class="error">{{ error }}</div>


    <input type="button" value="submit">
    <input type="reset">
</form>

{% endblock %}

下面列出了处理菜单和购物车以及其他必要功能的功能,但为了简单起见,我只会在下面发布主页,菜单和购物车功能:

class MainPageHandler(Handler):
    def render_form(self):
        """ Render a page with what the customer has ordered """
        t = jinja_env.get_template("mainpage.html")
        response = t.render()
        self.response.out.write(response)

    def get(self):
        self.render_form()

class MenuHandler(Handler):
    """ This will be a function to allow the user to create their specific
    order from the selected items. """
    def render_form(self, unq_id="", product_name="", price="", qty="", body=""):
        """ Render the new post form with or without an error, based on parameters """
        t = jinja_env.get_template("menu.html")
        response = t.render(unq_id=unq_id, product_name=product_name, price=price, qty=qty, body=body)
        self.response.out.write(response)

    def get(self):
        self.render_form()

    def post(self):
        unq_id = self.request.get("unq_id")
        product_name = self.request.get("product_name")
        price = self.request.get("price")
        qty = self.request.get("qty")
        body = self.request.get("body")
        # create new temporary order object and store it in the database
        tmp_order = Tmp_Order(unq_id=unq_id,
                    product_name=product_name,
                    price=price,
                    qty=qty,
                    body=body)
        tmp_order.put()
        self.redirect('/cart')

class CartHandler(Handler):
    """ This will be a function to allow the user to see what they have ordered
    from their selections within the menu. """
    def update(self, item):
        if item.unq_id not in self.content:
            self.content.update({item.unq_id: item})
            return
        for k, v in self.content.get(item.unq_id).items():
            if k == 'unq_id':
                continue
            elif k == 'qty':
                total_qty = v.qty + item.qty
                if total_qty:
                    v.qty = total_qty
                    continue
                self.remove_item(k)
            else:
                v[k] = item[k]

    def get_total(self):
        return sum([v.price * v.qty for _, v in self.content.items()])

    def get_num_items(self):
        return sum([v.qty for _, v in self.content.items()])

    def remove_item(self, key):
        self.content.pop(key)

    def render_form(self, item_list=""):
        # render the page
        t = jinja_env.get_template("cart.html")
        response = t.render(item_list = item_list)
        self.response.out.write(response)

    def get(self):
        self.render_form()

    def post(self):
        self.redirect('/checkout', unq_id=unq_id, product_name=product_name, price=price, qty=qty, body=body)

我在运行应用程序时会追溯信息,我仍然在努力解决这个问题。该信息使用Python 2.7,Google App Engine和Jinja2环境编写。任何和所有的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,你的表单有<form method="post">。它的action=指令在哪里?应该打什么网址?而且,你有一个url处理程序吗?我想在你的代码中它应该转到MenuHandler处理程序。

也许应该是:

<form method="post" action="/menu_handler">

您的网址处理应包括:

application = webapp.WSGIApplication([('/', MainPageHandler),
                  ('/menu_handler', MenuHandler),
                  ('/cart_handler', CartHandler),
              ],
              debug=True)

接下来,检查浏览器中的控制台,查看是否有任何发布错误。将记录添加到MenuHandler以确保帖子到达那里。

这是一个好的开始。