Post

Python HTTP 요청 쿼리 파싱하는 webargs 라이브러리 알아보기

Python HTTP 요청 쿼리 파싱하는 webargs 라이브러리 알아보기

오늘은 Python에서 HTTP 요청 쿼리 파싱하고 검증할 수 있는 webargs 라이브러리를 알아보려 합니다.

webargs 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

1
pip3 install virtualenv
1
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

1
source env/bin/activate

가상환경을 폴더에서 활성화합니다.

1
pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

1
pip install -U Flask

해당 라이브러리는 Flask 서버에서 적용할 수 있으므로 Flask 먼저 설치합니다.

1
pip install -U webargs

pip로 webargs를 설치합니다.

hello world

1
2
3
from flask import Flask
from webargs import fields
from webargs.flaskparser import use_args

flask와 webargs를 가져옵니다.

1
app = Flask(__name__)

Flask 앱을 초기화합니다.

1
hello_field = {"hello": fields.Str(required=True)}

문자열로 받을 URL 쿼리로 받을 데이터 필드를 만들 수 있습니다.

필수로 받을 값은 required로 참을 설정해야 합니다.

1
2
3
4
@app.route("/")
@use_args(hello_field)
def index(args):
    return "Hello " + args["hello"]

테코레이터로 루트 경로에 접근할 때 특정 쿼리 파라미터를 설정할 수 있습니다.

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

메인 함수를 실행하면 서버를 구동할 수 있게 합니다.

서버가 켜지면 curl 명령어로 http://localhost:5000/\?name=‘World’ 쿼리 파라미터를 넘겨줄 수 있습니다.

login example

로그인할 때에 사용자 이름과 비밀번호를 건내주면 json으로 반환하는 예제를 작성해보려 합니다.

1
2
3
from flask import request, Flask, jsonify
from webargs import fields
from webargs.flaskparser import parser

flask와 webargs를 가져옵니다.

1
app = Flask(__name__)

Flask 앱을 초기화합니다.

1
2
3
4
login_field = {
    "username": fields.Str(required=True),
    "password": fields.Str(required=True, validate=lambda p: len(p) >= 5),
}

사용자 이름과 비밀번호를 문자열로 받는 데이터 필드를 만들고, 비밀번호는 5자리 이상인지를 검증할 수 있게 작성했습니다.

1
2
3
4
@app.route("/login", methods=["POST"])
def register():
    args = parser.parse(login_field, request)
    return jsonify({"id": args["username"], "password": len(args["password"]) * "*"})

POST로 login을 수행하면서 값들을 보낼 수도 있습니다.

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

메인 함수를 실행하면 서버를 구동할 수 있게 합니다.

서버가 켜지면 curl 명령어로 “username=test_id&password=12345” 값을 -d 옵션으로 보내고, http://localhost:5000/login 을 수행할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.