Flask传递查询字符串

时间:2016-07-14 08:27:10

标签: python function flask

相当新的烧瓶。不知道它是如何正常工作的。但是,我正在尝试使用dryscrape模块,我正在尝试查询网页。使用烧瓶为我自己的前端。 但是我在传递查询字符串时遇到问题。 所以我要做的就是。

@app.route("/", methods=['GET', 'POST'])
def getIndex():
    query = request.form.get('query')
    return render_template('index.html',query=query),query

使用“查询”我想继续将其用于我的其他功能

@app.route("/search_info")
def search_info():
    string = getIndex()[1] ***# Here I'm having the issue. I'm trying to get the query string here and follow the proccess.*** 
    print string
    sess = dryscrape.Session(base_url='http://www.watchfreemovies.ch/')
    sleep(4)
    sess.visit('/')
    search_index = sess.at_xpath('//*[@name="search_keywords"]')
    search_index.set(string)
    sleep(4)
    sess.render('inputz.png')
    search_index.form().submit()

评论道。我正在尝试将我的查询字符串传递给我的新函数,并使用dryscrape来完成剩下的工作。但是我做错了。它不起作用。需要帮助!

2 个答案:

答案 0 :(得分:0)

为了使查询字符串可以跨请求使用,您需要将其存储在客户端或服务器端的某个位置。 Flask-Session将在服务器端为您处理此问题,可能是最简单的解决方案。您需要在某个地方存储会话数据,并且有各种不同的选项,包括文件系统。

示例:

from flask import Flask, session
from flask.ext.session import Session

app = Flask(__name__)
# Check Configuration section for more details
SESSION_TYPE = 'filesystem'
app.config.from_object(__name__)
Session(app)

@app.route("/", methods=['GET', 'POST'])
def getIndex():
    query = request.form.get('query')
    session['query'] = query
    return render_template('index.html',query=query),query

@app.route("/search_info")
def search_info():
    query = session.get('query')
    print query
    ...

答案 1 :(得分:0)

您的HTTP请求和响应概念尚不清楚。让我假设一些用例来解释。

  1. 当您请求your.domain/search_info时,将运行search_info()功能

  2. 然后,烧瓶将在getIndex()第1行search_info()

  3. 中运行另一个函数string = getIndex()[1]
  4. 根据string = getIndex()[1],flask将向your.domain/发送GET查询,并运行getIndex()

  5. 但是,在发送GET查询时,flask会查询NOTHING。

  6. 因为request.form.get('query')什么也得不到。当您print query时,您将获得None价值。 (这可能会导致严重的问题)

  7. 要使代码具有正确的行为,您应该another fake function发送伪GET查询。

    @app.route("/", methods=['GET', 'POST'])
    def getIndex():
        query = request.form.get('query')
        return render_template('index.html',query=query)
    
    @app.route("/<fake_query>")
    def _getIndex(fake_query):
        query = fake_query
        return query
    
    @app.route("/search_info")
    def search_info():
        fake_query = 'whatever'
        string = _getIndex(fake_query)
        print string
        ...
    

    关于@Naishy的解决方案

    是或否。

    会话是解决此问题的常用方法,仅在您查询后。但我没有看到任何描述。

    由于您的描述未完成,如果会话可以解决您的问题,我将删除此答案。