CRUD 게시판 구축

2024. 9. 8. 11:09·Basic_Theory

1. 전체 코드 구성


2. app.py

from flask import Flask, render_template, request, redirect, url_for, flash
from flask_mysqldb import MySQL

-> Flask, render_template, request, redirect, url_for, flash은 모두 flask 모듈에 포함된 것들이다. 하나 하나 살펴보자

  • Flask: Flask 모듈에서 가져오는 가장 중요한 클래스이다. 애플리케이션의 진입점 역할을 하여, 라우팅과 요청 처리를 설정할 수 있게 해준다.
  • render_template: Flask의 템플릿 엔진 기능을 사용하여 HTML 템플릿 파일을 렌더링하는 함수이다.
  • request: Flask에서 요청 정보를 담고 있는 객체이다. Client가 Server로 보내는 모든 요청 데이터를 처리할 수 있으며 POST, GET등 HTTP 요청 메서드에 접근할 수있다.
  • redirect: Flask에서 특정 URL로 사용자를 리다이렉트할 때 사용한다. 폼 제출 후 사용자를 다른 페이지로 이동시키는데 사용된다.
  • url_for: Flask에서 뷰 함수 이름을 사용하여 해당 함수가 연결된 URL을 생성하는 함수이다.
  • flash: Flask에서 사용자에세 일시적인 메시지를 전달할 때 사용되는 함수이다. 폼 제출 후 성공/실패와 같은 피드백을 제공하는 데 사용한다.

 

app = Flask(__name__)
app.secret_key = 'your_secret_key'

-> Flask 애플리케이션을 초기화하고, 플래시 메시지와 세션 관리에 필요한 보안 키를 설정하는 부분이다.

  • Flask(__name__): Flask 애플리케이션을 초기화하는 코드로, Flask 클래스의 인스턴스(=변수)를 생성한다.
  • __name__: 이 파라미터는 현재 모듈의 이름을 의미하며, Flask 애플리케이션이 어디에서 실행되는지를 Flask에 알려준다. 이를 통해 Flask는 정적 파일이나 템플릿 파일을 찾을 수 있는 경로를 설정한다.
  • app: 해당 변수는 Flask 애플리케이션 자체를 나타내며, 이후 라우트 설정, 요청 처리, 응답 전송 등의 작업을 이 객체를 통해 수행한다.

 

 

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'  
app.config['MYSQL_PASSWORD'] = 'ahj740429^^' 
app.config['MYSQL_DB'] = 'forum'
mysql = MySQL(app)

이 부분은 Flask 애플리케이션에서 MySQL 데이터베이스를 연결하고 설정하는 코드이다. 이 부분을 통해 Flask 애플리케이션이 MySQL 데이터베이스와 상호작용 할 수 있게 된다.

  • app.config['MYSQL_HOST'] = 'localhost': 현재 애플리케이션이 실행되는 컴퓨터에서 MySQL 서버가 실행중임을 의미한다. 데이터베이스가 동일한 컴퓨터에 있다는 것을 알린다.
  • app.config['MYSQL_USER'] = 'root': MySQL에 접속할 때 사용할 사용자 계정을 설정한다.
  • app.config['MYSQL_PASSWORD'] = 'ahj740429^^: 비밀번호를 설정하는 부분이다. 비밀번호는 사용자 계정과 쌍을 이루어 데이터베이스에 접근 권한을 부여한다.
  • app.config['MYSQL_DB'] = 'forum': 사용할 MySQL 데이터베이스 이름을 설정하는 부분이다. 나는 forum이라는 이름의 DB를 만들어놨다.
  • mysql = MySQL(app): Flask와 MySQL을 연결하는 객체를 생성하는 부분이다. MySQL(app)은 Flask-MySQLdb 라이브러리를 사용하여 Flask 애플리케이션과 MySQL 데이터베이스를 연결한다.

 

# Home route to display posts with optional search
@app.route('/', methods=['GET', 'POST'])
def index():
    search_type = request.form.get('search_type', 'all')
    search_query = request.form.get('search_query', '')

    cur = mysql.connection.cursor()
    
    # 검색 조건에 따라 SQL 쿼리 변경
    if search_type == 'title':
        cur.execute("SELECT * FROM topics WHERE title LIKE %s", ('%' + search_query + '%',))
    elif search_type == 'body':
        cur.execute("SELECT * FROM topics WHERE body LIKE %s", ('%' + search_query + '%',))
    elif search_type == 'all':
        cur.execute("SELECT * FROM topics WHERE title LIKE %s OR body LIKE %s", 
                    ('%' + search_query + '%', '%' + search_query + '%'))
    else:
        cur.execute("SELECT * FROM topics")
        
    posts = cur.fetchall()
    cur.close()
    return render_template('index.html', posts=posts, search_query=search_query, search_type=search_type)
  • methods=['GET' , 'POST']: GET 요청은 기본 페이지 로드 시 사용되며, POST 요청은 사용자가 검색 폼을 제출할 때 사용된다.
  • search_type = request.form.get('search_type', 'all'): request.form.get는 POST 요청으로 전달된 폼 데이터를 가져온다. search_type은 검색의 종류를 결정하는 값으로, 사용자가 검색 옵션에서 선택한 값이다.
  • search_query = request.form.get('search_query', ''): search_query는 사용자가 검색창에 입력한 검색어이다. 
  • cur = mysql.connection.cursor(): 데이터베이스에 접근하기 위해 커서를 생성하는 부분이다. 커서는 데이터베이스에 쿼리를 실행하고 데이터를 가져오는 역할을 한다.
  • cur.execute: cur은 위의 코드를 통해 새성된 커서 객체이고, execute 메서드는 커서를 통해 SQL 명령을 실행하는 역할을 한다.
  • SELECT * FROM topics WHERE title LIKE %s: LIKE는 SQL에서 패턴 매칭을 할 때 사용되는 연산자이다. 와일드카드와 비슷한 기능을 할 수 있다. %s는 플레이스홀더로, 사용자가 실제고 검색하는 값이 들어가게 된다. 쿼리와 데이터를 분리하여 SQL 인젝션을 
  • return render_template('index.html', posts=posts, search_query=search_query, search_type=search_type): Flask 애플리케이션이 사용자에게 HTML 파일을 응답하는 부분.

'Basic_Theory' 카테고리의 다른 글

Python 가상환경 Venv 이해  (2) 2024.09.12
Port & IP & Port Forwarding  (1) 2024.09.12
HTML & Internet  (4) 2024.09.05
[공부] MySQL 기초  (9) 2024.09.02
웹 사이트 개발_기초 문법 정리  (0) 2024.09.01
'Basic_Theory' 카테고리의 다른 글
  • Python 가상환경 Venv 이해
  • Port & IP & Port Forwarding
  • HTML & Internet
  • [공부] MySQL 기초
sonotri._.
sonotri._.
@-@
  • sonotri._.
    SONOTRI
    sonotri._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (102)
      • CTF (4)
      • Wargame (11)
      • Infomation_Sec (2)
      • Cyber_Sec (11)
        • Linux Kernel (2)
        • webhacking.kr (3)
        • bandit (4)
        • GoN Club Study (2)
      • Language (8)
        • C Language (2)
        • Java Language (6)
      • Dreamhack (43)
        • System Hacking (8)
        • Reverse Engineering (11)
        • Web Hacking (2)
        • Embedded Hacking (16)
        • Digital Forensics (0)
      • Basic_Theory (11)
      • elif (3)
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • 공지사항

  • 태그

    vmware 네트워크
    초기화
  • 최근 댓글

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.3
sonotri._.
CRUD 게시판 구축
상단으로

티스토리툴바