HTML의 form 태그를 이용하여 간단한 회원가입 폼을 만들고, 사용자가 입력을 한 후 '가입하기' 버튼을 클릭하면 POST 요청을 보내고 SQLAlchemy를 사용해서 해당 내용을 DB에 저장할 수 있도록 구현했다.
index.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>회원가입</title>
</head>
<body>
<h2>회원가입</h2>
<form action="/signup" method="post">
<label for="id">아이디:</label>
<input type="text" id="id" name="id" required /><br /><br />
<label for="name">이름:</label>
<input type="text" id="name" name="name" required /><br /><br />
<label for="email">이메일:</label>
<input type="email" id="email" name="email" required /><br /><br />
<label for="password">비밀번호:</label>
<input
type="password"
id="password"
name="password"
required
/><br /><br />
<button type="submit">가입하기</button>
</form>
</body>
</html>
위의 회원가입 폼에 대한 HTML 코드이다.
app.py
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__, template_folder='templates')
# 데이터베이스 연결 URI 설정
app.config["SQLALCHEMY_DATABASE_URI"] = (
"mysql+pymysql://username:password@localhost:3306/db_name"
)
# SQLAlchemy 인스턴스 초기화
db = SQLAlchemy(app)
# 데이터베이스 모델 정의
class User(db.Model):
__tablename__ = "user"
# 각 필드 정의
id = db.Column(db.String(30), primary_key=True)
pw = db.Column(db.String(30), unique=False, nullable=False)
name = db.Column(db.String(10), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return "<User %r>" % self.id # 객체를 문자열로 표현할 때 사용할 형식
# 앱 컨텍스트 안에서 DB 테이블 생성
with app.app_context():
db.create_all()
# 라우트 정의
@app.route("/")
def home():
return render_template("index.html")
@app.route("/signup", methods=['POST'])
def signup():
if request.method == 'POST':
id = request.form['id']
pw = request.form['password']
name = request.form['name']
email = request.form['email']
existing_user = User.query.filter_by(id=id).first()
if existing_user:
return "이미 존재하는 ID입니다!", 400
# 데이터 생성 (Create)
new_user = User(id=id, pw=pw, name=name, email=email)
db.session.add(new_user)
db.session.commit()
return f"회원가입 완료"
else:
return 'post 메소드로 요청하세요'
if __name__ == '__main__':
app.run(debug=True)
위처럼 코드를 짜니 MySQL Workbench에서 DB에 잘 반영이 된 것을 확인할 수 있다.
Takeaways
- request.form : HTML form 태그로 POST 요청 시 request body 안의 key-value 데이터
- request.args: URL 쿼리 스트링 안의 key-value 데이터
POST 요청이었기 때문에 위 코드에서는 request.form['id']와 같은 방식으로 사용자의 값을 가져왔던 것이고, 만약 GET 요청이었다면 URI의 쿼리 스트링으로 사용자가 입력한 값을 확인할 수 있기 때문에 request.args.get('id') 방식으로 가져올 수 있을 것이다.
'Backend > Flask' 카테고리의 다른 글
[Flask] Flask-Caching을 사용해서 캐싱 구현하기 (0) | 2025.02.12 |
---|---|
[Flask] Flask-Login을 사용해서 사용자 인증 구현하기 (0) | 2025.02.12 |