인프런 커뮤니티 질문&답변

위즈윅님의 프로필 이미지
위즈윅

작성한 질문수

남박사의 파이썬으로 실전 웹사이트 만들기

회원 가입 페이지 만들기

join.html에서 회원 가입하면 not found로 넘어갑니다.

해결된 질문

작성

·

696

1

회원가입페이지 만들기 부분에서 not found 오류가 납니다.

    {% with messages = get_flashed_messages() %}
        {% if messages %}
            <script>
                alert('{{messages[-1]}}');
            </script>
        {% endif %}
    {% endwith %}

    <div class="join_container">
        <form action="form" method="POST" action="/join">
            <div class="form_group">
                <label for="name">이름</label>
                <input type="text" name="name" id="name">
            </div>
            <div class="form_group">
                <label for="email">이메일</label>
                <input type="text" name="email" id="email">
            </div>
            <div class="form_group">
                <label for="pass">비밀번호</label>
                <input type="password" name="pass" id="pass">
            </div>
            <div class="form_group">
                <label for="pass2">비밀번호 확인</label>
                <input type="password" name="pass2" id="pass2">
            </div>
            <div class="form_group">
                <input type="submit" value="가입하기">
            </div>                          
        </form>
    </div>
@app.route('/join', methods=['GET', 'POST'])
def member_join():
    if request.method == 'POST':
        name = request.form.get('name', type=str)
        email = request.form.get('email', type=str)
        pass1 = request.form.get('pass', type=str)
        pass2 = request.form.get('pass2', type=str)

        if name == '' or email == '' or pass1 == '' or pass2 == '':
            flash('입력되지 않은 값이 있습니다.')
            return render_template('join.html')

        if pass1 != pass2:
            flash('비밀번호가 일치하지 않습니다.')
            return render_template('join.html')

        members = mongo.db.members
        cnt = members.find({'email': email}).count()
        if cnt > 0:
            flash('중복된 이메일 주소입니다.')
            return render_template('join.html')

        current_utc_time = round(datetime.utcnow().timestamp() * 1000)
        post = {
            'name': name,
            'email': email,
            'pass': pass1,
            'joindate': current_utc_time,
            'logintime': '',
            'logincount': 0,
        }

        members.insert_one(post)

        return ''
    else:
        return render_template('join.html')

답변 2

1

남박사님의 프로필 이미지
남박사
지식공유자

폼의 내용을 기입하고 submit 을 했는데 의도하지 않은 페이지로 연결이 되었다 했을때 어디서 문제가 생겼는지 이해하셔야 해결 할 수 있는 문제입니다.

해당 예제에서는 특별한 기능은 없고 "가입하기" 버튼을 누르면 해당 폼의 데이터를 submit 하는 단순한 내용인데 이때 해당 데이터를 어디로 submit 하는지에 문제가 발생한 것입니다. 오류 주소를 보면 /form 이라는 주소로 전송이 되며 해당 주소를 찾을 수 없다는 오류가 발생한것인데 그러면 여기서 "어디로"에 해당하는 부분이 폼에 기재된 action 값인데 올려주시는 코드를 보면

<form action="form" method="POST" action="/join">

이렇게 action 이 중복선언 되어있습니다. 이부분에서 문제가 생겼다는것을 알 수 있습니다.

0

위즈윅님의 프로필 이미지
위즈윅
질문자

문제 해결에 대해 어려움을 느끼고 있었는데, 어디에서 문제가 생겼고 어떻게 문제를 해결하는지 많은 도움이 되었습니다. 감사합니다. 

위즈윅님의 프로필 이미지
위즈윅

작성한 질문수

질문하기