Team1-TU-tech / login

0 stars 1 forks source link

API POST 연결에러 #18

Open hamsunwoo opened 1 month ago

hamsunwoo commented 1 month ago
스크린샷 2024-10-25 09 53 17

회원가입시 버튼을누르면 API와 연결되어 가입이 완료되어야 하는데 계속 연결이 안되는 에러가 발생하였습니다.

def load_data(firstname, lastname, id, passwd, email, gender, birthday, phonenumber):
    if firstname and lastname and id and passwd and email and gender and birthday and phonenumber:
        headers = {'accept': 'application/json'}
        params = {
            'firstname': firstname,
            'lastname': lastname,
            'id': id,
            'passwd': passwd,
            'email': email,
            'gender': gender,
            'birthday': birthday,
            'phonenumber': phonenumber
        }

        try:
            response = requests.post('http://localhost:8888/login', json=params, headers=headers, timeout=7)
            #if response.status_code == 201:
            st.session_state['page'] = 'success'  # 성공 시 페이지 상태 변경
            #else:
                #st.write("가입에 실패했습니다. 다시 시도해주세요.")
        except Exception as e:
            st.write("서버가 불안정하오니 나중에 다시 시도해주세요.")
    else:
        st.write("모든 항목을 입력해 주세요.")
hamsunwoo commented 1 month ago

POST의 경우 header 부분에 "accept"가 아니라 "Content-type"으로 넣어줘야 합니다.

def load_data(firstname, lastname, id, passwd, email, gender, birthday, phonenumber):
    if firstname and lastname and id and passwd and email and gender and birthday and phonenumber:
        headers = {'Content-Type': 'application/json'}
        params = {
            'firstname': firstname,
            'lastname': lastname,
            'id': id,
            'passwd': passwd,
            'email': email,
            'gender': gender,
            'birthday': birthday,
            'phonenumber': phonenumber
        }

        try:
            response = requests.post('http://localhost:8888/login', json=params, headers=headers, timeout=7)
            #if response.status_code == 201:
            st.session_state['page'] = 'success'  # 성공 시 페이지 상태 변경
            #else:
                #st.write("가입에 실패했습니다. 다시 시도해주세요.")
        except Exception as e:
            st.write("서버가 불안정하오니 나중에 다시 시도해주세요.")
    else:
        st.write("모든 항목을 입력해 주세요.")
hamsunwoo commented 1 month ago

또 다른 에러메세지

서버가 불안정하오니 나중에 다시 시도해주세요.

오류: Object of type date is not JSON serializable
hamsunwoo commented 1 month ago

해결 방법 이 오류는 datetime.date 타입의 객체가 JSON 형식으로 직렬화될 수 없다는 것을 의미. requests.post() 함수에서 JSON 데이터를 전송할 때, Python의 datetime.date 객체를 문자열로 변환. JSON은 날짜 타입을 지원하지 않기 때문에, 이를 문자열로 변환한 후 JSON으로 전송

# 서버에 POST 요청을 보내는 함수
def load_data(firstname, lastname, id, passwd, email, gender, birthday, phonenumber):
    if firstname and lastname and id and passwd and email and gender and birthday and phonenumber:
        headers = {'Content-Type': 'application/json'}
        params = {
            'firstname': firstname,
            'lastname': lastname,
            'id': id,
            'passwd': passwd,
            'email': email,
            'gender': gender,
            'birthday': birthday.strftime('%Y-%m-%d'),  # date 객체를 문자열로 변환
            'phonenumber': phonenumber
        }

        try:
            response = requests.post('http://127.0.0.1:8888/login', json=params, headers=headers, timeout=15)
            if response.status_code == 201:
                st.session_state['page'] = 'success'  # 성공 시 페이지 상태 변경
            else:
                st.write("가입에 실패했습니다. 다시 시도해주세요.")
        except Exception as e:
            st.write("서버가 불안정하오니 나중에 다시 시도해주세요.")
            st.write(f"오류: {str(e)}")
    else:
        st.write("모든 항목을 입력해 주세요.")