flask mariadb 활용 홈페이지 만들기(2)

flask 와 mariadb 활용하여 홈페이지 만들기 프로젝트 두 번째 포스팅을 시작합니다! Let’s Gil-IT입니다.

flask 와 Mairadb 활용 1번 포스팅을 잘 따라오셨다면, DB와 간단한 웹페이지를 만들 수 있었습니다.

이번 포스팅에서는 간단하게 회원가입 홈페이지, 회원가입 기능 구현, DB 연결까지 해보도록 하겠습니다.

천천히 잘 따라오시면 쉽게 하실 수 있으니 포기하시지 마시고 따라오세요!

1. 회원가입 홈페이지 만들기

지금부터 회원가입 홈페이지를 만들겠습니다. css 작업과 같이 이쁘게 꾸미는 작업 등 복잡한 기능은 실제 프로젝트 때 다른 자료들을 참고하시면서 만드시면 되니 핵심적이고 기능적인 부분을 중점으로 알려드리겠습니다.

<!DOCTYPE html>
<html>
    <head>
        <title>회원가입 홈페이지</title>
    </head>
    <body>
        <form method="POST">
            <div class = 'register_group'>
                <input type="text" class="register_id" placeholder="아이디" name="userid" />
                <input type="text" class="register_name" placeholder="이름" name="username" />
                <input type="text" class="register_pwd"  placeholder="비밀번호" name="password" />
                <button type ='submit'>제출</button>
            </div>
        </form>

    
    </body>
</html>

먼저 위와 같이 html을 만들어서 실행시키면 아래 그림과 같이 나옵니다.

이쁘게 꾸미는거는 패스하고 기능적으로 말씀드리겠습니다. 각 네모 박스는 id, name, password 데이터를 저장시키고 제출 버튼을 누르면 DB로 전송되도록 하고자 합니다.

flask html_회원가입
html_회원가입

이렇게 만든 후, 제출 버튼을 눌러도 아무런 응답이 없고 제대로 되었는지 확인이 어렵죠? 일단 먼저 DB 연결은 먼저 시킬 수 있도록 html과 flask 모듈을 활용하여 코드를 수정하도록 하겠습니다. 먼저 register 기능을 간단하게 구현하겠습니다.

Tip: wtforms 모듈은 브라우저와 브라우저로 부터 전송되는 Form 데이터를 작업해야하는 과정에서 쉽게 관리해줄 수 있도록 도움을 주는 패키지입니다. 관련해서 참고자료는 여기를 눌러주세요! 한 번 읽고 작업을 하시는게 수월합니다.

#flask register
#making_form.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, EqualTo

class registerform(FlaskForm):
    userid = StringField('userid', validators=[DataRequired()]) # Datarequired -> 빈칸 X
    username = StringField('username', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired(), EqualTo('re_password')]) 
    re_password = PasswordField('re_password', validators=[DataRequired()])

2. 데이터베이스와 관련된 내용을 설명드리겠습니다. 조금 복잡하지만 잘 따라오시면 무리없이 만들 수 있습니다. 먼저 DB_table이라는 폴더를 생성한 후 cd DB_table 명령어를 통해서 폴더로 작업공간을 이동합니다.

이후, 아래의 코드를 작성한 후 터미널에서 파이썬을 실행시킵니다. 실행 후 DB를 연결하여 확인해보시면 register_user라는 이름의 테이블과 데이터 속성이 만들어져있습니다.

models.py 파일은 DB_table 폴더와 원래 작업 폴더에 동시에 있어야 합니다. 물론 하나로 합쳐서 작업을 해도 되지만 저는 이게 편하고 확인하기 좋아서 이렇게 진행합니다.

#models.py
from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mariadb+mariadbconnector://id:pwd@ip:port/db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app) #for using database


class Register_user(db.Model): 
    __tablename__ = 'register_user' # name of table 
    id = db.Column(db.Integer, primary_key = True)   #id to primary_key
    password = db.Column(db.String(64))      
    userid = db.Column(db.String(32))       
    username = db.Column(db.String(8))

    def __repr__(self):
        return f'<Register_user {self.username}>'
cmd_python
cmd_python
flask cmd_db
cmd_db

자, 지금까지 registerform 과 DB 관련을 잘 진행하셨나요? 다음으로는 이 둘을 연결하는 작업을 진행하겠습니다.

먼저, 아래와 같이 app.py 코드를 수정합시다. 이제 우리의 app.py에는 register 함수를 통해서 브라우저에서 데이터가 들어오면 우리가 만든 DB에 저장하는 액션까지 수행할 수 있습니다.

#app.py
from flask import Flask, render_template, request, url_for, redirect

from flask_sqlalchemy import SQLAlchemy
from models.py import db
from models.py import Register_user
from making_form import registerform


db = SQLAlchemy()
app = Flask(__name__)
app.config.update(SECRET_KEY="awfwefasdfsadf")
app.config['SQLALCHEMY_DATABASE_URI'] = "mariadb+mariadbconnector://id:pwd@ip:port/db"
db.init_app(app)



######## register##########
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = registerform()
    if form.validate_on_submit():
        register = Register_user()
        register.userid = form.data.get('userid')
        register.username = form.data.get('username')
        register.password = form.data.get('password')
        
        db.session.add(register)  # db저장
        db.session.commit()  # 커밋을 통한 수행

        return redirect('/')

    return render_template('register.html', form=form)
######## register##########


######## main##########
@app.route('/')
def hompage():
    return render_template('main.html')
######## main##########


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
3. html 작성 후 연결 및 테스트 진행

지금부터는 회원가입 홈페이지를 만들어 보겠습니다. 처음에 만든 것과는 조금 다를 겁니다. 왜냐하면 앞서 설명드린 wtform 기능을 활용하여 조금 더 편리하게 작업을 하기 때문입니다.

보시는바와 같이 wtfform 기능을 통하여 작성하였습니다. 아래 코드는 flask를 구동 시 작동되며 html만 확인할 때는 제대로 기능이 작동하지 않으니 주의하시길 바랍니다.

#register.html
<!DOCTYPE html>
<html>

<head>
    <title>회원가입 홈페이지</title>
</head>

<body>
    <div class='register'>
        <div class='row mt-10'>
            <h1>회원가입 페이지</h1>
        </div>
    </div>
    <div class='row mt-10'>
        <form method="POST">
            {{form.csrf_token}}
            <div class='register_group'>
                {{form.userid.label('userid')}}
                {{form.userid(placeholder='userid')}}
            </div>

            <div class='register_group'>
                {{form.username.label('username')}}
                {{form.username(placeholder='username')}}
            </div>

            <div class='register_group'>
                {{form.password.label('password')}}
                {{form.password(placeholder ='password')}}
            </div>

            <div class='register_group'>
                {{form.re_password.label(re_password)}}
                {{form.re_password(placeholder = 're_password')}}
            </div>
            <button type="submit" class="btn btn-primary">제출</button>
        </form>
    </div>
</body>
</html>

자 여기까지 따라오셨으면 한번 python run을 해보시길 바랍니다! 제대로 따라오셨다면 아래와 같이 나올겁니다.

현재 flask로 서버는 올렸으니 기본페이지가 보이실겁니다 거기서 127.0.0.1:5000/register로 이동하시면!!

flask register_page
register_page

회원가입을 하시면 DB에는 자신이 적은 데이터들이 적재되어 있을 겁니다.

저는 test1234, test1234, 1234, 1234로 데이터를 보낸 후 DB를 확인해보도록 하겠습니다.

회원가입과 동시에 다시 기본페이지로 돌아갑니다. 만약 기본페이지로 돌아가지 않는다면 오류입니다.

flask register_test
register_test
maria DB_register
DB_register

데이터가 잘 들어 왔습니다!! DB, HTML, Flask 한꺼번에 다루기에는 초보자들은 쉽지 않을 수 있지만 이 부분만 잘 해내신다면 간단한 어플리케이션을 만드시는데는 문제가 없습니다.

그러니까!! 포기하지마시고 따라오시길 바랍니다!

이것으로 flask mariadb 활용 홈페이지 구축 2편을 마무리 짓고 다음 포스팅인 로그인 기능 구현편에서 뵙도록하겠습니다.

Let’s GIL-IT!!