首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶应用搜索栏

烧瓶应用搜索栏
EN

Stack Overflow用户
提问于 2016-10-10 14:45:31
回答 2查看 31.7K关注 0票数 2

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

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

forms.py

代码语言:javascript
复制
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'})

views.py

代码语言:javascript
复制
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)

models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
{% 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 %}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-10 15:02:01

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

代码语言:javascript
复制
@app.route('/search', methods=['POST'])

代码语言:javascript
复制
@app.route('/search', methods=['GET', 'POST'])

更新

因此,基本上最好是改变您的search控制器。因为它没有使用search.html,而且工作错误。

代码语言:javascript
复制
@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个空格,就像它在佩普-8中说的

票数 8
EN

Stack Overflow用户

发布于 2022-10-30 12:47:24

代码语言:javascript
复制
@app.route('/products/',methods=['GET'])
def search():    
    search = request.args.get("search")
    search="%{}%".format(search)
    products = Product.query.filter(Product.name.like(search)).all()
    return render_template("abc.html",search=search, products=products)

尝试使用端口80

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39960942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档