TIL[84].flask_validation

jake.log·2020년 11월 1일
0
post-custom-banner

1. validation이란?

유효성 검사란 사용자가 프론트 페이지에서 입력한 데이터 값이 서버에서 올바로 전송 받을 수 있는지 확인하는 검사이다.

2. 백엔드에서 유효성 검사를 하는 이유?

보통 웹 회원가입을 진행 하는 경우 프론트에서 유효성 검사를 1차적으로 진행하지만, 변조된 값을 서버에 요청하는 경우도 배제할 수 없기 때문에, 백엔드에서 2차적으로 validation을 진행해야한다.

3. flask에서 유효성 검사 하는 법

flask_request_validator 라는 패키지를 사용하여 파라미터 유효성 검사를 진행 할 수 있다.

프론트에서 parameter를 request.body 에 담아 요청할 때 값이 알맞은 수의 값들이 들어왔는지 유효한 값이 들어왔는지를 확인해준다.

from flask_request_validator import validate_params, Param, GET, PATH, JSON, Pattern, MaxLength

pip install flask_request_validator 를 통해 설치가 가능하다.
아래는 flask_request_validator 사용 방법이다.

4. 사용방법

There are 4 types of request parameters:

  • GET : parameter stored in flask.request.args
  • FORM : parameter stored in flask.request.form
  • JSON : parameter stored in flask.request.get_json()
  • PATH : parameter stored in flask.request.view_args. In this case is part of route

Here a list of possible rules for validation:

  • Pattern(r'^[a-z-_.]{8,10}$'): value checks at regexp. Works only for str values.
  • MaxLength(6): value checks at max length. Works for str and list values.
  • MixLength(6): value checks at min length. Works for str and list values.
  • Enum('value1', 'value2'): describes allowed values
  • AbstractRule: provide possibility to write custom rule

Supported types for values:

str, bool, int, float, dict, list

출처: https://github.com/d-ganchar/flask_request_validator

5. 유효성 검사 예시 :

  @account_app.route('/signup', methods=['POST'])
    # 파라미터 유효성 검사 
    @validate_params(
        Param('identification', JSON, str, rules=[Pattern(r'^[a-zA-Z][0-9a-zA-Z_-]{5,15}$')]), # 영문으로 시작, 숫자,영문대소문자 포함, 5글자 이상 15글자 미만
        Param('password',JSON,str, rules=[MaxLength(20)]),# 비밀번호 최대 20자
        Param('account_type_id',JSON,str,int),
        Param('contact',JSON,str,rules=[Pattern(r'\d{3}-\d{4}-\d{4}')]),# 전화번호 형식 
        Param('attribute_id',JSON,str,int),
        Param('korean_name',JSON,str,rules=[Pattern(r'[ㄱ-힣a-zA-Z0-9]')]), # 한글, 영문, 숫자만 입력
        Param('english_name',JSON,str,rules=[Pattern(r'[a-z]')]),#셀러 영문명은 소문자만 가능
        Param('cs_contact',JSON,str,rules=[Pattern(r'\d{2,3}-\d{3,4}-\d{4}')]),# 숫자와 하이픈만 입력
        Param('status_id',JSON,str,int)
        )

유효성 검사를 통과한 파라미터 값 예시

   seller_info = {
                'identification'    : args[0],
                'password'          : args[1],
                'account_type_id'   : args[2],
                'contact'           : args[3],
                'attribute_id'      : args[4],
                'korean_name'       : args[5],
                'english_name'      : args[6],
                'cs_contact'        : args[7],
                'status_id'         : args[8],
            }

참고: https://velog.io/@devmin/python-flask-request-validator

profile
꾸준히!
post-custom-banner

0개의 댓글