プログラミング

FlaskでURL短縮サービス

Flaskを使用してリンク短縮アプリケーションを構築するための完全かつ包括的なガイドを以下に示します。このガイドでは、PythonのFlaskフレームワークを使用して、リンクを短縮するシンプルなウェブアプリケーションを作成し、SQLiteデータベースを使用してリンク情報を管理します。


必要な環境と依存関係

まず、FlaskとSQLiteを使用するために、以下のパッケージをインストールする必要があります。これを行うには、以下のコマンドを使用して仮想環境を作成し、依存関係をインストールします。

bash
# 仮想環境の作成 python3 -m venv venv # 仮想環境のアクティブ化 source venv/bin/activate # Mac/Linuxの場合 venv\Scripts\activate # Windowsの場合 # 必要なパッケージのインストール pip install flask flask_sqlalchemy

これで、FlaskとSQLite用のORMであるSQLAlchemyをインストールしました。


アプリケーション構造

アプリケーションは以下のような構造になります:

csharp
url_shortener/ ├── app.py # メインのアプリケーションファイル ├── templates/ # HTMLテンプレートを格納するディレクトリ │ ├── index.html # メインページ │ └── result.html # リンク短縮結果ページ ├── static/ # 静的ファイル(CSS、JavaScript) └── database.db # SQLiteデータベース

Flaskアプリケーションの作成

次に、app.pyという名前でFlaskアプリケーションのメインファイルを作成します。

python
from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy import random import string app = Flask(__name__) # SQLiteデータベースの設定 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # データベースのインスタンス化 db = SQLAlchemy(app) # URL短縮データベースモデル class URL(db.Model): id = db.Column(db.Integer, primary_key=True) original_url = db.Column(db.String(2048), nullable=False) short_url = db.Column(db.String(8), unique=True, nullable=False) def __repr__(self): return f'{self.original_url}>' # データベースの作成 with app.app_context(): db.create_all() # URL短縮のためのランダム文字列生成関数 def generate_short_url(length=8): characters = string.ascii_letters + string.digits return ''.join(random.choice(characters) for _ in range(length)) # メインページのルート @app.route('/') def index(): return render_template('index.html') # URL短縮の処理 @app.route('/shorten', methods=['POST']) def shorten(): original_url = request.form.get('original_url') # URLが空でないか確認 if not original_url: return "URLを入力してください", 400 # 既に同じURLが存在する場合 existing_url = URL.query.filter_by(original_url=original_url).first() if existing_url: return render_template('result.html', short_url=existing_url.short_url) # 新しい短縮URLの生成 short_url = generate_short_url() # URLをデータベースに保存 new_url = URL(original_url=original_url, short_url=short_url) db.session.add(new_url) db.session.commit() return render_template('result.html', short_url=short_url) # 短縮URLをリダイレクトするルート @app.route('/') def redirect_to_url(short_url): url_entry = URL.query.filter_by(short_url=short_url).first_or_404() return redirect(url_entry.original_url) if __name__ == '__main__': app.run(debug=True)

説明

  1. Flaskの設定: SQLALCHEMY_DATABASE_URIでSQLiteのデータベースを設定し、SQLALCHEMY_TRACK_MODIFICATIONSは不要な変更追跡を無効にしています。
  2. URLモデル: URLクラスで、original_urlshort_urlを管理します。short_urlは一意でなければなりません。
  3. データベースの作成: db.create_all()を使用して、最初にデータベースを作成します。
  4. 短縮URL生成関数: generate_short_urlは、指定された長さのランダムな英数字文字列を生成します。
  5. ルートの定義: メインページ(/)、URL短縮ページ(/shorten)、短縮URLリダイレクト(/short_url)のルートを定義します。

HTMLテンプレートの作成

次に、templatesディレクトリ内に2つのHTMLテンプレートを作成します。

1. index.html

html
html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>URL短縮サービスtitle> head> <body> <h1>URL短縮サービスh1> <form action="/shorten" method="POST"> <label for="original_url">元のURL:label> <input type="text" name="original_url" id="original_url" required> <button type="submit">短縮button> form> body> html>

2. result.html

html
html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>短縮URLの結果title> head> <body> <h1>短縮URLが作成されましたh1> <p>短縮されたURL: <a href="/{{ short_url }}" target="_blank">{{ short_url }}a>p> <p><a href="/">新しいURLを短縮するa>p> body> html>

アプリケーションの実行

すべての設定が完了したら、次のコマンドを使用してFlaskアプリケーションを起動します。

bash
python app.py

ブラウザで http://127.0.0.1:5000 にアクセスし、URLを短縮することができます。


結論

このチュートリアルでは、Flaskを使ってURL短縮アプリケーションを作成し、SQLiteデータベースを使用して短縮URLとその元のURLを保存する方法を学びました。このアプリケーションはシンプルですが、必要に応じて機能を追加することができます(例: URLの有効期限設定、ユーザー認証機能など)。

Back to top button