python - 如何最小化我的 Flask webapp 中的路由数量
问题描述
我试图在我的简单服装电子商务网站中尽量减少路线和数据库表的数量。我的网站有四个产品类别:外套、衬衫、裤子、鞋。
每个类别目前在数据库中都有自己的表:
class Coat(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, nullable=False)
description = db.Column(db.Text, nullable=True)
price = db.Column(db.Float)
image1 = db.Column(db.String(100), nullable=True, default='default.jpg')
image2 = db.Column(db.String(100), nullable=True)
我想将所有产品组合到一个数据库中,其中“类别”是该产品数据库中的一列。
每个类别目前也有自己的路线和模板:
@app.route('/coats')
def coats():
products = Coat.query.all()
return render_template('coats.html', products=products, title='Coats')
{% extends "base.html" %}
{% block content %}
{% for product in products %}
<div class="product">
<a href="{{ url_for('product_coat', id=product.id) }}">
<img src="static/images/coats/{{ product.image1 }}" class="image"></a>
<p class="name">{{ product.name }}</p>
<p class="price">{{ product.price }}</p>
</div>
{% endfor %}
{% endblock %}
当点击产品链接时,会显示一个产品页面,再次为每个类别使用单独的路线:
@app.route('/product_coat/<id>', methods=['GET', 'POST'])
def product_coat(id):
product = Coat.query.get(id)
return render_template('product_coat.html', title='Product',
product=product)
目前我在“base.html”中的导航栏看起来像这样:
<nav>
<a href="{{ url_for('coats') }}"><h3>Coats</h3></a>
<a href="{{ url_for('shirts') }}"><h3>Shirts</h3></a>
<a href="{{ url_for('trousers') }}"><h3>Trousers</h3></a>
<a href="{{ url_for('shoes') }}"><h3>Shoes</h3></a>
</nav>
我意识到这是一个相当大的帖子,所以总结一下,
如果我要将所有四个数据库表合并到一个带有新“类别”列的产品表中,我将如何:
- 为这些类别创建导航栏链接?
- 创建一个处理仅显示所选类别的产品的路线?
谢谢阅读。
解决方案
您可以将查询参数传递给新路由,
@app.route('/product/', methods=['GET'])
def product_list(id):
item = request.args.get('item')
product = products.all.filter(type=item)
return render_template(f"{item}.html", title=item,product=product)
然后当您加载页面时,您可以调用url/?item=coat
它会过滤数据。
*该产品过滤线可能不正确。
推荐阅读
- eclipse - Java 应用程序中的错误(使用 Eclipse):“java.lang.ClassNotFoundException: org.hsqldb.jdbc.JDBCDriver”
- google-sheets - 如何从 Google 表格中的单元格重新开始计数?
- c++ - 如何获取结构成员的地址
- c++ - 程序编译没有错误,但如果我调用一个函数没有输出
- sql - 从该表中获取按升序排序的输出行?
- apache-spark - 一个火花流应用程序中是否可以有两个 updatestatebykey() ?
- localhost - 我在 localhost 的管理页面登录磁电机中收到 404 错误
- html - 如何根据其中的内容有效地使 Grid 占用空间?
- php - Laravel 组织辅助函数
- mysql - REGEX_REPLACE 不匹配从开头到第一次出现的 5 位数单词的所有字符