【发布时间】:2021-03-13 19:53:02
【问题描述】:
我正在创建一家在线书店,但遇到了一个特定条目的问题。当用户购买一本书时,他们可以对其进行评分,并且此功能适用于他们购买的第一本书。该函数使用 POST 方法,表单传入 book_id 和评级,然后我使用 SQLAlchemy 将其输入数据库。提交表单的HTML代码是这样的
<form action="/add_rating" method="POST">
<select name="rating" id="rating">
<option value="1">1</option>
<option value="3">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<button class="btn btn-success" id='adding_rating' name="book_id" type="submit" value='{{display_cart[book].book_id}}'>Rating</button>
</form>
如您所见,该方法设置为 POST。将评分输入数据库的后台函数/路径如下:
@app.route('/add_rating',methods=["POST"])
def add_rating():
if "cart" not in session:
flash("There is nothing in your cart.")
return render_template("cart.html", display_cart = {}, total = 0)
dict_of_books = {}
## getting user info
user = User.query.get(session['user_id'])
user_name = user.first_name + ' ' + user.last_name
##Get order history by user_id
order = get_order_history(session['user_id'])
dict_of_books = {}
total_price = 0
for i in range(len(order)):
total_price += order[i].total
book = get_book_by_id(order[i].book_id)
details = {'book_id': order[i].book_id, "title": book.title, "quantity": order[i].quantity, 'total': order[i].total}
dict_of_books[i] = details
book_id = request.form.get('book_id')
ratings = request.form.get('rating')
user_id = session['user_id']
add_rating = create_rating(ratings,book_id,user_id)
return render_template("rating.html", display_cart = dict_of_books, total = total_price, user_info = user_name)
现在,当我评价第一本书时,它通过 GET 将信息发送到 URL,但所有其他购买都通过 POST 发送。第一本书的输出烧瓶/sqlalchemy 是"GET /rating?rating=3&book_id=4 HTTP/1.1" 200 -,但其余书籍的输出是"POST /add_rating HTTP/1.1" 200 -。 /rating 路由基本上只是获取有关购买书籍的信息并显示到页面,我没有在路由中指定 GET/POST。如果需要路线,我会在下面发布,但我无法想象它对这个问题有用。
@app.route('/rating')
def rate_book():
if "cart" not in session:
flash("There is nothing in your cart.")
return render_template("cart.html", display_cart = {}, total = 0)
dict_of_books = {}
## getting user info
user = User.query.get(session['user_id'])
user_name = user.first_name + ' ' + user.last_name
##Get order history by user_id
order = get_order_history(session['user_id'])
dict_of_books = {}
total_price = 0
for i in range(len(order)):
total_price += order[i].total
book = get_book_by_id(order[i].book_id)
details = {'book_id': order[i].book_id, "title": book.title, "quantity": order[i].quantity, 'total': order[i].total}
dict_of_books[i] = details
return render_template("rating.html", display_cart = dict_of_books, total = total_price, user_info = user_name)
【问题讨论】:
标签: python flask sqlalchemy jinja2