본문 바로가기

회고록(TIL&WIL)

TIL 2202.05.08 클론코딩 팀프로젝트(BE) - 4 (request body, 매직 메서드, list빼기함수, 파이썬 list랜덤 추출)

ajax에서 request 요청 시 데이터를 http request body에 저장하여 보내는 방법

하나씩 일일이 보내는 방법

let id = $('#id').val()
let pwd = $('#pwd').val()
$.ajax ({
    type: 'POST',
    url: '/',
    data: {'id_give' : id, 'pwd_give': pwd}
    suceess : ....
})

dic 형태(json형태)로 보내는 방법

let data = {
    'id'  = $('#id').val(),
    'pwd' = $('#pwd').val()
}

$.ajax({
    type: 'POST',
    url: '/',
    data: JSON.stingify(data),
    contentType:  "application/json; charset=utf-8",
    success : ....
})

이후 app.py 에서 실행될 함수에서 http body 에 저장된 값을 불러오기 위해서

data = json.loads(request.data) 로 가져오고

data.get() 함수를 이용하여 데이터를 가져와서 가공하거나 dic 생성하여 값들을 한번에 저장하여 DB에 insert 하는 방식

@app.route("/api/join", methods=["POST"])
def api_join():
    data = json.loads(request.data) 
    pw = data.get('pwd',None)
    # 입력받은 패스워드 값 해싱하여 암호화
    hashed_pw = hashlib.sha256(pwd_receive.encode('utf-8')).hexdigest()

    doc = {
        'id': data.get('id',None),
        'pwd': hashed_pw
    }
    db.USER.insert_one(doc)
    return jsonify({'result': 'success', 'msg': '회원 가입 완료'})

매직 메서드

 매직 메서드는 파이썬에서 미리 만들어 놓은 메서드이고 여러가지가 있는데 그 중에서 자주 사용되는 것들이 __init__ __call__ 메서드가 대표적이다. 자바에서 생성자를 만드는 것과 같다고 생각하면된다.

 

클래스를 정의한 뒤 생성자를 호출할 때 즉, 인스턴스를 생성할 때 실행 될 코드를 추가하고 싶으면 __init__ 매직메서드를 정의하고 그 안에 코드를 작성하면 된다. __call__ 메서드는 해당하는 인스턴스가 호출될 때 실행 될 코드를 추가할 때 쓸 수 있는 메서드다.

class Animal():
    def __init__(self):
        print('인스턴스가 생성될 때 실행되는 코드')

    def __call__(self, *args, **kwargs):
        print('인스턴스가 실행될 때 실행되는 코드')


animal = Animal() #인스턴스 생성
animal() #인스턴스 호출

#인스턴스가 생성될 때 실행되는 코드
#인스턴스가 실행될 때 실행되는 코드

list 빼기 함수

a_list = [1, 2, 3, 4, 5, 6]
b_list = [2, 4, 6]
result_list = set(a_list) - set(b_list)
# >> [1, 3, 5]
result_list.remove(1)  # 1삭제
# >> [3, 5]

파이썬 리스트 랜덤 추출

1. import random

2. 1개만 추출하기

a_list = [1, 2, 3]
result = random.choice(a_list)

3. 다수 랜덤 추출 (중복 안됨) 단, 추출하려는 인자 수가 인덱스의 수 보다 높게 되면 오류가 발생됨!

a_list = [1, 2, 3]
result = random.sample(a_list, 2)
>> 리스트에서 중복 허용하지 않으면서 값 2개 추출

4. 다수 랜덤 추출 (중복 가능) 

a_list = [1, 2, 3]
result = [random.choice(a_list) for i in range(3)]
>> 리스트에서 중복 허용하면서 값 3개 추출