해결된 질문
작성
·
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