2013-11-03 2 views
0

Я пишу очень простое флеш-приложение (сокращение URL), которое должно иметь возможность перенаправлять определенные запросы на другие произвольные домены. Однако у меня возникают проблемы с перенаправлением. Это урезанная версия, например, не работает:Перенаправление во внешний домен в Flask

from app import app, db 
from flask import abort, redirect 

@app.route('/') 
def index(): 
    return "Hello, world" 

@app.route('/favicon.ico') 
def favicon(): 
    abort(404) 

@app.route('/<slug>') 
def redirect(slug): 
    return redirect('http://google.com/') 

Возможно, наивно, я ожидал, что это перенаправление на google.com, но вместо того, чтобы перенаправлять кажется, чтобы получить «захватили» по термос, и он пытается перенаправить перенаправленный URL-адрес обратно через обработчик перенаправления (например, redirect(slug="http://google.com/")), пока он не съест все пространство стека через рекурсию и ошибки. Я не могу понять, почему это произойдет или как обойти это, но я бы очень признателен за указатель в правильном направлении.

ответ

2

Проблема заключается в этой функции:

@app.route('/<slug>') 
def redirect(slug): 
    return redirect('http://google.com/') 

Вы назвали функцию redirect(), так и в области видимости функции при вызове return redirect(...) это интерпретируется как рекурсивный вызов, потому что функция просмотра тени функции КОЛБЫ по одно и то же имя. И URL-адрес, который вы передаете, сопоставляется с аргументом slug в рекурсивном вызове.

Измените имя функции вида от redirect() на что-то еще, и ваш код будет работать нормально.

+0

Спасибо, это было невероятно глупо от меня, чтобы пропустить :). – Troy

+0

@Miguel спасибо, я тоже делаю ту же ошибку, глупо! просто потратил 1 час на это. – pregmatch

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