2016-07-14 2 views
1

У меня есть приложение колба, и вид, как это:Как перенаправить с параметрами, которые не показаны в URL-адресе?

@app.route("/", methods=('POST', 'GET')) 
def index(): 
... 
return redirect(url_for(
      'checkout', 
      data=json.dumps(data['data']), 
      source=source), code=307 
     ) 

@app.route("/checkout", methods=('POST', 'GET')) 
def checkout(): 
    data = json.loads(request.args['data']) 
    ... 

все работает отлично, за исключением после перенаправления У меня есть URL, как

/checkout?source=&data={ ... } 

, но я хочу, чтобы это было ясно, без Params в URL. Как я могу связаться с ним?

Я попытался изменить/удалить код param из перенаправления, не работал.

+0

Вы должны были бы определить 'checkout' и его маршрут, чтобы принять URL части для' 'source' и data', хотя полагая а Строка JSON в середине URL-адреса будет выглядеть так же, как у вас сейчас. Если «данные» поступают из тела сообщения, ваш 307 будет обрабатывать передачу этого на следующую страницу, и вам не нужно включать его в вызов «переадресации». – dirn

ответ

1

Вы получаете эти параметры, потому что вы явно указать флягу для их создания:

url_for("checkout", data=..., source=...) создает URL с точки зрения оформления заказа includeing параметры «данные» и «источник». Если вы не хотите, чтобы они оставили их.

Но я вижу, что вам нужно передать некоторые данные. В вашем случае это будет иметь смысл использовать сессию для выполнения этой задачи:

from flask import session 

# in the index view 
session["data"] = your_data 
session["source"] = your_source 
return redirect(url_for("checkout")) 

# in the checkout view 
data = session.pop("data", None) 
source = session.pop("source", None) 
if data is not None and source is not None: 
    # do your stuff 
else: 
    # checkout view was accessed before the index view 
    # probably an error -> abort(400) ? 

Две вещи, чтобы отметить:

  1. Вам не нужно JSon закодировать что-нибудь для сеанса, он может держать любой объект python
  2. Если вы хотите использовать сеанс, вам нужно указать SECRET_KEY в вашей конфигурации фляги.

Более подробную информацию о сессиях и как обеспечить секретный ключ посмотреть here

Смежные вопросы