python - 如何在路由方法下管理多个条件
问题描述
我正在研究类似 Flask 中的高级过滤器搜索,我的输入如下:
index.html:(表格)
<form action="/search" method="post">
<div class="form-group">
<input type="text" class="form-control" id="letter" name="numbersearch" placeholder="Enter car number">
</div>
<div class="form-group">
<select class="form-control" id="Select1" name="brandsearch">
<option value="">select brand</option>
<option value="A">AUDI</option>
<option value="B">BMW</option>
</select>
</div>
<div class="form-group">
<select class="form-control" id="Select2" name="typesearch">
<option value="">select type</option>
<option value="Au">Automatic</option>
<option value="Mn">Manual</option>
</select>
</div>
<div class="form-group">
<input type="text" class="form-control" id="word" name="carsearch" placeholder="Enter automotive name">
</div>
</form>
在 view.py 中:
我一直在写一条路线:
mod_automobile = Blueprint('dictionary', __name__)
@mod_automobile .route('/')
def index():
return render_template('index.html')
@mod_automobile .route('/search', methods=['GET', 'POST'])
def search():
numbersearch=request.args.get('numbersearch') or None
brandsearch=request.args.get('brandsearch') or None
typesearch=request.args.get('typesearch') or None
carsearch=request.args.get('carsearch') or None
''' Here I am writing conditions for single/multiple combination selection's and search database'''
if numbersearch and brandsearch: '''If user selects only these two'''
'''.............'''
return render_template('sometemplate1.html')'''new template'''
elif numbersearch: '''If user selects only numbersearch'''
'''...............'''
return render_template('sometemplate2.html')'''a new template'''
elif brandsearch:
'''....'''
....'''similarly all possible conditions''''
在这里,我的条件有限,所以我可以以某种方式做到这一点,但是如果这样的条件很多,我担心如何管理它们?,
也可以在单路由方法下编写所有条件吗?
我正在使用 Mongo DB ,并且每个选定的条件都有它自己的集合或多个要搜索的集合,因此我无法在那里编写动态查询()
样品:
我正在搜索汽车名称说“保时捷”,我正在维护集合名称a_collection
(对于所有以信息开头的汽车a
),类似地b
,c
...z
为此,它达到上述条件*,
elif carsearch:
collection_name=word[0].lower()+'_collection'
cars=db[collection_name]
data=cars.find({'car':carsearch})
return render_template('carsearch.html',data=data)
在所有集合中都相同的示例文档格式(p_collection):
{
"_id": {
"$oid": "5e0c70f22b15fc7b3b218a94"
},
"car": "Porsche",
"carset_id": "76c6ebfae9",
"details": [{
"id": "4c21c72afa",
"engine_model": "flat-six"
}]
}
寻找有关如何以更有意义的格式管理此问题的建议,非常感谢任何帮助!
解决方案
您可以使用字典来管理许多可能的条件。将搜索选择参数放入一个元组中,例如:
(True, False, True, True)
然后,您有一个字典,其中填充了选择元组作为键和函数作为值执行。
例子:
user_selection_handler = {
(True, False, True, True): func
}
从此字典中获取必要的函数:
numbersearch=request.args.get('numbersearch') or None
brandsearch=request.args.get('brandsearch') or None
typesearch=request.args.get('typesearch') or None
carsearch=request.args.get('carsearch') or None
to_execute = user_selection_handler.get((numbersearch, brandsearch, typesearch, carsearch))
现在调用选择的函数:
to_execute()
完毕!
注意:这样,您可以在代码中的其他位置定义函数,也可以避免大量 if/elif 条件。
推荐阅读
- javascript - 如何仅在一个元素上激活 ng-class?
- asp.net-mvc - MVC 在控制器中一次性授权属性
- python - 如何通过 python http 请求发送一个大的 JSON 文件
- vue.js - Vuex /状态管理不适用于具有路由历史记录的Nuxt
- amazon-web-services - 在使用云形成创建堆栈时加密 EC2 的根卷
- azure - Kibana 无法连接 ElasticSearch (Azure)
- r - 将一个数据帧中的键值转换为另一个数据帧的列
- python - dateutil 解析器:如何解析用空格分隔的时间?
- python - 使用 Pandas 创建日期范围系列
- python - PYSPARK:-在数据框中爆炸数组而不丢失空值:'DataFrame'对象没有属性'_get_object_id'