Python 웹 전투 | Flask 프레임워크를 사용하여 웹 애플리케이션을 빠르게 빌드[combat]


 개요

Python 웹 개발은 초기 CGI 스크립트부터 현재 풀 스택 웹 프레임워크에 이르기까지 오랜 역사를 가지고 있으며 현재 매우 인기 있는 방법이 되었습니다.

파이썬은 1995년(90년대 초)에 웹 개발에 처음 사용되었으며, 이때 CGI 스크립트는 동적 웹 페이지를 작성하는 데 사용되었습니다. Django 프레임워크는 2004년에 출시되었습니다. Django 프레임워크는 많은 기본 기능을 제공하는 고도로 모듈화된 프레임워크로 웹 개발을 더 쉽고 빠르게 만듭니다. 2010년에 출시된 Flask 프레임워크는 더 적은 수의 기본 기능을 제공하는 경량 프레임워크이지만 더 유연하여 개발자가 필요에 따라 기능을 추가하거나 제거할 수 있습니다.


1. 플라스크란?

Flask는 Python용 경량 웹 프레임워크로 사용 편의성과 높은 유연성이 특징입니다. Flask 프레임워크는 웹 애플리케이션을 빠르게 구축할 수 있으며 좋은 선택입니다. Flask 프레임워크의 핵심 아이디어는 웹 서버와 웹 애플리케이션 간의 통신 프로토콜을 정의하는 WSGI(Web Server Gateway Interface)입니다.

1.1 플라스크의 장점

  • 사용 용이성: Flask 프레임워크의 API는 사용하기 쉽고 개발자가 빠르게 시작할 수 있습니다. MVC 디자인 패턴.

  • 높은 유연성: Flask 프레임워크는 확장성이 높으며 실제 필요에 따라 확장할 수 있습니다.

  • 경량: Flask 프레임워크에는 적은 양의 코드가 있고 빠르게 실행됩니다.

  • 풍부한 문서: Flask 프레임워크의 문서는 매우 상세하며 개발자는 필요한 정보를 쉽게 찾을 수 있습니다.

1.2 플라스크의 단점

  • 경량성: Flask 프레임워크의 경량성도 단점 중 하나이며 기능이 상대적으로 제한되어 자체적으로 확장해야 합니다.

  • 대규모 애플리케이션에 적합하지 않음: Flask 프레임워크는 소규모 애플리케이션에 적합하며 대규모 애플리케이션의 경우 성능 병목 현상이 발생할 수 있습니다. 이때 Django를 생각할 수 있다.

1.3 Flask의 기본 구성 요소

Flask 프레임워크는 다음과 같은 기본 구성 요소로 구성됩니다.

  • 라우팅: URL과 보기 기능 간의 매핑을 정의합니다.

  • 보기 기능: 요청을 처리하고 응답을 반환합니다.

  • 템플릿: HTML 페이지를 생성합니다.

  • 양식: 사용자가 제출한 데이터를 처리합니다.

  • 확장: Flask 프레임워크의 확장 기능을 구현합니다.

2. 기본 사용법

2.1 플라스크 설치

Flask를 사용하기 전에 Flask를 설치해야 합니다. pip 명령을 사용하여 설치할 수 있습니다.

pip install Flask

2.2 헬로월드

다음은 Flask 프레임워크를 사용하여 "Hello World"를 출력하는 방법을 보여주는 간단한 예입니다.

새 app.py 파일을 만들고 다음 내용을 입력합니다.

Linux에서 실행:

내보내기 FLASK_APP=app.py

플라스크 실행

브라우저를 열고 http://127.0.0.1:5000/을 방문하십시오.

Windows 실행인 경우:

FLASK_APP=app.py 설정

플라스크 실행

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

2.3 라우팅 및 보기 기능

Flask에서 라우팅 및 보기 기능은 밀접하게 관련되어 있습니다. 라우팅은 요청을 처리하고 응답을 반환하는 보기 기능에 URL을 매핑하는 데 사용됩니다. 라우팅 및 보기 기능을 구현하기 위해 Flask에서  @app.route 데코레이터를 사용할 수 있습니다. 다음은 간단한 예입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'This is the index page.'

@app.route('/hello')
def hello():
    return 'Hello, World!'

@app.route('/')@app.route('/hello') 각각 두 개의 경로를 정의하고  두   개의 보기 기능입니다 index() . hello()

2.4 템플릿

템플릿은 Flask에서 HTML 페이지를 생성하는 방법입니다. Flask는 Jinja2, Mako, Tenjin 등을 포함한 다양한 템플릿 엔진을 지원합니다. 이 기사에서는 Jinja2를 템플릿 엔진으로 사용합니다.

다음은 템플릿을 사용하여 HTML 페이지를 생성하는 방법을 보여주는 간단한 예입니다.

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='Home')

@app.route('/hello')
def hello():
    return render_template('hello.html', name='Flask')

render_template() 이 함수는 템플릿을 렌더링하는 데 사용되며 첫 번째 매개 변수는 템플릿 이름을 지정하고 두 번째 매개 변수는 템플릿에서 사용되는 변수입니다.

2.5 정적 파일

정적 파일에는 CSS, JavaScript, 이미지 등이 포함됩니다. Flask에서는  url_for() 함수를 사용하여 정적 파일에 대한 URL을 생성할 수 있습니다.

다음은 간단한 예입니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{
   
   { title }}</title>
    <link rel="stylesheet" href="{
   
   { url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>{
   
   { title }}</h1>
    <p>Hello, Flask!</p>
</body>
</html>

url_for('static', filename='style.css') 정적 파일에 대한 URL이 생성됩니다  style.css .

2.6 양식

양식은 웹 응용 프로그램에서 일반적인 상호 작용 형식입니다. Flask에서는  request 개체를 사용하여 사용자가 제출한 양식 데이터를 가져올 수 있습니다.

다음은 간단한 예입니다.

from flask import Flask, request

app = Flask(__name__)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == 'password':
            return 'Login success!'
        else:
            return 'Invalid username or password.'
    else:
        return '''
            <form method="post">
                <label>Username:</label>
                <input type="text" name="username">
                <label>Password:</label>
                <input type="password" name="password">
                <input type="submit" value="Login">
            </form>
        '''

request.form POST 요청으로 제출된 양식 데이터를 가져올 수 있습니다.

3. 실제 사례: Todo(to-do) 애플리케이션 구축

다음으로 실제 사례를 통해 Flask 프레임워크를 사용하여 Todo 애플리케이션을 구축하는 방법을 소개합니다.

3.1 데이터베이스 설계

먼저 데이터베이스를 설계해야 합니다. 이 문서에서는 MySQL을 데이터베이스로 사용합니다. 데이터베이스 디자인은 다음과 같습니다.

CREATE TABLE `todos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `completed` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.2 백엔드 구현

다음으로 백엔드의 기능을 구현합니다.

from flask import Flask, render_template, request, redirect, url_for
import pymysql.cursors

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='password',
    db='todo',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

@app.route('/')
def index():
    with connection.cursor() as cursor:
        cursor.execute('SELECT * FROM `todos`')
        todos = cursor.fetchall()
    return render_template('index.html', todos=todos)

@app.route('/add', methods=['POST'])
def add():
    title = request.form['title']
    with connection.cursor() as cursor:
        cursor.execute('INSERT INTO `todos` (`title`) VALUES (%s)', title)
        connection.commit()
    return redirect(url_for('index'))

@app.route('/toggle/<int:todo_id>', methods=['POST'])
def toggle(todo_id):
    with connection.cursor() as cursor:
        cursor.execute('SELECT `completed` FROM `todos` WHERE `id` = %s', todo_id)
        completed = cursor.fetchone()['completed']
        cursor.execute('UPDATE `todos` SET `completed` = %s WHERE `id` = %s', (not completed, todo_id))
        connection.commit()
    return redirect(url_for('index'))

@app.route('/delete/<int:todo_id>', methods=['POST'])
def delete(todo_id):
    with connection.cursor() as cursor:
        cursor.execute('DELETE FROM `todos` WHERE `id` = %s', todo_id)
        connection.commit()
    return redirect(url_for('index'))

구문 분석: 데이터베이스 연결을 설정하고 다음 네 가지 경로를 정의합니다.

  • /: 모든 할 일을 표시합니다.

  • /add: 할 일을 추가합니다.

  • /toggle/: Todo 완료 여부를 표시합니다.

  • /delete/: Todo를 삭제합니다.

3.3 프런트엔드 구현

마지막으로 프런트 엔드 기능을 구현합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Todo</title>
    <style>
        .completed {
            text-decoration: line-through;
        }
    </style>
</head>
<body>
    <h1>Todo</h1>
    <form method="post" action="{
   
   { url_for('add') }}">
        <label>Title:</label>
        <input type="text" name="title">
        <input type="submit" value="Add">
    </form>
    <ul>
        {% for todo in todos %}
            <li{% if todo.completed %} class="completed"{% endif %}>
                <form method="post" action="{
   
   { url_for('toggle', todo_id=todo.id) }}">
                    <input type="checkbox" name="completed" {% if todo.completed %}checked{% endif %}>
                    {
   
   { todo.title }}
                </form>
                <form method="post" action="{
   
   { url_for('delete', todo_id=todo.id) }}">
                    <input type="submit" value="Delete">
                </form>
            </li>
        {% else %}
            <p>No todos.</p>
        {% endfor %}
    </ul>
</body>
</html>

우리는 Jinja2 템플릿 엔진을 사용하여 Todo 목록을 표시하고, Todo를 추가하고, Todo 완료 여부를 표시하고, Todo를 삭제하고 기타 기능을 수행합니다.

4. 기술 요약

오늘은 웹 개발을 위해 Flask 프레임워크를 사용하는 방법을 소개하고 실제로 가벼운 웹 애플리케이션을 개발했습니다. Flask는 Python용 경량 웹 프레임워크로 단순성, 사용 용이성, 높은 유연성의 장점이 있어 초보자도 빠르게 시작할 수 있습니다.

Supongo que te gusta

Origin blog.csdn.net/Rocky006/article/details/131978301
Recomendado
Clasificación