如何使用带有按钮的html页面和带有python的flask在mongodb中进行搜索?

时间:2019-02-16 09:22:18

标签: python html mongodb flask

嗨,我是flask和html的新手。 我有一个数据库,其中包含具有以下结构的文档(代表道路)的集合: Document structure

我希望能够通过这样的html页面查询我的mongodb: Html page

在第一个字段中,将我的位置的位置(Lat1,Long1)输入到目的地的第二个字段插入项(Lat2,Long2)中,并通过搜索按钮(如果数据库中存在)输入以下内容;否则它会告诉我“路线不存在”。

我在其中创建按钮的简单而琐碎的index.html如下:

<body>
	<h1>Choose your route:</h1>
	<form action="/list" method="get" autocomplete="on">
	<td><input type="text" name="key" placeholder="Your Position" size="20" /></td>
	<td><input type="text" name="key" placeholder="Search Destination" size="20" /></td>
	<td><button type="submit">Search</button></td>
	<button type="Reset" value="Reset">Reset</button>

</form>
</body>

以下是带有Flash的python代码:

@app.route("/list")
def lists ():
#Display the all Task
return render_template('index.html',h=heading)

@app.route("/search", methods=['GET'])
def search():
#Searching a Task with various references
Lat1=request.values.get("Lat1")
Long1=request.values.get("Long1")
Lat2=request.values.get("Lat2")
Long=request.values.get("Long2")
refer=request.values.get("refer")
#I make the comparison to understand if the route is present in the 
database.
if(Lat1 == "Lat1" and Long1 == "Long1" and Lat2 == "Lat2" and Long2 == 
"Long2"):
    test_l = tests.find({Lat1:ObjectId(Lat1)})
    test_l = tests.find({Long1:ObjectId(Long1)})
    test_l = tests.find({Lat2:ObjectId(Lat2)})
    test_l = tests.find({Long2:ObjectId(Long2)})
else:
    print("Route not present")
return 
render_template('searchlist.html',tests=test_l,t=title,h=heading)

searchlist.html页面我不知道如何组织它。 所以我的问题是创建searchlist.html页面并更改flask中的python代码以进行搜索。 非常感谢。

2 个答案:

答案 0 :(得分:1)

很抱歉延迟 这是一种可行的方法。

<body>
<h1>Choose your route:</h1>
<form action="/list" method="POST" autocomplete="on">
<td><input type="text" name="mypos" placeholder="Your Position" size="20" /></td>
<td><input type="text" name="yourpos" placeholder="Search Destination" size="20" /></td>
<td><button type="submit">Search</button></td>
<button type="Reset" value="Reset">Reset</button>

和python

@app.route('/list', methods=['GET','POST'])
def lists():
if request.method == 'POST':
    my_position = request.form['mypos']#form input on initial position
    your_position = request.form['yourpos']#form input on proposed position
    pos = my_position.split(',')#split input into lat and long
    pos1 = your_position.split(',')
    lat1 = pos[0]#lattitude1
    long1 = pos[1]#longtitude 1
    lat2 = pos1[0]
    long2 = pos1[1]
    routes = mongo.db.routes#collection where routes are present
    check_db = routes.find()#check all documents in collection
    #return render_template('searchlist.html', pos=pos, pos1=pos1,lat1=lat1,long1=long1,lat2=lat2,long2=long2)

    for record in check_db:
        if (record['lat1'] == lat1 and record['lat2'] == lat2 and record['long1'] == long1 and record['long2'] == long2):
            return 'route found'
        else:
            return 'sorry route not found'

return render_template('form.html')

请与我联系以进一步阐明

答案 1 :(得分:0)

您可能希望将输入名称更改为唯一值,并将请求方法设置为get和post。 使用request.form ['name']接收用户输入,将其作为查询传递给数据库,并遍历所有值以查找匹配项。 我目前不在笔记本电脑上。但是我会过一会儿发布符合您要求的代码。