为什么我的函数无法在CLI中打印任何内容?

时间:2019-05-25 15:21:33

标签: python-3.x mongodb flask pymongo

此刻,我只是尝试获取功能以打印在其中找到的内容 数据库,但是提交时我在CLI中什么都没有 通过具有此功能的URL表单来作为关键字。

import os
from flask import Flask, render_template, redirect, request, url_for
from flask_pymongo import PyMongo
from bson.objectid import ObjectId

app = Flask(__name__)

app.config["MONGO_DBNAME"] = 'recipe_site'
app.config["MONGO_URI"] = os.getenv("MONGO_URI")

mongo = PyMongo(app)

#function for search bar.

@app.route('/search', methods=['GET', 'POST'])
def search():
    mongo.db.recipes.create_index( { "name": "text" } )
    if request.method == "POST":
        q = request.form['search']
    else:
        q = ""
    query = ( { "$text": { "$search": q } } )
    results = mongo.db.recipes.find(query)

    return render_template('searchresults.html', recipes = results)

调用搜索功能并捕获关键词的表格:

<form action="{{ url_for('search', text=text) }}" method="POST">
    <div>
        <div class="input-field">
            <input id="search" name="search" type="text" class="validate">
            <span class="helper-text" data-error="Try again" data-success="Done"></span>
        </div>
    </div>
    <button type="submit">Submit </button>
</form>

错误代码

  • 调试器PIN:272-267-243 10.240.1.220--[2019年5月25日19:24:14]“ POST / search / HTTP / 1.1” 404-

就目前的代码而言,我所希望的是它应该打印数据库中所有使用该表单搜索了关键字的集合。

3 个答案:

答案 0 :(得分:0)

使用PyMongo的官方文档 这是一个经过测试的代码,可能会有所帮助。

from flask import Flask
from flask_pymongo import PyMongo
import pymongo

app = Flask(__name__)

app.config["MONGO_DBNAME"] = 'test'
app.config["MONGO_URI"] = "mongodb+srv://<username>:<password>@cluster0-vhd1j.gcp.mongodb.net/test?retryWrites=true"

mongo = PyMongo(app)

# mongo.db.collection.create_index([("name", pymongo.ASCENDING),("text", pymongo.ASCENDING)])
mongo.db.collection.insert_one({"name":"myname","text":"abcd"})
query = { "text": "abcd"}
results = mongo.db.collection.find(query)
for result in results:
  print(result)

您可以根据需要对其进行操作。 :) 希望对您有所帮助。

答案 1 :(得分:0)

您需要使用request.form ['search']阅读从发帖请求中收到的关键字 如下所示:

#function for search bar.

@app.route('/search', methods=['GET', 'POST'])
def search():
   # index for field name
   mongo.db.recipes.create_index('name')

   # index for field name and example
   #mongo.db.recipes.create_index([("name", pymongo.DESCENDING),
   #("example", pymongo.ASCENDING)])
   if request.method == "POST":
     q=request.form['search']
   else:
     q = ""
   query = ( { "$text": { "$search": q } } )
   results = mongo.db.recipes.find(query)
   print (results)
   return render_template('searchresults.html', recipes = results)

在表单中,您需要替换

<form action="{{ url_for('search', text=text) }}" method="POST">

通过

<form action="{{ url_for('search') }}" method="POST">

编辑: 我建议使用GET方法而不是POST作为搜索功能,因为当客户端刷新浏览器时,它要求他确认表单提交。所以我们需要替换:

if request.method == "POST":
     q=request.form['search']
else:
     q = ""

通过

q = request.args.get('search', "")

<form action="{{ url_for('search') }}" method="POST">

作者

<form action="{{ url_for('search') }}" method="GET">

答案 2 :(得分:0)

谢谢您的支持,但我现在已解决了该问题。在cli中什么也没打印的原因是create_index行存在问题。该集合中有一个现有索引,但我不知道该索引阻止该行运行。