Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶应用程序搜索栏_Python_Search_Flask_Full Text Search_Whoosh - Fatal编程技术网

Python 烧瓶应用程序搜索栏

Python 烧瓶应用程序搜索栏,python,search,flask,full-text-search,whoosh,Python,Search,Flask,Full Text Search,Whoosh,我试图使用Flask实现搜索栏,但是当我输入url/搜索时,我得到了一个405错误,方法不允许 下面是我的代码片段。任何帮助都将不胜感激 forms.py from wtforms import StringField from wtforms.validators import DataRequired class SearchForm(Form): search = StringField('search', [DataRequired()]) submit = SubmitFie

我试图使用Flask实现搜索栏,但是当我输入url/搜索时,我得到了一个405错误,方法不允许

下面是我的代码片段。任何帮助都将不胜感激

forms.py

from wtforms import StringField
from wtforms.validators import DataRequired

class SearchForm(Form):
  search = StringField('search', [DataRequired()])
  submit = SubmitField('Search',
                       render_kw={'class': 'btn btn-success btn-block'})
from flask_login import login_required
from forms import SearchForm
from models import User

@app.route('/')
def index():
  if current_user.is_authenticated:
    return redirect(url_for('profile'))
  return render_template('index.html')

@app.route('/profile', methods=['GET', 'POST'])
@login_required
def profile():
  # some code to display user profile page

@app.route('/search', methods=['POST'])
@login_required
def search():
  form = SearchForm()
  if not form.validate_on_submit():
    return redirect(url_for('index'))
  return redirect((url_for('search_results', query=form.search.data)))

@app.route('/search_results/<query>')
@login_required
def search_results(query):
  results = User.query.whoosh_search(query).all()
  return render_template('search_results.html', query=query, results=results)
from flask_sqlalchemy import SQLAlchemy
from flask_whooshalchemy import whoosh_index
from app import app

db = SQLAlchemy()

class User(db.model):
  __searchable__ = ['name']
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(64))

whoosh_index(app, User)
视图.py

from wtforms import StringField
from wtforms.validators import DataRequired

class SearchForm(Form):
  search = StringField('search', [DataRequired()])
  submit = SubmitField('Search',
                       render_kw={'class': 'btn btn-success btn-block'})
from flask_login import login_required
from forms import SearchForm
from models import User

@app.route('/')
def index():
  if current_user.is_authenticated:
    return redirect(url_for('profile'))
  return render_template('index.html')

@app.route('/profile', methods=['GET', 'POST'])
@login_required
def profile():
  # some code to display user profile page

@app.route('/search', methods=['POST'])
@login_required
def search():
  form = SearchForm()
  if not form.validate_on_submit():
    return redirect(url_for('index'))
  return redirect((url_for('search_results', query=form.search.data)))

@app.route('/search_results/<query>')
@login_required
def search_results(query):
  results = User.query.whoosh_search(query).all()
  return render_template('search_results.html', query=query, results=results)
from flask_sqlalchemy import SQLAlchemy
from flask_whooshalchemy import whoosh_index
from app import app

db = SQLAlchemy()

class User(db.model):
  __searchable__ = ['name']
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(64))

whoosh_index(app, User)
search.html

{% extends 'layouts/base.html' %}
{% set page_title = 'Search' %}
{% block body %}
    <div>
        {{ render_form(url_for('search'), form) }} # note: render_form is some marco from another .html file
    </div>
{% endblock %}
{%extends'布局/base.html%}
{%set page_title='搜索'%}
{%block body%}
{{render_form(url_for('search'),form)}}}注意:render_form是另一个.html文件中的一些marco
{%endblock%}

因为当您手动加载页面时,您使用的是
GET
方法,但
search
控制器只允许
POST
。你需要改变

@app.route('/search', methods=['POST'])

更新

因此,基本上最好更改
搜索
控制器。因为它没有使用search.html并且工作错误

@app.route('/search', methods=['GET', 'POST'])
@login_required
def search():
    form = SearchForm()
    if request.method == 'POST' and form.validate_on_submit():
        return redirect((url_for('search_results', query=form.search.data)))  # or what you want
    return render_template('search.html', form=form)

另外,如

中所述,缩进4个空格,因为当您手动加载页面时,您使用的是
GET
方法,但
search
控制器只允许
POST
。你需要改变

@app.route('/search', methods=['POST'])

更新

因此,基本上最好更改
搜索
控制器。因为它没有使用search.html并且工作错误

@app.route('/search', methods=['GET', 'POST'])
@login_required
def search():
    form = SearchForm()
    if request.method == 'POST' and form.validate_on_submit():
        return redirect((url_for('search_results', query=form.search.data)))  # or what you want
    return render_template('search.html', form=form)

也要缩进4个空格,正如在

谢谢中所说的,但是当我添加
'GET'
时,我现在得到了302个错误。在views.py中看到index()可能会有所帮助,因此我刚刚添加了itA 302,这不是一个错误。这是你在
search
中发送的重定向。是的,但是我收到了太多的错误重定向,搜索栏不会显示在搜索页面上谢谢@vishes\u shell!现在可以了。我对你的答案做了一些修改。谢谢你提醒我PEP-8,只是我更喜欢Google 2-space缩进:pThanks,但是当我添加
'GET'
时,我现在得到了302个错误。在views.py中看到index()可能会有所帮助,因此我刚刚添加了itA 302,这不是一个错误。这是你在
search
中发送的重定向。是的,但是我收到了太多的错误重定向,搜索栏不会显示在搜索页面上谢谢@vishes\u shell!现在可以了。我对你的答案做了一些修改。谢谢你提醒我PEP-8,只是我更喜欢Google 2-space缩进:我们可以看到macro.html文件中的内容吗?我们可以将其用于嵌套字典吗?我们可以看到macro.html文件中的内容吗?我们可以将其用于嵌套字典吗?