MK *_*ast 14 python session sqlalchemy jinja2 fastapi
我想用 FastAPI 和 Jinja 作为模板构建一个购物车,
所以我需要在会话中保存每个匿名用户的数据。
Django和flask都有内置的session功能,我们可以很容易地做到这一点。
其中一种解决方案可以使用 SQLAlchemy 会话,但 SQLAlchemy 会话不支持匿名用户,我们必须为每个会话单独创建令牌。那么我们应该使用存储的令牌来保存每个数据。
还有其他类似Django和Flask内置功能的方式吗?
MK *_*ast 12
首先,我们应该在购物车应用程序中创建购物车文件,然后使用所需的功能构建 Cart 类。
secret_key='cart'
class Cart(object):
def __init__(self, request,db):
self.session = request.session
cart = self.session.get(secret_key)
if not cart:
# save an empty cart in the session
cart = self.session[secret_key] = {}
self.cart = cart
def add(self, product, quantity=1, update_quantity=False):
product_id = str(product.id)
if product_id not in self.cart:
self.cart[product_id] = {'quantity': 0,
'price': str(product.price)
}
if update_quantity:
self.cart[product_id]['quantity'] = quantity
else:
self.cart[product_id]['quantity'] += quantity
Run Code Online (Sandbox Code Playgroud)
那么我们应该创建 cart_add API:
@app.post("/add")
def cart_add(request: Request,db: Session = Depends(get_db), id: int=Form(...), quantity: int=Form(...),
update:bool=Form(...)):
cart=Cart(request,db)
product=db.query(models.Product).filter(models.Product.id == id).first()
cart.add(product=product, quantity=quantity, update_quantity=update)
return RedirectResponse(url="/cart", status_code=status.HTTP_303_SEE_OTHER)
Run Code Online (Sandbox Code Playgroud)
就是这样。我们通过 fastapi.Request.session 内置函数在会话中保存匿名用户的购物车,它将把我们的数据保存在 cookie 中。
| 归档时间: |
|
| 查看次数: |
27960 次 |
| 最近记录: |