플라스크의 URL로 리디렉션


226

저는 Python과 Flask를 처음 사용하고 Response.redirect있으며 C #에서 와 같은 작업을 수행하려고합니다 . 즉, 특정 URL로 리디렉션-어떻게해야합니까?

내 코드는 다음과 같습니다.

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

답변:


364

리디렉션을 반환해야합니다.

import os
from flask import Flask,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("http://www.example.com", code=302)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

플라스크 문서에 대한 설명서를 참조하십시오 . 코드의 기본값은 302이므로 code=302생략하거나 다른 리디렉션 코드 (301, 302, 303, 305 및 307 중 하나)로 대체 할 수 있습니다.


95
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('foo'))

@app.route('/foo')
def foo():
    return 'Hello Foo!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

문서예제를 살펴보십시오 .


2
함수 이름을 url_for전달한 다음 경로 재 지정을 위해 전달되는 URL을 빌드하고이를 리턴합니다.
Sunvic

40

로부터 플라스크 API 문서 (V 0.10.) :

플라스크. 리디렉션 ( location, code=302, Response=None)

호출 된 경우 클라이언트를 대상 위치로 리디렉션하는 응답 오브젝트 (WSGI 애플리케이션)를 리턴합니다. 지원되는 코드는 301, 302, 303, 305 및 307입니다. 300은 실제 리디렉션이 아니기 때문에 지원되지 않으며 304는 If-Modified-Since 헤더가 정의 된 요청의 요청에 대한 답변이므로 304가 지원되지 않습니다.

버전 0.6의 새로운 기능 : 이제 위치는 iri_to_uri () 함수를 사용하여 인코딩 된 유니 코드 문자열이 될 수 있습니다.

매개 변수 :

  • location – 응답이 리디렉션 될 위치.
  • code– 리디렉션 상태 코드. 기본값은 302입니다.
  • Response(class) – 응답을 인스턴스화 할 때 사용할 응답 클래스입니다. 기본값은 werkzeug.wrappers. 지정되지 않은 경우 응답합니다.

13

나는이 질문에 업데이트 될 가치가 있다고 생각합니다 : 다른 접근법을 살펴보고 비교하십시오.

Flask (0.12.2)에서 한 URL에서 다른 URL로 리디렉션 (3xx)하는 방법은 다음과 같습니다.

#!/usr/bin/env python

from flask import Flask, redirect

app = Flask(__name__)

@app.route("/")
def index():
    return redirect('/you_were_redirected')

@app.route("/you_were_redirected")
def redirected():
    return "You were redirected. Congrats :)!"

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000,debug=True)

다른 공식 참조는 여기를 참조 하십시오 .



5

플라스크에는 redirect모든 URL로 리디렉션 하는 기능이 포함되어 있습니다. 또한 다음과 같은 오류 코드로 요청을 일찍 중단 할 수 있습니다 abort.

from flask import abort, Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('hello'))

@app.route('/hello'):
def world:
    abort(401)

기본적으로 각 오류 코드마다 흑백 오류 페이지가 표시됩니다.

redirect방법은 기본적으로 코드 302를 사용 합니다 . http 상태 코드 목록은 여기 입니다.


1

이를 위해 단순히 redirect포함 된 기능을 사용할 수 있습니다flask

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("www.exampleURL.com", code = 302)

if __name__ == "__main__":
    app.run()

또 다른 유용한 팁 (플라스크를 처음 사용하는 경우) app.debug = True은 디버거 출력이 잘못된 점을 파악하는 데 많은 도움이되므로 플라스크 객체를 초기화 한 후 추가 하는 것입니다.


1

다음과 같이 사용할 수 있습니다 :

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
     # Redirect from here, replace your custom site url "www.google.com"
    return redirect("www.google.com", code=200)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

이 코드에 대한 참조 링크는 다음과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.