개인프로젝트/자동화

게더타운 출석체크 자동화-python flask 서버 구축

해아's 2024. 4. 22. 12:00

python flask 서버 구축

구현된 업무 목록:

  1. 학생명단 가져오기: 현재 기수의 학생명단을 가져와서 활용합니다. 이는 회사의 데이터베이스에서 학생명단을 가져오는 과정을 거쳐서 이뤄집니다.

  2. 게더타운 접속자 명단 가져오기: flask 서버는 node.js를 통해 구현된 접속자 명단을 가져옵니다. 이를 통해 게더타운에 접속한 학생들의 정보를 실시간으로 확인할 수 있습니다.

     #게더타운 접속자목록 가져오기
     @app.route('/get_gw',methods=['POST'])
     def get_gw():
         filename = f'{secrets['DATA_SRC']}/gethertown/{session['gather_space']}_player_names_{todays}.txt'
         gw_data = get_login_users_from_file(filename)
         return jsonify(gw_data) , 200

    이 코드는 Flask 애플리케이션에서 /get_gw 엔드포인트를 정의하는 부분입니다. 이 엔드포인트는 POST 메서드를 허용하며, 호출되면 해당 공간의 접속자 목록을 가져옵니다.

    1. 먼저, filename 변수를 설정하여 가져올 파일의 경로를 정의합니다. 이 파일 경로는 특정 디렉토리에 있는 파일명을 동적으로 생성합니다. 파일명에는 세션에 저장된 gather_space와 오늘 날짜(todays)가 포함됩니다.

    2. 그 다음, get_login_users_from_file 함수를 호출하여 해당 파일에서 로그인한 사용자 데이터를 가져옵니다.

    3. 마지막으로, 가져온 데이터를 JSON 형식으로 변환한 후, HTTP 응답 코드 200과 함께 반환합니다.

      이 코드를 통해 Flask 애플리케이션의 특정 엔드포인트를 통해 게더타운의 접속자 목록을 가져올 수 있습니다.

  3. 학생 출석 정보 가져오기: 학생 출석 정보와 퇴실 정보를 가져와서 처리합니다. 이를 통해 학생들의 출석 상태를 파악하고 관리합니다.

     #회사서버 DB에서 학생 출결사항 정보 가져오기
     @app.route('/get_user_in',methods=['POST'])
     def get_user_in():
         data = getuser_atten(session['gather_space'])
         return jsonify(data) , 200

    이 코드는 Flask 애플리케이션에서 /get_user_in 엔드포인트를 정의하는 부분입니다. 이 엔드포인트는 POST 메서드를 허용하며, 호출되면 회사 서버의 데이터베이스에서 학생의 출결 정보를 가져옵니다.

    1. 먼저, getuser_atten 함수를 호출하여 학생의 출결 정보를 가져옵니다. 이 함수는 세션에 저장된 gather_space를 기반으로 회사 서버의 데이터베이스에 쿼리를 수행하여 출결 정보를 가져옵니다.

    2. 그 다음, 가져온 데이터를 JSON 형식으로 변환한 후, HTTP 응답 코드 200과 함께 반환합니다.

      이 코드를 통해 Flask 애플리케이션의 특정 엔드포인트를 통해 회사 서버의 데이터베이스에서 학생의 출결 정보를 가져올 수 있습니다.

  4. 학생 정보 페이지 가공 및 출력: 가져온 학생 정보를 가공하여 화면에 출력합니다. 이를 통해 학생들의 출석 상태 및 게더타운 접속 정보를 시각화하여 제공합니다.

     @app.route('/atten', methods=['GET', 'POST'])
     def atten():
         if 'logged_in' in session and session['logged_in']:
                     # 학생명단 가져오기 
             atten_users = [atten_user['name'] for atten_user in sslc_db_query(sql,'txt')]
                     #학생명단과 현재 기수정보를 템플릿에 전달
             return render_template('index.html',atten_users=atten_users,gather_space = session['gather_space'] )
         else:
             flash('로그인이 필요합니다.', 'error')
             return redirect(url_for('index'))

    이 코드는 Flask 애플리케이션에서 /atten 엔드포인트를 정의하는 부분입니다. 이 엔드포인트는 GET과 POST 메서드를 모두 허용합니다.

    1. 먼저, 세션에 'logged_in'이라는 키가 있고 그 값이 True인지 확인합니다. 즉, 사용자가 로그인되어 있는지를 확인합니다.

    2. 로그인된 경우, 데이터베이스에서 학생명단을 가져옵니다. 이때 사용되는 SQL 쿼리는 변수 sql에 저장되어 있고, sslc_db_query 함수를 사용하여 실행됩니다. 가져온 학생명단은 리스트 컴프리헨션을 사용하여 atten_users 리스트에 저장됩니다.

    3. 로그인된 상태에서는 학생명단과 세션에 저장된 gather_space 정보를 함께 index.html 템플릿에 전달하여 렌더링합니다.

    4. 로그인되지 않은 경우에는 '로그인이 필요합니다.'라는 에러 메시지를 플래시 메시지로 설정하고, 'error' 카테고리로 플래시 메시지를 전달한 후, 인덱스 페이지로 리디렉션합니다.

      이 코드를 통해 사용자가 로그인한 상태에서는 학생명단과 gather_space 정보를 포함한 페이지를 보여주고, 로그인되지 않은 경우에는 로그인이 필요한 메시지를 표시한 후 로그인 페이지로 이동시킵니다.

  5. 일간 학생 게더타운 접속 정보 시각화: 학생들의 일간 게더타운 접속 정보를 시각화하여 제공합니다. 이를 통해 학생들의 활동 패턴을 파악하고 분석할 수 있습니다.

  6. 일별 출석부 엑셀 파일 저장: 매일의 출석 정보를 엑셀 파일로 저장합니다. 이를 통해 학생들의 출석 현황을 정리하고 보관할 수 있습니다.

  7. 학생 기간별 출석부 엑셀 저장: 학생들의 출석부를 기간별로 엑셀 파일로 저장합니다. 이를 통해 특정 기간 동안의 출석 상태를 확인하고 관리할 수 있습니다.

     #get_atten_file 함수에 db쿼리 및 가공 처리 기능을 넣고 받은 정보를 엑셀파일로 
     @app.route('/download_excel', methods=['GET', 'POST'])
     def download_excel():
         atten_th = request.args.get('atten_th',type=int)
         atten_type = request.args.get('atten_type',type=int)
         atten_name = request.args.get('atten_name')
         atten_s_date = request.args.get('atten_s_date')
         atten_e_date = request.args.get('atten_e_date')
         excel_file = get_atten_file(atten_th,atten_type,atten_name,atten_s_date,atten_e_date)
         excel_file.seek(0)
         download_name = f'({atten_th}기){atten_name}_({atten_s_date}~{atten_e_date}).xlsx'
         return send_file(excel_file, as_attachment=True, download_name=download_name)

    이 코드는 Flask 애플리케이션에서 /download_excel 엔드포인트를 정의하는 부분입니다. 이 엔드포인트는 GET과 POST 메서드를 모두 허용합니다.

    1. 먼저, 엑셀 파일을 다운로드할 때 필요한 매개변수들을 요청에서 추출합니다. atten_th, atten_type, atten_name, atten_s_date, atten_e_date 등이 그것들입니다.

    2. 추출한 매개변수들을 이용하여 get_atten_file 함수를 호출하여 엑셀 파일을 생성합니다. 이 함수는 매개변수로 받은 정보에 기반하여 데이터베이스 쿼리를 실행하고, 그 결과를 가공하여 엑셀 파일 형식으로 반환합니다.

    3. 생성된 엑셀 파일을 읽기 시작 지점으로 이동시킨 후, 다운로드할 파일의 이름을 설정합니다. 이름은 기수, 학생명, 출결 기간 등의 정보를 포함하여 구성됩니다.

    4. 마지막으로, send_file 함수를 사용하여 클라이언트에게 엑셀 파일을 다운로드하도록 응답합니다.

      이 코드를 통해 사용자는 원하는 출결 정보에 대한 엑셀 파일을 다운로드할 수 있습니다.

이 서버가 하는일은 아래와 같이 구분되었었다.

구) 현재 기수의 학생명단 가져오기

현) 회사db에서 학생명단 가져오기

구) 크롬 디버그 게더타운 접속자 명단 가져오기

현) nodejs에서 만들어둔 접속자 명단 가져오기

구)

오늘날자의 학생 출석 정보 가져오기

오늘날자의 학생 퇴실 정보 가져오기

현) 오늘날자의 학생 출석 외출 복귀 퇴실 정보 가져오기

학생 정보 페이지 가공 및 출력 값 리턴

일간 학생 게더타운 접속 정보 시각화

일별 출석부 엑셀 파일 저장

학생 기간별 출석부 엑셀 저장

728x90
반응형