[python] Flask를 사용하여 온라인 서베이 및 설문지 시스템 구축하기
이번 포스팅에서는 Python의 Flask 프레임워크를 활용하여 온라인 서베이 및 설문지 시스템을 구축하는 방법에 대해 다뤄보겠습니다. Flask는 가벼우면서도 강력한 웹 프레임워크로, 그 유연성과 확장성으로 많은 개발자들에게 선호되고 있습니다.
필수 패키지 설치
가상환경을 만들고 다음 패키지를 설치합니다.
pip install flask
pip install flask-wtf
pip install flask-bootstrap
- Flask: 웹 애플리케이션을 위한 마이크로 웹 프레임워크
- Flask-WTF: Flask를 위한 WTForms 통합
- Flask-Bootstrap: Bootstrap을 Flask에 통합
데이터베이스 구성
이 예시를 위해 SQLite 데이터베이스를 사용하겠습니다. 데이터베이스 모델을 정의하고 마이그레이션을 수행하는데에는 Flask-Migrate 확장을 사용합니다.
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Survey(db.Model):
id = db.Column(db.Integer, primary_key=True)
question = db.Column(db.String(100))
웹 애플리케이션 개발
프로젝트 폴더 안에 app.py
파일을 만들고 다음과 같이 Flask 애플리케이션을 작성합니다.
from flask import Flask, render_template
from forms import SurveyForm
from models import db, Survey
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///survey.db'
app.config['SECRET_KEY'] = 'secret'
db.init_app(app)
@app.route('/', methods=['GET', 'POST'])
def survey():
form = SurveyForm()
if form.validate_on_submit():
survey = Survey(question=form.question.data)
db.session.add(survey)
db.session.commit()
return render_template('survey.html', form=form)
@app.route('/results')
def results():
surveys = Survey.query.all()
return render_template('results.html', surveys=surveys)
HTML 템플릿 작성
다음은 survey.html
과 results.html
템플릿 파일의 예시입니다.
<!-- survey.html -->
<form method="POST">
{{ form.csrf_token }}
{{ form.question.label }} {{ form.question(size=20) }}
<button type="submit">Submit</button>
</form>
<!-- results.html -->
<h2>Survey Results</h2>
<ul>
{% for survey in surveys %}
<li>{{ survey.question }}</li>
{% endfor %}
</ul>
웹 애플리케이션 실행
다음과 같이 애플리케이션을 실행할 수 있습니다.
export FLASK_APP=app.py
export FLASK_ENV=development
flask run
결론
이렇게 Flask를 사용하여 간단한 온라인 서베이 및 설문지 시스템을 구축할 수 있습니다. Flask의 간결하면서도 강력한 기능들을 활용하여 좀 더 복잡한 기능들을 추가해볼 수도 있습니다. 이를 통해 자신만의 커스텀 서베이 시스템을 구축할 수 있을 것입니다.
참고 문헌:
- Flask 공식 문서: https://flask.palletsprojects.com/
- WTForms 공식 문서: https://wtforms.readthedocs.io/
- Bootstrap 공식 문서: https://getbootstrap.com/