Flask 포스트 요청

Salman Mehmood 2024년2월15일
Flask 포스트 요청

이 설명을 통해 두 가지 기본 HTTP 메서드(getpost)에 대해 배우고 이들 간의 차이점도 배우고 Flask의 기본 형식에서 데이터를 보내는 방법에 대한 기본 예제를 살펴보겠습니다. .

Flask에서 Post 요청 사용

HTTP 메소드, getpost 요청에 대해 설명합니다. 이 두 가지를 모두 들어본 적이 있을 것입니다. get은 이 정보가 전송되는 방식에 따라 웹사이트나 클라이언트에 정보를 가져오거나 보내는 가장 일반적인 방법입니다.

Post는 이를 안전하게 수행하는 방법입니다. get은 본질적으로 정보를 얻는 안전하지 않은 방법입니다. 가장 일반적으로 사용됩니다. 앱을 실행하고 탐색하면 홈 페이지가 있는 위치에 연결되어 있는 것을 볼 수 있습니다. 문이 팝업되고 get이라고 표시되는 콘솔로 이동하면.

이것은 무엇을 의미 하는가? 기본적으로 여기에 입력할 때마다 보안되지 않습니다. 즉, 누구나 볼 수 있다는 것을 알 수 있습니다.

서버로 보내지고 get 방법을 사용하여 실제 웹 페이지를 반환하는 것은 보안 정보가 아닙니다.

from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return "Hi there, this is testing"


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

출력:

get 메소드

post 요청을 사용하면 암호화된 보안 정보를 보낼 수 있으며 어느 쪽 끝점에서도 이를 볼 수 없습니다. 실제 웹 서버에 저장되지 않으므로 이것이 getpost의 차이입니다.

우리는 아마도 그것을 최선의 방법으로 설명하지 않았을 것입니다. 그러나 이 기사를 통해 보안되지 않은 요청을 보내는 데 사용되는 get 메서드와 보안된 post 요청을 보내는 데 사용되는 get 메서드에 대해 생각하는 기본 방법과 이들 간의 주요 차이점을 이해할 것입니다. 데이터를 보내기 위해 일반적으로 양식 데이터를 보내는 데 사용됩니다.

기본 예를 살펴보겠습니다. 이 앱에서 몇 가지 다른 페이지를 설정하려고 합니다. 누군가가 버튼을 사용하여 입력하고 보낼 수 있는 대화 상자가 있는 스크립트를 작성하고 post 요청을 사용하여 이 작업을 수행합니다.

LOGIN()이라는 메소드를 사용하여 페이지를 설정하고, 상단에 데코레이터를 제공하고 "/login"을 넣습니다. 우리는 아직 보지 못한 또 다른 측면인 methods를 추가해야 합니다.

이 로그인 페이지에서 사용할 수 있으므로 기본적으로 연결하거나 몇 페이지 중 하나로 이동할 때마다 get 요청으로 이동합니다. 즉, 해당 정보를 가져와야 하지만 실행되지 않습니다. 보안을 위해 post 방법인 다른 방법이 있습니다.

데코레이터 내부에서 목록을 취하는 methods라는 인수를 사용해야 하며 목록 안에 postget을 넣습니다.

@app.route("/login", methods=["POST", "GET"])

문제는 이 login 기능에서 get 요청을 호출했는지 아니면 post 요청을 호출했는지 어떻게 결정할 수 있습니까? request 가져오기를 시작하고 if 문과 함께 사용하여 get 요청 또는 post 요청으로 이 페이지에 도달했는지 확인해야 합니다.

게시물이 있는 경우 사용자를 리디렉션하고 데이터를 표시할 수 있는 사용자 페이지로 데이터를 보냅니다. 우리는 또한 Data를 양식 사전의 키로 사용하고 name이라는 속성이 있는 login.html 파일에서 액세스합니다.

get 요청이 있는 경우 render_template() 메서드를 사용하여 로그인 페이지를 렌더링합니다.

def LOGIN():
    if request.method == "POST":
        UER_DATA = request.form["DATA"]
        return redirect(url_for("USER", usr=UER_DATA))
    else:
        return render_template("login.html")

이제 한 페이지를 더 만들어야 하며 함수 이름은 USER()가 되며 변수는 usr이 됩니다. 템플릿을 반환하는 대신 기본 HTML을 반환합니다.

@app.route("/<usr>")
def USER(usr):
    return f"<h1>{usr}</h1>"

이제 간단한 HTML 형식이 될 이 로그인 페이지를 작성해야 하므로 템플릿 폴더 안에 login.html 파일을 만듭니다. 이 파일 내에서 부트스트랩 스타터 템플릿을 사용합니다. body 태그 내에서 양식 생성을 시작합니다.

우리는 method 속성을 사용했으며 이 경우 우리의 방법은 post가 될 것입니다. 왜냐하면 우리는 정보를 얻지 않고 정보를 게시할 것이기 때문입니다. 일반적으로 여기에 get을 넣으면 귀하가 서버에서 얻은 정보로 이 양식을 채울 것입니다.

 <h1>Hello, this is login page!</h1>
    <form action="#" method="post">
        <p>Name:</p>
        <p><input type="text" name="DATA" /></p>
        <p><input type="submit" value="submit"/></p>
    </form>

다음은 위에서 설명한 app.py 파일의 전체 소스 코드입니다.

from flask import Flask, render_template, redirect, url_for, request

app = Flask(__name__)


@app.route("/")
def INDEX():
    return render_template("index.html")


@app.route("/login", methods=["POST", "GET"])
def LOGIN():
    if request.method == "POST":
        UER_DATA = request.form["DATA"]
        return redirect(url_for("USER", usr=UER_DATA))
    else:
        return render_template("login.html")


@app.route("/<usr>")
def USER(usr):
    return f"<h1>{usr}</h1>"


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

출력:

Flask 포스트 요청

콘솔 출력:

Flask 게시 요청 - 콘솔 출력

Salman Mehmood avatar Salman Mehmood avatar

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