#2 Web 기능 구현
1. 전체 구성
2. 로그인 기능 구현
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('/user_templates/login.html')
else:
u_id = request.form['u_id']
u_pw = request.form['u_pw']
data = db_session.query(User).filter_by(u_id=u_id, u_pw=u_pw).first() # ID/PW 조회Query 실행
if data is not None: # 쿼리 데이터가 존재하면
session['u_id'] = u_id
session['logged_in'] = True
return render_template('/user_templates/main.html', logged_in=True) # 쿼리 데이터가 있으면 main으로
else:
flash('잘못 입력하셨습니다. 다시 로그인해주세요.')
return redirect('/login')
3. 로그아웃 기능 구현
@app.route('/logout', methods=['GET','POST'])
def logout():
session['logged_in'] = False
session.clear()
return render_template('/user_templates/main.html',logged_in=False)
4. 회원가입 기능 구현
@app.route('/signup', methods=['GET', 'POST'])
def sign_up():
if request.method == 'GET':
return render_template('/user_templates/signup.html')
else:
u_name = request.form.get('u_name', False)
u_phone = request.form.get('u_phone', False)
u_id = request.form.get('u_id', False)
u_pw = request.form.get('u_pw', False)
if not (u_name and u_phone and u_id and u_pw):
# 하나라도 작성하지 않으면 다시 회원가입 화면
return render_template('/user_templates/signup.html')
elif db_session.query(User).filter_by(u_id=u_id).first() is not None: # ID 조회해서 존재하는 아이디인지 확인
flash('사용할 수 없는 아이디입니다.')
return redirect('/signup')
else:
userinfo = User()
userinfo.u_name = u_name
userinfo.u_phone = u_phone
userinfo.u_id = u_id
userinfo.u_pw = u_pw
db_session.add(userinfo)
db_session.commit()
session['u_id'] = u_id
session['logged_in'] = True
# 모두 작성하면 login 화면
return render_template('/user_templates/main.html', logged_in=True)
return redirect('/')
5. 마이페이지 기능 구현
@app.route('/mypage')
def my_page():
if session.get('u_id'):
info = db_session.query(User).filter_by(u_id=session['u_id']).first()
return render_template('/user_templates/mypage.html', now_uname=info.u_name, now_uphone=info.u_phone, now_uid=info.u_id, now_upw=info.u_pw)
else:
return redirect('/login')
6. 마이페이지 정보 수정 기능 구현
@app.route('/myinfo_edit', methods=['GET','POST'])
def myinfo_edit():
edit = db_session.query(User).filter_by(u_id=session['u_id']).first()
if request.method == 'GET':
return render_template('/user_templates/myinfo_edit.html', now_uname=edit.u_name, now_uphone=edit.u_phone, now_uid=edit.u_id, now_upw=edit.u_pw)
else:
if request.form['u_name'] != edit.u_name:
edit.u_name = request.form['u_name']
if request.form['u_phone'] != edit.u_phone:
edit.u_phone = request.form['u_phone']
if request.form['u_id'] != edit.u_id:
edit.u_id = request.form['u_id']
if request.form['u_pw'] != edit.u_pw:
edit.u_pw = request.form['u_pw']
db_session.add(edit)
db_session.commit()
session['u_id'] = edit.u_id # session에 다시 u_id 값 넣어줌, u_id 값이 변경될 수 있기 때문
return redirect('/mypage')
return render_template('/user_templates/main.html')
7. 게시판 글 작성 기능 구현
def q_write():
if request.method == 'POST':
title = request.form['title']
content = request.form['content']
create_date = datetime.now()
category = request.form['category']
newQ = QuestionContent()
newQ.title = title
newQ.content = content
newQ.create_date = create_date
newQ.category = category
try: # 비밀글 설정 checkbox가 체크되는지
if request.form['is_secret']:
newQ.is_secret = True
except: newQ.is_secret = False # 체크 안 될 경우
db_session.add(newQ)
db_session.commit()
return redirect('/q&a')
else:
return render_template('/user_templates/q_write.html')
8. 게시판 작성한 글 목록 구현
@app.route('/q&a')
def question_notice():
question_list = db_session.query(QuestionContent)
return render_template('/user_templates/q&a.html', question_list=question_list)
<동작 원리>
1. q&a 함수에서 받아 저장한 table 정보를 question_list로 받아옴
2. question_list를 q&a.html로 보내줌
3. q&a.html에서 question_list를 reverse한 채로 보여줌 (가장 최근 등록된 글이 가장 위로 올 수 있게)
9. 그 외 html 수정
1. 잘못 로그인된 경우, 메세지 창 띄워주기
{% with messages = get_flashed_messages() %} {% if messages %} <script> alert("{{messages[-1]}}") </script> {% endif %} {% endwith %}
👉 위 html code를 사용할 해당 html 가장 앞에 작성
👉 flash를 통해 띄울 메세지 창을 설정
2. Post 를 받아오지 못할 경우
<form method="post">
👉 request.method == 'POST'를 받아오지 못하는 경우가 있었음. 그럴 경우 해당 html에서 <form ~ > 부분에 method='post'를 작성해주면 됨
3. 로그인 되어있는지 확인
{% if session.logged_in %} <a class="nav-link" href="/logout" style="font-size:17px;">Logout</a></li> {% else %} <a class="nav-link" href="/login" style="font-size:17px;">Login</a></li> {% endif %}
👉 로그아웃을 하거나 그 외의 작업을 할때 session이 로그인 되어있는 상태인지 확인하기 위해 작업할 해당 html에서 위 코드를 사용해줌
Author And Source
이 문제에 관하여(#2 Web 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@saiy17/2-Web-기능-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)