app/

여러가지 view와 login routing을 담당하는 역할을 하며, static 폴더를 통해 프론트 작업물(html, js, css) 를 관리하고 보여준다.

/app

/__init__.py

application을 run_app에서 받은 config를 토대로 생성하는 곳이다.

viewsapi와 controllerapi에 있는 blueprint를 받아와 application 레지스터리에 등록도 한다.

"""
Application Factory Module
"""
from logging import DEBUG, debug
from flask import Flask

from .api.views_api import views_bp
from .api.controller_api import controller_bp


def create_app(config):

    application = Flask(
        import_name=__name__, static_folder="./static/", template_folder="./static/"
    )

    application.config.from_object(config)

    application.register_blueprint(views_bp, url_prefix="/")
    application.register_blueprint(controller_bp, url_prefix="/")

    return application

/app/api

/__init__.py

__init__은 특정 클래스나 폴더 혹은 모듈이 호출될떄 함께 호출되고 실행되며, 패키지로 인식하게 해준다.

python3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전한 방법이다.

/controller_api/__init__.py

Blueprint 등록을 위한 init.py 파일이다.

"""
로그인 확인 및 LMS데이터를 return
"""
from flask import Blueprint
from .login_api import login_router


controller_bp = Blueprint("controller_bp", __name__)
login_router(controller_bp)

/controller_api/login_api.py

mainpage에서 id와 pw값을 받으면 controller/login_checher.py에 해당 값을 보내 로그인 검증을 시행하고, 로그인이 되지 않는다면 에러 코드와 메세지를 반환 로그인이 된다면 해당 아이디로 가져온 lms 데이터를 반환해준다.

from flask import request
from controller import login_checker, selecter


"""
circular import 방지를 위해 deco함수를 만들었다
controller/login_checker.py에 해당 값을 보냄
"""
def login_router(login_bp):
    @login_bp.route("/login", methods=["POST"])
    def login_api():
        json_data = request.get_json()

        pk_user_id = json_data["pk_user_id"]
        pk_user_pw = json_data["pk_user_pw"]
        
        login_check_value = login_checker.login_check_and_get_session(
            pk_user_id, pk_user_pw
        )

        if login_check_value == False:
            return {"status" : 400, "error_msg": "올바른 ID혹은 PW가 아닙니다."}

        elif login_check_value == True:
            unoragnized_data = selecter.get_subject_information(pk_user_id, pk_user_pw)
        
        return unoragnized_data

/views_api/__init__.py

Blueprint 등록을 위한 init.py 파일이다.

"""
기본 view를 return
"""
from flask import Blueprint
from .views import views_router


views_bp = Blueprint("views_bp", __name__)
views_router(views_bp)

/views_api/views.py

pk-select.kro.kr 로 Get요청이 발생하면 main_page를 보여준다.

from flask import render_template

"""
main_page를 보여준다.
"""
# circular import 방지를 위해 deco함수를 만들었다
def views_router(views_bp):
    @views_bp.route("/")
    def main_view_api():

        print("views api inner")
        return render_template("pkselect.html")

/APP/static

/pkselect.html

main_page와 secondpage가 함께 있으며, js와 서버간의 요청을 통해 second_page를 보여주는 동작을 한다.

/static

.jpg, .png 등 이미지나 영상들을 모아두는 폴더이다.

/js

사용자가 로그인시 서버에 요청을 보내고, 응답에 따른 결과를 보여준다.

/css

.css 파일들을 저장한다.

Last updated