技術共有

[初心者から熟練者までの Flask: レッスン 1: flask の基本的な紹介、flask を使用してプロジェクトをすばやく構築して実行する]

2024-07-12

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

  1. 新しいフレームワークをゼロから始めるにはどうすればよいでしょうか?
  2. flask のような軽量フレームワークと django のような重量フレームワークの違いは何ですか?
  3. Web 開発プロセスにおける一般的なデータベース ORM 操作用。
  4. flask を学習するプロセスに従い、新しいフレームワーク (Sanic、FastAPI) を自分で学習して理解します。

古い一般的に使用されているフレームワーク: django (3.0 以降の非同期をサポート)、flask (2.0 以降の非同期をサポート)、tornado (非同期)、twisted (非同期)

一般的に使用される新しいフレームワーク: FastAPI、sanic、django4.0 (現在のバージョンは同期から非同期への変換中)、flask2.0 (現在のバージョンは同期から非同期への変換中)

サニック:https://sanicframework.org/zh/guide/

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

フラスコ

Flask は 2010 年に誕生しました。これは、Werkzeug ツールボックスに基づいて Armin Ronacher によって Python 言語で書かれた軽量の Web 開発フレームワークです。

Flask 自体はカーネルに相当し、他のほとんどすべての機能には拡張機能 (電子メール拡張機能 Flask-Mail、ユーザー認証 Flask-Login、データベース Flask-SQLAlchemy) が必要であり、これらはすべてサードパーティ拡張機能を使用して実装する必要があります。たとえば、Flask 拡張機能を使用して、ORM、フォーム検証ツール、ファイルのアップロード、本人確認などを追加できます。 Flask はデフォルトのデータベースを使用しません。MySQL または NoSQL を選択できます。

Flask の WSGI ツールボックスは Werkzeug (ルーティング モジュール) を使用し、テンプレート エンジンは Jinja2 を使用します。 Itsdangrous (トークン暗号化モジュール)、Click (ターミナル コマンド管理ツール)、および Flask カーネル自体、これら 5 つのコア モジュールが Flask フレームワークを形成します。

公式サイト:https://flask.palletsprojects.com/en/2.0.x/

公式ドキュメント: https://dormousehole.readthedocs.io/en/latest/index.html

Flask で一般的に使用されるサードパーティの拡張機能パッケージ:

  • Flask-SQLAlchemy: オペレーティング データベース、ORM;
  • Flask-script: ターミナル スクリプト ツール、スキャフォールディング (廃止された、公式の組み込みスキャフォールディング: クリック)
  • Flask-merge: 移行データベースを管理します。
  • Flask-Session: 指定されたセッション保存方法。
  • Flask-Mail: 電子メール;
  • Flask-Login: 認証されたユーザーのステータス (django にはユーザーのログインと終了を実現するために使用される Auth モジュールが組み込まれています)
  • Flask-OpenID: 認証、OAuth (三者認証)
  • Flask-RESTful: REST API を開発するためのツール。
  • Flask JSON-RPC: json-rpc リモート サービス [プロセス] 呼び出しを開発する
  • Flask-Bable: 国際化とローカリゼーションのサポートと翻訳を提供します。
  • Flask-Moment: 日付と時刻をローカライズする
  • Flask-Admin: シンプルで拡張可能な管理インターフェイスのフレームワーク
  • Flask-Bootstrap: フロントエンドの Twitter Bootstrap フレームワークを統合します (フロントエンドとバックエンドは分離されており、管理サイトを除き、これは基本的に使用されません)
  • Flask-WTF: フォーム生成モジュール (フロントエンドとバックエンドが分離されており、管理サイト以外は基本的に使用されません)
  • Flask-Marshmallow: シリアル化 (djangorestframework のシリアライザーに似ています)

https://pypi.org/search/?c=Framework+%3A%3A+Flask を通じて、Flask によって公式に推奨されている拡張機能をさらに表示できます。

準備する

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

ここに画像の説明を挿入します

flask をインストールするには、次のコマンドを使用します。

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

ここに画像の説明を挿入します

フラスコプロジェクトを作成する

Django とは異なり、Flask には自動操作が提供されていないため、プロジェクトを開始するにはプロジェクト ディレクトリと管理ファイルを手動で作成する必要があります。

たとえば、プロジェクト ディレクトリ flaskdemo を作成し、そのディレクトリ内に manage.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