gpt4 book ai didi

python - 将商品添加到购物车时是否应该使用 WTForms 作为按钮?

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:55 25 4
gpt4 key购买 nike

所以我正在做一个“租赁应用程序”,我的 Flask 应用程序中有 3 个类。

以下是我实现的类:

User(作为最顶层的类)

购物车(每个用户都有一个购物车)

租赁(用户/购物车可以有“0到多个”租赁)

cart_with_items = db.Table('cart_with_items',
db.Column('cart_id', db.Integer, db.ForeignKey('cart.id'), primary_key=True),
db.Column('rental_id', db.Integer, db.ForeignKey('rental.id'), primary_key=True)
)


class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))

cart = db.relationship("Cart", backref='user', lazy=True, uselist=False)


class Cart(db.Model):
id = db.Column(db.Integer, primary_key=True)

user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

rentals = db.relationship('Rental', secondary=cart_with_items, lazy='subquery', backref=backref('carts', lazy=True))

@app.route("/dashboard/checkout", methods=['POST'])
def add_item(self,item):
try:
this.rentals.append(Rental(1,"2",3.5,"url"))
return '<h1> it worked</h1>'
except:
return '<h1>Didnt work</h1>'



class Rental(db.Model):
id = db.Column(db.Integer, primary_key=True)
item_name = db.Column(db.String(15), unique=True);
item_cost = db.Column(db.Float)
item_image_url = db.Column(db.String(100))
#foreign key is a primary key that refers to a key in another table


def __init__(self,item_id,item_name, item_cost, item_image_url):
self.id = item_id
self.item_name = item_name
self.item_cost = item_cost
self.item_image_url = item_image_url

def get_item_id():
return self.id

def getItemname():
return self.item_name

def getCost():
return self.item_cost

然后我在“仪表板”页面上渲染_模板,并传入用户对象,然后该对象将创建一个与其组合的购物车。

我还将一些租赁对象传递到模板中,其中将列出它们以显示您可以租赁的内容,以及它们旁边的按钮。

这个按钮是我遇到问题的地方。我尝试在 Cart 类中实现一个函数来将项目添加到租赁中,但事实证明这很困难......

我不知道我是否能够在 jinja2 模板中执行 onClick() 但我想知道我是否应该只使用 WTForms 并尝试将他们想要的项目发布回函数呈现给定模板?

我的问题主要是问 WTForms 是否是最受接受的,WTForms 应该是我问题的解决方案吗?我的实现是否太困惑了?

最佳答案

要回答您的主要问题,是否应该使用 WTForms 取决于您是否需要收集任何用户输入,而不仅仅是单击按钮。 WTForms 真正擅长从请求正文中提取表单数据,然后将数据强制转换为您需要的类型并在其上运行验证器。如果您没有任何表单字段,它可能不会有太大帮助。

关于 Jinja2 模板中 Javascript 的问题 - 是的,您可以输入 <script> s 在模板中。您可以在模板中放置任何文本,它将完全按原样呈现(当然,除非它是 Jinja 语句)。因此,您可以将 JS 直接嵌入到模板中,或者将其放入 .js 文件中并将其与 <script src=> 链接。标签。

最后,除非您遗漏了某些内容,否则您的 /dashboard/checkout路由处理程序将在运行时崩溃,并显示一条有关它如何期望 2 个参数的消息,但没有提供任何参数。原因是1,自由函数(不在类中的函数)没有self参数,2,你的路由中没有变量。为了得到我认为你想要的东西,你需要这样做:

@app.route("/dashboard/checkout/<item>", methods=['POST'])
def add_item(item):

路由处理程序将传递 <item> 中的任何内容。作为item参数add_item

假设您将 Rentals 作为租金进行迭代,在模板中生成此 URL 的一种非常方便的方法是: {{ url_for(add_item, item=rental.id) }}

然后,您可以使用此 URL 进行 JavaScript AJAX 调用(如果您不想离开该页面),也可以将其用作 action在带有提交按钮的表单中:

<form method="POST" action="{{ url_for(add_item, item=rental.id) }}">
<input type="Submit" value="Rent This!">
</form>

这将允许您向端点发送 POST(这也将导航离开页面)。但由于此表单没有字段,也没有数据,因此您实际上不需要 WTForms 来处理它。

关于python - 将商品添加到购物车时是否应该使用 WTForms 作为按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com