見出し画像

Python flaskとは?

Flaskとは? - マイクロフレームワークの王様!

Flaskは、Pythonで書かれた軽量なWebアプリケーションフレームワークです。その名の通り、Webアプリケーションの開発において、軽快なステップで進めることができる魔法の杖のような存在です。このnoteでは、Flaskの仕組みを完全に理解するために、以下の内容について例を用いて分かりやすく解説します。


Flaskの基本

Flaskを使ってWebアプリケーションを作るためには、まずはFlaskライブラリをインストールしましょう。ターミナルで以下のコマンドを実行してください。

pip install flask

次に、Flaskアプリケーションの基本的な構造を見てみましょう。以下のコードは、シンプルなFlaskアプリケーションの例です。

from flask import Flask
app = Flask(__name__)

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

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

このアプリケーションは、`/` というURLにアクセスすると、「Hello, World!」というメッセージを表示します。これがFlaskの基本です。

ルーティングとビュー

Flaskでは、`@app.route` デコレータを使ってURLと関数を関連付けることができます。これを「ルーティング」と呼びます。関連付けられた関数は「ビュー関数」と呼ばれ、リクエストに応じた処理を行います。

例えば、以下のコードは、`/hello/<name>` というURLにアクセスすると、`name` に応じた挨拶を返すビュー関数を定義しています。

@app.route('/hello/<name>')
def hello(name):
    return f'Hello, {name}!'

テンプレートエンジン

Flaskでは、Jinja2というテンプレートエンジンを使ってHTMLを動的に生成することができます。テンプレートを使うことで、コードの再利用性が向上し、開発効率が向上します。

以下のコードは、`/welcome` にアクセスすると、Jinja2テンプレートを使ってHTMLを返すビュー関数の例です。

from flask import render_template

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

`templates` ディレクトリにある `welcome.html` ファイルの内容は以下の通りです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome, {{ name }}!</h1>
</body>
</html>

フォームとデータベース

Flaskでは、フォームやデータベースと連携して、ユーザーからの入力を受け取ったり、データを永続化したりすることができます。Flask-WTFという拡張機能を使って、簡単にフォームを作成できます。また、Flask-SQLAlchemyを使って、様々なデータベースと連携することができます。

以下のコードは、ユーザー名とパスワードを受け取るフォームを作成し、データベースに保存するビュー関数の例です。

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from flask_sqlalchemy import SQLAlchemy

# フォームの定義
class LoginForm(FlaskForm):
    username = StringField('Username')
    password = PasswordField('Password')

# データベースの設定
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

# データベースモデルの定義
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, password=form.password.data)
        db.session.add(user)
        db.session.commit()
        return 'User registered successfully!'
    return render_template('login.html', form=form)

拡張機能

Flaskは、様々な拡張機能を使って機能を拡張することができます。例えば、Flask-Loginを使って認証機能を実装したり、Flask-Mailを使ってメール送信機能を追加したりできます。

エラーハンドリング

Flaskでは、エラーが発生した場合に適切な処理を行うことができます。例えば、404エラーが発生した場合に、独自のエラーページを表示することができます。

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

デプロイ

Flaskアプリケーションをインターネットに公開するためには、デプロイが必要です。FlaskアプリケーションをGunicornやuWSGIといったWSGIサーバーにデプロイし、NginxやApacheといったリバースプロキシサーバーで受けることが一般的です。また、HerokuやAWSなどのクラウドサービスを使って簡単にデプロイすることもできます。


このnoteでは、Flaskの基本的な仕組みや機能について例を用いて解説しました。Flaskは非常に柔軟で強力なフレームワークであり、これらの機能を組み合わせることで、様々なWebアプリケーションを作成することができます。ぜひ、このnoteを参考にして、Flaskで独自のWebアプリケーションを開発してみてください!

この記事が気に入ったらサポートをしてみませんか?