[100일 만에 파이썬 마스터하기] 49일차: 파이썬 웹 프로그래밍_웹 프레임워크, 플라스크 프레임워크 설치부터 사용까지

목차

1 웹 프레임워크

Python에서 일반적으로 사용되는 웹 프레임워크 2개

3 Flask 프레임워크 사용

3.1 Flask 프레임워크 설치

3.2 첫 번째 플라스크 프로그램

3.3 라우팅

3.3.1 기본 라우팅

3.3.2 동적 라우팅

3.3.3 HTTP 메소드

3.3.4 여러 경로를 뷰 함수에 바인딩

3.3.5 액세스 URL 매개변수로의 라우팅

3.3.6 기본값을 사용한 동적 라우팅

3.3.7 다양한 데이터 유형을 사용한 동적 라우팅

3.4 정적 파일

3.5 템플릿


1 웹 프레임워크

        웹 프레임워크는 웹 애플리케이션 개발 프로세스를 단순화하고 가속화하도록 설계된 소프트웨어 도구 세트입니다. 개발자가 기능이 풍부한 웹 애플리케이션을 보다 쉽게 ​​구축하고 유지 관리할 수 있도록 미리 설계된 모듈, 함수, 클래스 및 도구 세트를 제공합니다. 웹 프레임워크를 사용하면 개발자는 처음부터 대량의 반복 코드를 작성하는 것을 방지하고 애플리케이션의 비즈니스 로직과 핵심 기능에 집중할 수 있습니다.

웹 프레임워크의 기능은 다음과 같습니다.

  1. 라우팅 및 URL 처리: 웹 프레임워크는 일반적으로 라우팅 기능을 제공하므로 개발자는 다양한 URL을 해당 처리 기능 또는 보기에 매핑할 수 있습니다. 이렇게 하면 URL 구조가 더 명확해지고 다양한 요청을 쉽게 처리할 수 있습니다.

  2. 템플릿 엔진: 템플릿 엔진을 사용하면 개발자는 HTML과 동적 데이터를 결합하여 동적 웹 페이지를 생성할 수 있습니다. 일반적으로 개발자가 페이지 콘텐츠를 효과적으로 생성하는 데 도움이 되는 조건문, 루프, 변수 대체 및 기타 기능을 제공합니다.

  3. 데이터베이스 상호 작용: 웹 프레임워크는 종종 데이터베이스와의 상호 작용을 단순화하는 데이터베이스 추상화 계층을 제공합니다. 이를 통해 개발자는 데이터베이스 쿼리, 삽입, 업데이트 및 삭제 작업을 더 쉽게 수행할 수 있습니다.

  4. 양식 처리: 웹 애플리케이션은 사용자가 제출한 양식 데이터를 처리해야 하는 경우가 많습니다. 웹 프레임워크는 일반적으로 양식 데이터의 유효성을 검사하고, 제출을 처리하고, 응답을 생성하는 메커니즘을 제공합니다.

  5. 세션 관리: 많은 웹 애플리케이션은 사용자의 세션 상태를 추적해야 합니다. 웹 프레임워크는 일반적으로 개발자가 사용자 세션 및 상태를 쉽게 관리할 수 있도록 세션 관리 기능을 제공합니다.

  6. 코드 재사용 장려

Python에서 일반적으로 사용되는 웹 프레임워크 2개

        Python에는 일반적으로 사용되는 웹 프레임워크가 많이 있습니다. 다음은 몇 가지 일반적인 Python 웹 프레임워크입니다.

1. Flask: Flask는 간결한 구문과 강력한 확장 기능을 갖춘 유연한 마이크로 웹 프레임워크입니다. 작고 가벼운 애플리케이션을 구축하는 데 적합합니다.

2. Django: Django는 데이터베이스 ORM, 사용자 인증, 캐싱 등과 같은 다양한 기본 기능을 제공하는 완전한 기능을 갖춘 웹 프레임워크입니다. Django의 디자인 컨셉은 "느슨하게 결합된" 구성 요소로, 개발 프로세스를 더욱 효율적으로 만듭니다.

3. 피라미드(Pyramid): 피라미드는 유연성과 확장성에 초점을 맞춘 경량 웹 프레임워크입니다. 이는 개발자가 프레임워크에서 기능을 선택적으로 추가하거나 제거할 수 있도록 하는 플러그인과 유사한 메커니즘을 사용합니다.

4. Bottle: Bottle은 최소한의 종속성과 단일 소스 파일을 갖춘 작고 사용하기 쉬운 웹 프레임워크입니다. Bottle은 작고 빠른 애플리케이션을 구축하는 데 적합합니다.

5. Tornado: Tornado는 비차단 I/O 및 이벤트 기반 방법을 사용하여 요청을 처리하는 고성능 웹 프레임워크입니다. Tornado는 채팅 애플리케이션 및 실시간 데이터 푸시와 같은 동시성이 높은 상황을 처리하는 데 적합합니다.

3 Flask 프레임워크 사용

3.1 Flask 프레임워크 설치

        Flask는 Werkzeug와 Jinja2라는 두 개의 외부 라이브러리를 사용합니다. Werkzeug는 WSGI 도구 세트이고 Jinja2는 템플릿 렌더링을 담당합니다. 이 문서는 다음 명령을 사용하여 anconda가 만든 가상 환경에 설치됩니다.

pip install flask

다음과 같이 

(venv) PS D:\python365> pip install flask
Collecting flask
  Downloading flask-2.3.3-py3-none-any.whl (96 kB)
     ---------------------------------------- 96.1/96.1 kB 365.4 kB/s eta 0:00:00
Collecting importlib-metadata>=3.6.0
  Downloading importlib_metadata-6.8.0-py3-none-any.whl (22 kB)
Requirement already satisfied: Jinja2>=3.1.2 in d:\python365\venv\lib\site-packages (from flask) (3.1.2)
Collecting colorama
  Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Requirement already satisfied: zipp>=0.5 in d:\python365\venv\lib\site-packages (from importlib-metadata>=3.6.0->flask) (3.16.2)
Requirement already satisfied: MarkupSafe>=2.0 in d:\python365\venv\lib\site-packages (from Jinja2>=3.1.2->flask) (2.1.3)
Installing collected packages: Werkzeug, itsdangerous, importlib-metadata, colorama, blinker, click, flask
Successfully installed Werkzeug-2.3.7 blinker-1.6.2 click-8.1.7 colorama-0.4.6 flask-2.3.3 importlib-metadata-6.8.0 itsdangerous-2.1.2

[notice] A new release of pip available: 22.3.1 -> 23.2.1
[notice] To update, run: python.exe -m pip install --upgrade pip
(venv) PS D:\python365>

3.2 첫 번째 플라스크 프로그램

설치가 완료되면 첫 번째 Flask 프로그램을 작성하세요. 다음은 기본 웹 애플리케이션을 생성하고 특정 URL에 액세스할 때 "Hello, Flask!" 메시지를 반환하는 간단한 Flask 프로그램 예제입니다.

from flask import Flask

# 创建 Flask 应用实例
app = Flask(__name__)

# 定义路由和视图函数
@app.route('/')
def hello():
    return "Hello, Flask!"

# 如果这个文件是作为主程序运行,则执行下面的代码
if __name__ == '__main__':
    app.run(debug=True)

출력은 다음과 같습니다.

e79209d5762a41fdab5d3537d54c6623.png

다음과 같이 브라우저에 http://127.0.0.1:5000 URL을 입력합니다.

911b746ab006476cb35b177f9357c22b.png

 위 코드는 Python의 Flask 프레임워크를 사용하여 간단한 웹 애플리케이션을 만듭니다.

        먼저 Flask 라이브러리를 가져와야 합니다. 그런 다음 현재 모듈 이름을 매개변수로 사용하여 Flask 애플리케이션 인스턴스를 만듭니다 ​__name__.

        다음으로 데코레이터를 사용하여 ​@app.route('/')URL 경로를 지정하는 경로를 정의합니다. 이 예에서 루트 경로 '/'는 애플리케이션의 기본 페이지를 나타냅니다.

​hello()그런 다음 사용자가 루트 경로에 액세스할 때 호출될         보기 함수를 정의합니다 . 이 함수는 사용자에 대한 응답으로 "Hello, Flask!"라는 문자열을 반환합니다.

        마지막으로 ​app.run()메서드를 통해 애플리케이션을 실행하고, 로컬 서버를 시작하고, HTTP 요청을 수신하고 해당 결과를 반환합니다. 설정을 통해 ​debug=True디버그 모드를 활성화할 수 있습니다.

        이 파일을 메인 프로그램으로 실행하면 해당 ​app.run()문장이 실행되고, 애플리케이션이 시작되며, 디버깅 정보가 터미널에 출력된다.

3.3 라우팅

      Flask에서 라우팅은 특정 URL 경로를 해당 보기 기능과 연결하는 데 사용됩니다. 라우팅은 사용자가 다른 URL에 액세스할 때 요청을 처리하기 위해 어떤 보기 기능을 실행해야 하는지 결정합니다. 경로는 데코레이터를 사용하여 정의할 수 있습니다 @app.route().

다음은 다양한 상황에 대한 경로 정의의 몇 가지 예입니다.

3.3.1 기본 라우팅

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Welcome to the homepage!"

         이 예에서는 사용자가 루트 경로에 액세스하면 /이름이 지정된 보기 함수가 호출되어 index()"홈페이지에 오신 것을 환영합니다!"라는 메시지를 반환합니다.

3.3.2 동적 라우팅

        경로의 변수 부분을 사용하여 URL의 다양한 값을 캡처할 수 있습니다. 이러한 변수는 보기 함수에 매개변수로 전달됩니다.

@app.route('/user/<username>')
def show_user_profile(username):
    return f"User: {username}"

이 예에서 사용자가 /user/johndoe와 같은 경로에 액세스하면 show_user_profile()보기 함수가 호출되고 매개변수는 username값을 수신합니다 "johndoe".

3.3.3 HTTP 메소드

GET, POST, PUT, DELETE 등과 같은 다양한 HTTP 메서드를 지정하여 다양한 요청을 처리할 수 있습니다.

@app.route('/submit', methods=['POST'])
def submit_form():
    return "Form submitted successfully!"

        이 예에서는 /submit사용자가 POST 메서드를 사용하여 경로에 액세스할 때만 보기 함수가 호출됩니다 submit_form().

일반적인 HTTP 메서드 및 지침:

bbe5163800064ec4baf9df3e75c635a9.png

3.3.4 여러 경로를 뷰 함수에 바인딩

더 많은 액세스 옵션을 제공하기 위해 동일한 보기 기능에 여러 다른 경로를 바인딩할 수 있습니다.

@app.route('/')
@app.route('/home')
@app.route('/index')
def homepage():
    return "Welcome to the homepage!"

여기서는 사용자가 루트 경로에 접근하는지 , /아니면 뷰 함수를 호출할지를 호출하게 됩니다 ./home/indexhomepage()

3.3.5 액세스 URL 매개변수로의 라우팅

        뷰 함수에서 URL 매개변수에 접근할 수 있으며, 이러한 매개변수는 Flask에 의해 자동으로 구문 분석되어 뷰 함수에 전달됩니다.

from flask import request

@app.route('/profile')
def user_profile():
    username = request.args.get('username')
    return f"User profile: {username}"

     샘플 코드는 /profile사용자가 path에 액세스할 때 user_profile()이름이 지정된 보기 함수를 호출하는 경로를 정의합니다. 이 보기 함수에서는 request개체를 사용하여 usernameURL 매개변수의 값을 얻은 다음 사용자 이름이 포함된 메시지를 반환합니다.

3.3.6 기본값을 사용한 동적 라우팅

@app.route('/user/<username>/<int:age>')
def user_profile(username, age=18):
    return f"User: {username}, Age: {age}"

 이 예에서 age매개변수의 기본값은 18입니다. 이는 /user/johndoe가 아닌 를 통해 액세스 할 수 있음을 의미합니다 /user/johndoe/25.

3.3.7 다양한 데이터 유형을 사용한 동적 라우팅

@app.route('/item/<int:item_id>')
def get_item(item_id):
    return f"Item ID: {item_id}"

        여기서는 item_id정수형의 값만 매칭되며, 접근하면 /item/123정수 item_id123이 전달된다.

다음은 일반적인 상황에 대한 경로 정의의 몇 가지 예입니다. 경로를 적절하게 정의하면 논리적으로 명확하고 액세스하기 쉬운 웹 애플리케이션을 구축할 수 있습니다. 경로 정의는 @app.route()데코레이터 바로 아래에 배치되어야 하며 그 뒤에 해당 뷰 기능 정의가 와야 합니다.

3.4 정적 파일

        Flask에서 정적 파일은 스타일 시트, JavaScript 파일, 이미지 등과 같이 동적으로 생성할 필요가 없는 리소스를 참조합니다. 이러한 파일은 요청이 있을 때마다 서버에서 생성되지 않지만 클라이언트 브라우저에 직접 반환됩니다. Flask는 정적 파일 처리를 위한 특수 라우팅 및 구성을 제공합니다.

        기본적으로 Flask는 정적 파일을 저장하기 위해 애플리케이션 루트 디렉터리에 static이름이 지정된 폴더를 만듭니다. static/css스타일시트 및 JavaScript 파일 과 같은 다양한 유형의 정적 리소스를 구성하기 위해 하위 폴더를 만들 수 있습니다 static/js.

Flask에서 정적 파일을 처리하는 기본 단계는 다음과 같습니다.

  1. 프로젝트 루트 디렉터리에 정적 파일을 저장할 static폴더를 만듭니다. 예를 들어 다양한 유형의 정적 리소스를 구성하기 위해 하위 폴더를 만들 수 있습니다 static/css.static/js

  2. 이 함수를 사용하여 url_for()정적 파일에 대한 URL을 생성하세요. 이 기능은 구성에 따라 올바른 URL을 생성하여 정적 파일이 올바르게 액세스되도록 합니다.

다음은 Flask에서 정적 파일을 처리하는 방법을 보여주는 간단한 예입니다.

from flask import Flask, render_template, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

이 예에서는 render_template('index.html')정적 파일을 로드해야 할 수 있는 템플릿을 렌더링하는 데 함수가 사용됩니다. 예를 들어 템플릿에 스타일시트를 로드하려면 다음을 수행합니다.

<!DOCTYPE html>
<html>
<head>
    <title>Flask Static Files</title>
    <link rel="stylesheet" href="{
   
   { url_for('static', filename='css/style.css') }}">
</head>
<body>
    <h1>Hello, Flask!</h1>
</body>
</html>

         이 예에서는 url_for('static', filename='css/style.css')올바른 정적 파일 URL이 생성됩니다. 'static'Flask의 기본 정적 파일 디렉터리이며 'css/style.css'이 디렉터리에 대한 상대 경로입니다.

url_for()다양한 환경에서 올바르게 액세스할 수 있도록 정적 파일에 대한 URL을 생성하려면         템플릿에서 을 사용하세요 . 이렇게 하면 Flask 애플리케이션에서 정적 파일을 효율적으로 처리할 수 있습니다.

3.5 템플릿

        Flask에서 템플릿은 동적 데이터를 HTML 페이지로 렌더링하여 페이지 콘텐츠를 동적으로 생성하는 데 사용됩니다. Flask는 Jinja2 템플릿 엔진을 통합하여 HTML에 Python 코드를 삽입하여 데이터를 렌더링할 수 있습니다. 이 접근 방식은 비즈니스 로직을 인터페이스에서 분리하고 코드의 유지 관리성을 향상시킵니다.

Flask에서 템플릿을 사용하는 기본 단계는 다음과 같습니다.

  1. 템플릿 파일을 저장할 프로젝트 루트 디렉터리에 templates폴더를 만듭니다. 이러한 템플릿 파일은 Jinja2 구문을 사용할 수 있습니다.

  2. render_template()템플릿을 렌더링하고 데이터를 전달하려면 보기 함수의 함수를 사용하세요 .

  3. 템플릿에 동적 콘텐츠와 제어 구조를 포함하려면 Jinja2 구문을 사용하세요.

다음은 Flask에서 템플릿을 사용하는 방법을 보여주는 간단한 예입니다.

  1. templates이름이 지정된 폴더와 index.html그 안에 이름이 지정된 템플릿 파일을 만듭니다 .

templates/index.html문서 내용:

<!DOCTYPE html>
<html>
<head>
    <title>Flask Template Example</title>
</head>
<body>
    <h1>Hello, {
   
   { name }}!</h1>
    <p>Today is {
   
   { date }}</p>
</body>
</html>

render_template()템플릿을 렌더링하고 데이터를 전달하는 함수를 사용하는 Flask 애플리케이션을 만듭니다 .

from flask import Flask, render_template
import datetime

app = Flask(__name__)

@app.route('/')
def index():
    current_date = datetime.datetime.now()
    return render_template('index.html', name='Flask User', date=current_date)

if __name__ == '__main__':
    app.run()

    이 예에서는 템플릿이 render_template('index.html', name='Flask User', date=current_date)렌더링되고 및 변수가 index.html전달됩니다 . 템플릿에서 동적 콘텐츠를 삽입하는 데 사용할 수 있습니다 . 브라우저에서 애플리케이션의 루트 경로를 방문하면 "Hello, Flask User!"와 현재 날짜가 표시된 페이지가 표시됩니다.namedate{ { variable_name }}

        이는 단순한 Flask 템플릿 예제일 뿐이며 조건문, 루프, 필터 등과 같은 템플릿에서 더 많은 Jinja2 기능을 사용하여 더 복잡한 동적 페이지를 구축할 수 있습니다.

рекомендация

отblog.csdn.net/qq_35831906/article/details/132578291