sourcecode

플라스크의 '종점'은 무엇입니까?

copyscript 2023. 6. 8. 22:27
반응형

플라스크의 '종점'은 무엇입니까?

플라스크 설명서에는 다음이 나와 있습니다.

add_url_rule(*args, **kwargs)
      Connects a URL rule. Works exactly like the route() decorator.
      If a view_func is provided it will be registered with the endpoint.

     endpoint – the endpoint for the registered URL rule. Flask itself assumes the name of the view function as endpoint

"엔드포인트"가 정확히 무엇을 의미합니까?

플라스크 라우팅 작동 방식

Flask(및 기본 Werkzeug 라이브러리)의 전체 아이디어는 실행할 일부 논리(일반적으로 "보기 함수")에 URL 경로를 매핑하는 것입니다.기본 보기는 다음과 같이 정의됩니다.

@app.route('/greeting/<name>')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

참조한 함수(add_url_rule)는 데코레이터 표기법을 사용하지 않고도 동일한 목표를 달성합니다.따라서 다음은 동일합니다.

# No "route" decorator here. We will add routing using a different method below.
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

app.add_url_rule('/greeting/<name>', 'give_greeting', give_greeting)

웹 사이트가 'www.example.org '에 있으며 위의 보기를 사용한다고 가정해 보겠습니다.사용자는 브라우저에 다음 URL을 입력합니다.

http://www.example.org/greeting/Mark

플라스크의 일은 이 URL을 가져가서 사용자가 무엇을 하고 싶은지 파악하고 이를 당신의 많은 파이썬 함수 중 하나에 전달하여 처리하는 것입니다.다음과 같은 경로를 따릅니다.

/greeting/Mark

경로 목록과 일치합니다.우리의 경우, 우리는 이 경로를 정의했습니다.give_greeting기능.

그러나 이 방법은 보기를 만드는 일반적인 방법이지만 실제로는 사용자로부터 추가 정보를 추상화합니다.뒤에서 플라스크는 URL에서 이 요청을 처리해야 하는 보기 기능으로 바로 이동하지 않았습니다.그것은 단순히 ...라고 말하는 것이 아닙니다.

URL (http://www.example.org/greeting/Mark) should be handled by View Function (the function "give_greeting")

실제로 URL을 끝점에 매핑하는 다른 단계가 있습니다.

URL (http://www.example.org/greeting/Mark) should be handled by Endpoint "give_greeting".
Requests to Endpoint "give_greeting" should be handled by View Function "give_greeting"

기본적으로 "엔드포인트"는 요청을 처리해야 하는 코드의 논리 단위를 결정하는 데 사용되는 식별자입니다.일반적으로 엔드포인트는 뷰 함수의 이름일 뿐입니다.그러나 실제로는 다음 예제에서와 같이 엔드포인트를 변경할 수 있습니다.

@app.route('/greeting/<name>', endpoint='say_hello')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

플라스크가 요청을 전달할 때 논리는 다음과 같습니다.

URL (http://www.example.org/greeting/Mark) should be handled by Endpoint "say_hello".
Endpoint "say_hello" should be handled by View Function "give_greeting"

엔드포인트 사용 방법

엔드포인트는 일반적으로 "역방향 조회"에 사용됩니다.예를 들어, 플라스크 응용프로그램의 한 보기에서 다른 보기를 참조하려고 합니다(사이트의 한 영역에서 다른 영역으로 연결할 때).URL을 하드 코딩하는 대신 을 사용할 수 있습니다. 다음과 같이 가정합니다.

@app.route('/')
def index():
    print url_for('give_greeting', name='Mark') # This will print '/greeting/Mark'

@app.route('/greeting/<name>')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

리소스를 참조하는 행을 변경할 필요 없이 응용프로그램의 URL을 변경할 수 있으므로 이 방법이 유용합니다.

보기 기능의 이름을 항상 사용하는 것은 어떻습니까?

다음과 같은 질문이 나올 수 있습니다. "왜 우리는 이 추가 계층이 필요합니까?"경로를 끝점에 매핑한 다음 끝점을 보기 함수에 매핑하는 이유는 무엇입니까?그냥 그 중간 단계를 건너뛰는 게 어때요?

그 이유는 이런 방식이 더 강력하기 때문입니다.예를 들어, 플라스크 Blueprint를 사용하면 응용프로그램을 여러 부분으로 분할할 수 있습니다.모든 관리자 측 리소스가 "admin"이라는 Blueprint에 있고 모든 사용자 수준 리소스가 "user"라는 끝점에 있을 수 있습니다.

Blueprint를 사용하면 이름 공간으로 구분할 수 있습니다.예를 들면...

main.py :

from flask import Flask, Blueprint
from admin import admin
from user import user

app = Flask(__name__)
app.register_blueprint(admin, url_prefix='admin')
app.register_blueprint(user, url_prefix='user')

admin.py :

admin = Blueprint('admin', __name__)

@admin.route('/greeting')
def greeting():
    return 'Hello, administrative user!'

user.py :

user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
    return 'Hello, lowly normal user!'

두 Blueprint 모두에서 '/greeting' 경로는 "greeting"이라고 하는 함수입니다.관리자 '인사' 기능을 참고하고 싶었다면 사용자 '인사' 기능도 있어서 그냥 '인사'라고 말할 수 없었습니다.끝점에서는 Blueprint의 이름을 끝점의 일부로 지정하여 일종의 네임스페이스를 사용할 수 있습니다.그래서, 저는 다음과 같은 일을 할 수 있습니다.

print url_for('admin.greeting') # Prints '/admin/greeting'
print url_for('user.greeting') # Prints '/user/greeting'

는 Endpoint와 을 사용하여 URL 규칙을 하는 데 입니다.url_for기본값은 보기 기능의 이름입니다.

작은 예:

from flask import Flask, url_for

app = Flask(__name__)

# We can use url_for('foo_view') for reverse-lookups in templates or view functions
@app.route('/foo')
def foo_view():
    pass

# We now specify the custom endpoint named 'bufar'. url_for('bar_view') will fail!
@app.route('/bar', endpoint='bufar')
def bar_view():
    pass

with app.test_request_context('/'):
    print url_for('foo_view')
    print url_for('bufar')
    # url_for('bar_view') will raise werkzeug.routing.BuildError
    print url_for('bar_view')

클래스 이름이 같고 여러 경로로 매핑하려는 경우, 프레임워크가 두 개를 구별할 수 있도록 끝점을 지정합니다.

 class ClassName(Resource):
        def get(self):
            if request.endpoint!='hello':
                return {"data": "Hello"}
            elif:
                return {"data" : "World"}
                
    api.add_resource(ClassName, '/rout1', endpoint = "world")
    api.add_resource(ClassName, '/rout2', endpoint="hello")
@app.route('/')     #Endpoint
def a_function():   #View function
    return 'view'

Flask 내부에서는 요청 메서드가 뷰 함수에 매핑된 모든 끝점입니다.app.route decorator를 사용하면 실제로 URL 규칙을 추가하게 됩니다.

언급URL : https://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask

반응형