首页 > 解决方案 > 如何在路由方法下管理多个条件

问题描述

我正在研究类似 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),类似地bc...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"
    }]
}

寻找有关如何以更有意义的格式管理此问题的建议,非常感谢任何帮助!

标签: pythonflask

解决方案


您可以使用字典来管理许多可能的条件。将搜索选择参数放入一个元组中,例如:

(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 条件。


推荐阅读