개발

플라스크(Flask) 예제로 정리

화이트해커 Luna 🌙 2023. 9. 14. 20:36
728x90
반응형



1. 플라스크 설치

   pip3 install Flask

 

Flask를 사용하려면 먼저 Python을 설치해야 합니다. 그런 다음, 가상 환경을 설정하고 Flask를 설치합니다. virtualenv 또는 venv을 사용하여 프로젝트별로 환경을 격리시키는 것이 좋습니다.



2. 프로젝트 구조


   프로젝트 디렉토리는 다음과 같은 구조를 가집니다.

   myapp/
   ├── app.py
   ├── templates/
   │   ├── index.html
   │   └── ...
   ├── static/
   │   ├── style.css
   │   └── ...
   └── ...

 

Flask 애플리케이션은 보통 하나의 파일로 시작하며, 나중에는 프로젝트가 커지면 여러 파일로 분리하는 것이 일반적입니다. 기본적으로 app.py 또는 application.py로 시작하는 것이 관례입니다.

 

보다 큰 프로젝트에서 사용하는 폴더 구조 예시를 들어보겠습니다.  

myapp/
├── app.py               # Flask 앱을 생성하고 구성하는 파일
├── config.py            # 앱 설정 변수 및 환경 설정 파일
├── requirements.txt     # 프로젝트 의존성 패키지 목록
├── static/              # 정적 파일 (CSS, JavaScript, 이미지 등)
│   ├── style.css
│   ├── script.js
│   └── ...
├── templates/           # HTML 템플릿 파일
│   ├── index.html
│   ├── about.html
│   └── ...
├── auth/                # 사용자 인증 관련 모듈
│   ├── __init__.py
│   ├── views.py         # 사용자 인증과 관련된 뷰 함수
│   ├── forms.py         # 로그인 및 회원가입 폼 정의
│   ├── models.py        # 사용자 모델 및 데이터베이스 관련 작업
│   └── ...
├── blog/                # 블로그 기능과 관련된 모듈
│   ├── __init__.py
│   ├── views.py         # 블로그 뷰 함수 및 블루프린트
│   ├── forms.py         # 글 작성 폼 등 블로그 관련 폼 정의
│   ├── models.py        # 블로그 글 모델 및 데이터베이스 관련 작업
│   └── ...
└── ...



3. 라우팅 및 뷰 함수


   Flask 애플리케이션에서 URL 경로와 함수를 연결합니다. 예를 들어, 홈 페이지를 나타내는 라우트를 정의합니다.

   from flask import Flask, render_template

   app = Flask(__name__)

   @app.route('/')
   def index():
       return render_template('index.html')

 

Flask에서 URL 경로와 함수를 연결하는 작업을 라우팅이라고 합니다. @app.route() 데코레이터를 사용하여 URL에 대한 처리 함수를 정의합니다. 이 함수를 뷰 함수라고 부르며, 클라이언트 요청을 처리하고 응답을 반환합니다.



4. 템플릿 및 HTML 렌더링


   `templates` 폴더에 있는 HTML 템플릿을 사용하여 동적으로 웹 페이지를 렌더링합니다. 템플릿에서 변수를 사용할 수 있습니다.

   <!-- templates/index.html -->
   <!DOCTYPE html>
   <html>
   <head>
       <title>플라스크 웹 앱</title>
   </head>
   <body>
       <h1>환영합니다!</h1>
       <p>Flask를 사용하여 웹 앱을 만들고 있습니다.</p>
   </body>
   </html>



5. 폼 처리


   사용자로부터 데이터를 받는 폼을 만들고 처리합니다. 예를 들어, 사용자 이름을 입력하는 폼을 만들어보겠습니다.

   from flask import Flask, render_template, request

   app = Flask(__name__)

   @app.route('/', methods=['GET', 'POST'])
   def index():
       if request.method == 'POST':
           user_name = request.form['user_name']
           return f'안녕하세요, {user_name}님!'
       return render_template('index.html')



6. 데이터베이스 연동


   데이터베이스와 연동하여 데이터를 저장하고 검색합니다. SQLAlchemy를 사용하여 모델을 정의하고 데이터베이스 작업을 수행할 수 있습니다.

 

데이터베이스 연동 예시:

   from flask import Flask, render_template, request
   from flask_sqlalchemy import SQLAlchemy

   app = Flask(__name__)
   app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
   db = SQLAlchemy(app)

   class User(db.Model):
       id = db.Column(db.Integer, primary_key=True)
       username = db.Column(db.String(80), unique=True, nullable=False)

   @app.route('/', methods=['GET', 'POST'])
   def index():
       if request.method == 'POST':
           user_name = request.form['user_name']
           new_user = User(username=user_name)
           db.session.add(new_user)
           db.session.commit()
           return f'안녕하세요, {user_name}님! 사용자 데이터가 저장되었습니다.'
       return render_template('index.html')

   if __name__ == '__main__':
       db.create_all()
       app.run()



7. 세션과 쿠키


   사용자 상태를 추적하고 인증을 관리하기 위해 세션과 쿠키를 사용합니다. 예를 들어, 사용자 로그인 정보를 세션에 저장하고 액세스 제어를 구현할 수 있습니다.

  from flask import Flask, render_template, request, session

   app = Flask(__name__)
   app.secret_key = 'mysecretkey'  # 보안을 위한 시크릿 키 설정

   @app.route('/login', methods=['POST'])
   def login():
       if request.method == 'POST':
           user_name = request.form['user_name']
           session['user_name'] = user_name
           return '로그인 성공!'
       return '로그인 페이지'

   @app.route('/dashboard')
   def dashboard():
       if 'user_name' in session:
           user_name = session['user_name']
           return f'안녕하세요, {user_name}님! 대시보드에 오신 것을 환영합니다.'
       else:
           return '로그인이 필요합니다.'



8. 보안 고려사항


   보안은 매우 중요합니다. 사용자 입력 검증, CSRF 공격 방어, 비밀번호 해싱 등을 고려하여 보안을 강화해야 합니다.


9. 배포 및 호스팅


애플리케이션을 배포하려면 웹 서버(Gunicorn, uWSGI 등)와 웹 서버 게이트웨이 인터페이스(WSGI)를 설정해야 합니다. 클라우드 호스팅 서비스(AWS, Heroku, 등)를 활용하여 웹 애플리케이션을 온라인에 배포할 수 있습니다.



10. 디버깅과 로깅


    개발 중에는 오류를 디버그하고 애플리케이션 동작을 추적하기 위한 로깅을 설정하는 것이 중요합니다. Flask 내장 디버그 모드를 사용하면 편리하게 오류를 파악할 수 있습니다.


이렇게 Flask를 사용하여 풀스택 웹 개발을 할 수 있습니다. 프로젝트를 시작하고 기능을 점진적으로 확장하면서 Flask의 다양한 기능과 라이브러리를 활용할 수 있습니다.

728x90
반응형