Flask의 URL 내부에 다양한 유형의 매개변수 사용
이 설명을 통해 Flask 앱의 URL 변환기, 즉 모든 URL에서 매개변수를 전달할 수 있는 기능에 대해 배웁니다. 또한 Flask 앱의 URL 내에서 다양한 유형의 매개변수를 사용하는 방법을 배웁니다.
Flask의 URL 내부에 다양한 유형의 매개변수 사용
이제 우리는 URL 매개변수에 대해 논의하고 이를 시연할 것입니다. 가장 기본적인 예인 기본값부터 시작하겠습니다. 이를 위해 경로를 만들고 '/default/<params>'
가 될 route()
를 전달합니다.
/default
는 URL로 연결됩니다. URL의 두 번째 부분은 매개변수로, 크거나 작음 기호 내에서 매개변수를 지정합니다.
그런 다음 DEFAULT()
라는 함수를 만들고 경로에서 정의한 함수 매개변수에 대해 동일한 이름을 전달하므로 이 경우 매개변수는 params
가 됩니다. 그런 다음 값을 반환하고 이 문자열과 값을 연결합니다.
from flask import Flask
app = Flask(__name__)
@app.route("/default/<params>")
def DEFAULT(params):
return "The parameter is: " + params
if __name__ == "__main__":
app.run(debug=True)
앱을 시작하고 브라우저를 열고 이름을 전달할 때 /default
를 입력하면 기본적으로 문자열인 매개변수 값이 표시됩니다.
사용할 수 있는 다른 데이터 유형을 보여주지만 문자열 분석을 위해 숫자와 십진수를 전달하면 문자열로 변환되기 때문에 모두 작동함을 보여줍니다. 이렇게 하면 끝점에서 전달한 값의 값을 얻을 수 있습니다.
매개변수를 전달하지 않으면 매개변수가 필요하기 때문에 찾을 수 없음 오류가 발생합니다. 이 경우를 처리하기 위해 사용자가 아무 것도 전달하지 않을 때 다른 경로를 지정하고 그냥 위에 둡니다.
이 경로 내에서 defaults
라는 키워드 인수를 전달하고 params
와 해당 값을 사용합니다.
@app.route('/default', defaults={'params': 'John'})
이제 다시 시작하고 매개변수를 전달하지 않고 URL로 이동하면 John
이라는 기본값을 얻지만 값을 전달하면 기본값 대신 이 값을 얻게 됩니다.
문자열만 가능하도록 지정하기 위해 데이터 유형을 경로에 문자열로 전달해 보겠습니다. string
을 먼저 입력하고 콜론을 입력한 다음 매개변수 이름을 입력합니다.
이 경로에 대해 String_Func()
라는 다른 함수를 정의하고 문자열을 반환하고 경로에서 정의한 매개변수를 연결합니다.
@app.route("/str-url/<string:str_params>")
def String_Func(str_params):
return "The string parameter is: " + str_params
기본적으로 매개변수 유형이 문자열이기 때문에 이것이 기본 경로가 작동하는 것과 동일하게 작동하는 것을 볼 수 있습니다.
이제 다른 데이터 유형을 처리하려고 할 때 어떤 일이 발생하는지 보겠습니다. 다음 데이터 유형은 정수가 됩니다. 다른 경로 패스를 정의해 보겠습니다. <int:int_params>
; 매개변수는 무엇이든 호출할 수 있습니다.
그런 다음 문자열을 정수로 연결할 수 없기 때문에 평소와 같이 함수를 정의하고 문자열 데이터 유형으로 변환합니다.
@app.route("/int-url/<int:int_params>")
def Int_Func(int_params):
return "The integer parameter is: " + str(int_params)
산출
우리가 사용하는 다음 데이터 유형은 <float:float_params>
로 시작하는 float입니다.
@app.route("/float-url/<float:float_params>")
def Float_Func(float_params):
return "The float parameter is: " + str(float_params)
3.5를 전달하면 페이지에 표시되지만 3만 전달하면 3이 정수이기 때문에 오류가 발생하고 Flask는 그런 식으로 허용하지 않습니다. 3.0을 원하면 3.0을 전달하거나 정수를 선택하는 다른 경로를 만들어야 합니다.
한 가지 더 필요한 것은 경로 URL이므로 이에 대한 새 경로를 정의하고 <path:our_path>
와 같은 경로 데이터 유형과 경로 이름을 전달해야 합니다.
@app.route("/path-route/<path:our_path>")
def Path_Func(our_path):
return "Our path is: " + our_path
이제 URL로 이동하여 경로를 지정하면 이를 표시하지만 일부 슬래시를 넣고 다른 하위 디렉토리를 지정하면 모든 항목을 선택하고 슬래시를 포함합니다.
마지막으로 보여드리고 싶은 것은 동일한 경로에서 둘 이상의 매개변수를 결합할 수 있다는 것입니다. <string:name>/<int:num>
과 같은 문자열 및 정수 매개변수를 결합합니다.
함수를 정의하고 함수 내부에 두 매개변수를 모두 지정하고 반환해 보겠습니다.
@app.route("/combine-route/<string:name>/<int:num>")
def Combine_Func(name, num):
return "User name is: " + name + " and user id is: " + str(num)
더 잘 이해할 수 있도록 출력을 보십시오.
Flask 앱의 전체 소스 코드:
from flask import Flask
app = Flask(__name__)
# This is the default route
@app.route("/default", defaults={"params": "John"})
@app.route("/default/<params>")
def DEFAULT(params):
return "The string parameter is: " + params
# This route holds string data type
@app.route("/str-url/<string:str_params>")
def String_Func(str_params):
return "The string parameter is: " + str_params
# This route holds int data type
@app.route("/int-url/<int:int_params>")
def Int_Func(int_params):
return "The integer parameter is: " + str(int_params)
# This route holds float data type
@app.route("/float-url/<float:float_params>")
def Float_Func(float_params):
return "The float parameter is: " + str(float_params)
# This route holds path data type
@app.route("/path-route/<path:our_path>")
def Path_Func(our_path):
return "Our path is: " + our_path
# This route combine two parameters
@app.route("/combine-route/<string:name>/<int:num>")
def Combine_Func(name, num):
return "User name is: " + name + " and user id is: " + str(num)
if __name__ == "__main__":
app.run(debug=True)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn