https://ilsancityboy.tistory.com/75
지난 글에서는 게시판 기능과 글쓰기에 관련된 기능들을 구현했다.
이번 글에서는 쿠키 세션을 활용해 게시판 글쓰기 기능의 작성자 부분을 회원정보의 아이디로 고정시켜 글 작성이 되게끔 만들어 볼 것이다.
1. import . . . session
먼저 기존코드에서 import 부분에 flask 모듈에서 session을 가져오게끔 추가했다.
from flask import Flask, render_template, request, redirect, url_for , flash , session
2. login 라우팅 설정 수정
그리고 기존 app.py 에서 로그인 라우팅 부분을 수정해주었다.
@app.route('login', methods=['GET','POST'])
def login():
if 'username' in session:
return redirect(url_for('board'))
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
session['username'] = user.username
return redirect(url_for('board'))
else:
return render_template('login.html', error=True)
return render_template('login.html')
if 'username' in session:
return redirect(url_for('board'))
- 로그인 페이지에 접근할 때 이미 세션에 username이 있으면 사용자가 로그인된 상태다.
- 이 경우 게시판 페이지로 리디렉션한다.
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
session['username'] = user.username
return redirect(url_for('board'))
else:
return render_template('login.html', error=True)
return render_template('login.html')
- 로그인 폼을 제출하면 사용자 이름과 비밀번호를 확인하고, 성공 시 세션에 username을 저장한다.
- 로그인이 성공하면 게시판 페이지로 리디렉션한다.
- 실패하면 로그인 페이지에 에러 메시지를 표시한다.
(여기선 login.html에 에러 메시지 표기시 로그인 정보가 일치하지 않습니다 라고 설정해 둔 상태)
3. Create 라우팅 설정 수정
@app.route('/create', methods=['GET', 'POST'])
def create():
if request.method == 'POST':
title = request.form['title']
author = session.get('username', 'guest')
content = request.form['content']
new_post = Post(title=title, author=author, content=content)
try:
db.session.add(new_post)
db.session.commit()
return redirect(url_for('board'))
except:
flash('게시글 작성 중 오류가 발생했습니다.', 'danger')
return redirect(url_for('create'))
return render_template('create.html')
기존 코드에서 수정된 부분은
author = session.get('username', 'guest')
이다.
session에서 username을 가져오고 이를 author로 설정하게 된다.
4. Create html 수정
<form action="{{ url_for('create') }}" method="post">
<label for="title">제목:</label>
<input type="text" id="title" name="title" required>
<label for="content">내용:</label>
<textarea id="content" name="content" rows="10" required></textarea>
<button class="custom_button">게시글 작성</button>
</form>
기존 코드에서 이부분에 있던 작성자 필드를 받아주는 코드만 지워주었다.
결과물
'창작물' 카테고리의 다른 글
내 실습 사이트 보안 점검(1) (0) | 2024.06.26 |
---|---|
나만의 실습 사이트 만들기 (3편) (0) | 2024.06.20 |
나만의 실습 사이트 만들기 (2.5편) (0) | 2024.06.18 |
나만의 실습 사이트 만들기 (2편) (1) | 2024.06.18 |
나만의 실습 사이트 만들기 (1편) (0) | 2024.06.17 |