기술나눔

[Flask 초보자부터 숙련자까지: 1단원: 플라스크 기본 소개, 플라스크를 사용하여 프로젝트를 빠르게 빌드 및 실행]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

  1. 어떻게 처음부터 시작하여 새로운 프레임워크를 시작해야 할까요?
  2. 플라스크 같은 경량 프레임워크와 django 같은 헤비급 프레임워크의 차이점은 무엇인가요?
  3. 웹 개발 프로세스의 일반적인 데이터베이스 ORM 작업에 사용됩니다.
  4. 플라스크를 배우는 과정을 따라하며 새로운 프레임워크(Sanic, FastAPI)를 스스로 배우고 이해하세요.

일반적으로 사용되는 기존 프레임워크: django(3.0 이후 비동기 지원), 플라스크(2.0 이후 비동기 지원), tornado(비동기), Twisted(비동기)

일반적으로 사용되는 새로운 프레임워크: FastAPI, sanic, django4.0(현재 버전은 동기에서 비동기로 변환 중), 플라스크2.0(현재 버전은 동기에서 비동기로 변환 중)

Sanic:https://sanicframework.org/zh/guide/

FastAPI:https://fastapi.tiangolo.com/zh/tutorial/first-steps/

플라스크

Flask는 2010년에 탄생했습니다. Armin Ronacher가 Werkzeug 툴박스를 기반으로 Python 언어로 작성한 경량 웹 개발 프레임워크입니다.

Flask 자체는 커널과 동일하며 거의 모든 다른 기능에는 확장(이메일 확장 Flask-Mail, 사용자 인증 Flask-Login, 데이터베이스 Flask-SQLAlchemy)이 필요하며 모두 타사 확장으로 구현되어야 합니다. 예를 들어 Flask 확장을 사용하여 ORM, 양식 확인 도구, 파일 업로드, 신원 확인 등을 추가할 수 있습니다. Flask는 기본 데이터베이스를 사용하지 않습니다. MySQL 또는 NoSQL을 선택할 수 있습니다.

Flask의 WSGI 도구 상자는 Werkzeug(라우팅 모듈)를 사용하고 템플릿 엔진은 Jinja2를 사용합니다. Itsdangrous(토큰 암호화 모듈), Click(터미널 명령 관리 도구) 및 Flask 커널 자체, 이 다섯 가지 핵심 모듈이 Flask 프레임워크를 구성합니다.

공식 웹사이트: https://flask.palletsprojects.com/en/2.0.x/

공식 문서: https://dormousehole.readthedocs.io/ko/latest/index.html/ 최신 게시물

Flask에 일반적으로 사용되는 타사 확장 패키지:

  • Flask-SQLAlchemy: 운영 데이터베이스, ORM;
  • Flask-script: 터미널 스크립트 도구, 스캐폴딩(구식, 공식 내장 스캐폴딩: 클릭)
  • Flask-마이그레이션: 마이그레이션 데이터베이스를 관리합니다.
  • Flask-Session: 세션 저장 방법이 지정되었습니다.
  • Flask-Mail: 이메일;
  • Flask-Login: 인증된 사용자 상태(django에는 사용자 로그인 및 종료를 실현하는 데 사용되는 내장 인증 모듈이 있습니다)
  • Flask-OpenID: 인증, OAuth(3자 인증)
  • Flask-RESTful: REST API 개발을 위한 도구입니다.
  • Flask JSON-RPC: json-rpc 원격 서비스 [프로세스] 호출 개발
  • Flask-Bable: 국제화 및 현지화 지원과 번역을 제공합니다.
  • Flask-Moment: 날짜 및 시간 현지화
  • Flask-Admin: 간단하고 확장 가능한 관리 인터페이스를 위한 프레임워크
  • Flask-Bootstrap: 프론트엔드 트위터 부트스트랩 프레임워크 통합(프론트엔드와 백엔드가 분리되어 있으며 관리 사이트를 제외하면 기본적으로 사용되지 않는 것입니다)
  • Flask-WTF: 폼 생성 모듈(프론트엔드와 백엔드가 분리되어 있으며 관리 사이트를 제외하면 기본적으로 사용되지 않음)
  • Flask-Marshmallow: 직렬화(djangorestframework의 직렬 변환기와 유사)

https://pypi.org/search/?c=Framework+%3A%3A+Flask를 통해 플라스크에서 공식적으로 권장하는 더 많은 확장 프로그램을 볼 수 있습니다.

준비하다

# anaconda创建虚拟环境
conda create -n flask python=3.9
# 进入/切换到指定名称的虚拟环境,如果不带任何参数,则默认回到全局环境base中。
# conda activate  <虚拟环境名称>
conda activate flask 
# 退出当前虚拟环境
conda deactivate
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

여기에 이미지 설명을 삽입하세요.

플라스크를 설치하려면 다음 명령을 사용하십시오.

pip install flask -i https://pypi.douban.com/simple
  • 1

여기에 이미지 설명을 삽입하세요.

플라스크 프로젝트 생성

Django와 달리 Flask는 자동 작업을 제공하지 않기 때문에 프로젝트를 시작하려면 프로젝트 디렉터리와 관리 파일을 수동으로 생성해야 합니다.

예를 들어, 프로젝트 디렉터리인 플라스크데모를 생성하고 해당 디렉터리에 관리.py를 생성합니다. pycharm에서 프로젝트를 열고 위에서 생성한 가상 환경을 지정합니다.

여기에 이미지 설명을 삽입하세요.

Flask 프레임워크에 대한 시작 항목 파일을 만듭니다.이름은 다음과 같습니다.app.py/run.py/main.py/index.py/manage.py/start.py

manage.py, 코드:

# 1. 导入flask核心类
from flask import Flask

# 2. 初始化web应用程序的实例对象
app = Flask(__name__)


# 4. 可以通过实例对象app提供的route路由装饰器,绑定视图与uri地址的关系
@app.route("/")
def index():
    # 5. 默认flask支持函数式视图,视图的函数名不能重复,否则报错!!!
    # 视图的返回值将被flask包装成响应对象的HTML文档内容,返回给客户端。
    return "<h1>hello flask</h1>"


if __name__ == '__main__':
    # 3. 运行flask提供的测试web服务器程序
    app.run(host="0.0.0.0", port=5000, debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

코드 분석:

# 导入Flask类
from flask import Flask

"""
Flask类的实例化参数:
import_name      Flask程序所在的包(模块),传 __name__ 就可以
                           其可以决定 Flask 在访问静态文件时查找的路径
static_path          静态文件存储访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path    静态文件的url访问路径,可以不传,默认为:/ + static_folder
static_folder        静态文件存储的文件夹,可以不传,默认为 static
template_folder  模板文件存储的文件夹,可以不传,默认为 templates
"""
app = Flask(__name__)

# 编写路由视图
# flask的路由是通过给视图添加装饰器的方式进行编写的。当然也可以分离到另一个文件中。
# flask的视图函数,flask中默认允许通过return返回html格式数据给客户端。
@app.route('/')
def index():
    # 返回值如果是字符串,被自动作为参数传递给response对象进行实例化返回客户端
    return "<h1>hello flask</h1>"

# 指定服务器IP和端口
if __name__ == '__main__':
    # 运行flask
    app.run(host="0.0.0.0", port=5000, debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26