![見出し画像](https://assets.st-note.com/production/uploads/images/140322296/rectangle_large_type_2_e5800f7ea49c1d4753010b6c6f11d022.png?width=1200)
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アプリケーションを開発してみてください!