소스 코드 분석하기(1) 심리테스트
주제: Flask 를 이용한 심리 테스트 제작
코드분석하기 (1)
=> flow chart로 보기 쉽게 코드 묶음을 만들어본다.

코드 분석하기 (2)
=> 묶음 코드 해석해보기

☑️__init__.py 파일
=> 핵심 기능은 Flask 애플리케이션을 설정하고 초기화 하는 것이다. 이 애플리케이션은 SQLite데이터베이스를 사용하고, db migration을 관리하며 초기데이터를 추가하는 기능을 포함하고 있다.

def create_app()
: flask애플리케이션 생성 및 설정
데이터베이스 설정
db와 애플리케이션을 연결하고 migrate를 설정
블루 프린트 등록(라우팅을 모듈화하기 위해-main/admin)
그 밑부분에는 초기 데이터를 추가한다.
☑️database.py 파일
=> SQLAlchemy의 클래스의 인스턴스를 생성하여 db이름으로 저장(데이터베이스와 상호작용을 위한 중요한 객체)한다.

SQLAlchemy클래스
: flask 애플리케이션과 sqlalchemy데이터베이스 orm(관계매핑시스템)을 통합시킴
☑️models.py 파일
=> SQLAlchemy를 사용하여 데이터베이스 모델을 정의, 각 클래스는 데이터베이스 테이블에 매핑된다.

from .database import db
: 현재 디렉토리.database에서 db객체를 import한다.
created_at=db.Column(db.DateTime, default=
datetime.utcnow)
: 생성된 날짜와 시간을 저장하는 컬럼/기본값을 현재 UTC시간
으로 사용한다.
is_active=db.Column(db.Boolean, default=True)
: 질문의 활성화 상태를 나타내는 불리언 칼럼으로 기본값으로
True를 사용한다.
praticipant=db.relationship("Participant", backref="quizzes")
: Quiz 모델에서 Participant모델과의 관계를 정의한다.
Quiz가 Participant에 연결되어 있음을 나타내는 것이다.
Participant 모델의 quizzes라는 속성이 자동으로 생성되어(backref) 이를 통해 Participant 인스턴스에서 goekdckarkwkrk wkrtjdgks ahems Quiz응답을 쉽게 접근할 수 있다. 예를 들어 participant.quizzes를 통해 특정 참가자가 작성한 모든 퀴즈 응답을 조회할 수 있다.
<relationship의 사용 예>
특정 참가자의 모든 퀴즈 응답 가져오기
participant = participant.query.get(1)
participant_quizzes = participant.quizzes
☑️route.py파일
=> flask애플리케이션의 라우트 및 기능을 정의한다.

라우팅 데코레이터 읽는법
@main.route("/")
: 애플리케이션의 루트경로('/')에 대한 요청이 있을 때 home
함수를 호출하도록 한다.
@admin.route("", methods=["GET", "POST"])
: admin경로에서 GET과 POST요청을 처리할 수 있는 라우트를 정리한 것. "" 경우 블루프린트의 기본 url과 일치하고 ""사이에 "/submit"있는 경우 /sumbit경로를 의미한다.