シンプルな Pastebin を Python Flask でつくる。
Muhammad
2024 年 7 月 5 日
Python と Flask でシンプルな Pastebin サービスを作成する
このブログ投稿では、Python と Flask を使用してシンプルな Pastebin サービスを構築します。Pastebin は、プレーン テキストまたはコード スニペットを一定期間保存するために使用される人気の Web アプリケーションです。ここでは、ユーザーがテキストを貼り付け、プログラミング言語を選択し、貼り付けを共有するための URL を取得できる基本バージョンを作成します。これに関する YouTube ビデオも作成しました。こちら でご覧いただけます。
はじめに
アプリケーションの作成を開始する前に、環境を設定しましょう。環境を設定するには、次の手順に従います。
まず、プロジェクト ディレクトリに仮想環境を作成します。
python -m venv venv
仮想環境を作成したら、それをアクティブ化し、このプロジェクトで使用する必要なライブラリをすべてインストールします。
pip install Flask shortuuid pygments
また、各貼り付けに一意の ID を生成するために `shortuuid` を使用し、構文の強調表示には `pygments` を使用します。
必要なライブラリをすべてインストールしたので、必要なファイルとフォルダーを作成しましょう。
mkdir -p pastes templates static && touch index.py templates/index.html static/styles.css
フォルダ構造は次のようになります。
pastebin/
│
├── app.py
├── pastes/
├── templates/
│ └── index.html
└── static/
└── styles.css
`pastes` ディレクトリには、各貼り付けのテキスト ファイルが格納されます。templates ディレクトリには HTML テンプレートが含まれ、static ディレクトリにはスタイル設定用の CSS が含まれます。
環境がセットアップされたので、次はコーディングです。
コードの記述
コードを見てみましょう。`index.py` という名前のファイルを作成し、次のコードを追加します:
Flask を作成したら、`templates/index.html` に HTML テンプレートを作成し、`static/style.css` に `style.css` を作成します。
`templates/index.html`
`static/style.css`
アプリケーションが作成されたので、実行する前に、コードを分解して動作を理解してみましょう。
コードの分解
まず、必要なライブラリとモジュールをインポートします。 `Flask` は Web フレームワーク、`shortuuid` は一意の ID を生成するために使用され、`Pygments` は構文の強調表示に使用されます。また、`pastes/` を保存するためのディレクトリも設定しました。
from flask import Flask, request, render_template, abort
import shortuuid
import os
from pygments import highlight
from pygments.lexers import get_lexer_by_name, get_all_lexers
from pygments.formatters import HtmlFormatter
app = Flask(__name__)
PASTE_DIR = 'pastes'
if not os.path.exists(PASTE_DIR):
os.makedirs(PASTE_DIR)
次に、構文強調表示のために Pygments でサポートされているすべての利用可能なプログラミング言語を取得し、それらをタプルのソートされたリストとして返す関数を記述します。
def get_language_options():
return sorted([(lexer[1][0], lexer[0]) for lexer in get_all_lexers() if lexer[1]])
次に、アプリケーションのメイン ルートを記述します。リクエスト メソッドが POST の場合 (つまり、ユーザーがフォームを送信する場合)、コンテンツと言語が一意の ID を持つ新しいファイルに保存されます。新しい貼り付けの URL が生成され、ユーザーに表示されます。リクエスト メソッドが GET の場合、フォームがレンダリングされるだけです。
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
content = request.form['content']
language = request.form['language']
paste_id = shortuuid.uuid()
file_path = os.path.join(PASTE_DIR, paste_id)
with open(file_path, 'w') as f:
f.write(f"{language}\n{content}")
paste_url = request.url_root + paste_id
return render_template('index.html', paste_url=paste_url, languages=get_language_options())
return render_template('index.html', languages=get_language_options())
このルートは、特定の貼り付けの表示を処理します。貼り付けファイルを読み取り、pygments を使用して構文の強調表示を適用し、強調表示されたコンテンツをレンダリングします。
@app.route('/<paste_id>')
def view_paste(paste_id):
file_path = os.path.join(PASTE_DIR, paste_id)
if not os.path.exists(file_path):
abort(404)
with open(file_path, 'r') as f:
language = f.readline().strip()
content = f.read()
lexer = get_lexer_by_name(language, stripall=True)
formatter = HtmlFormatter(linenos=True, cssclass="source")
highlighted_content = highlight(content, lexer, formatter)
highlight_css = formatter.get_style_defs('.source')
return render_template('index.html', paste_content=highlighted_content, highlight_css=highlight_css)
すべてがどう機能するかを理解したら、次のコマンドを使用してアプリケーションを実行するだけです
`python index.py`
結論
Python と Flask を使用して、シンプルな Pastebin サービスを構築しました。このサービスでは、ユーザーはテキストを貼り付け、プログラミング言語を選択し、一意の URL で貼り付けを共有できます。貼り付けの有効期限、ユーザー認証、貼り付けをより効率的に保存するためのデータベースなどの機能を追加することで、このプロジェクトを拡張できます。
フィードバックがある場合は、以下にコメントを残してください。公開コメントを希望しない場合は、いつでも メール で私に送信できます。
アナウンス
1 年前に YouTube チャンネルを開始しました。このような興味深い内容のビデオ シリーズを作成してほしい場合は、お気軽に 登録 してください。
Python コンサルティングも受け付けています。興味深い Python プロジェクトや技術に関するアドバイスが必要な場合は、いつでも メール を送信できます。
最後に、この記事を読んでいただき、私の仕事にご支援いただき、誠にありがとうございます。
この記事が気に入った場合は、コーヒーを買っ てくれる ことで、いつでも私の仕事にご支援いただけます。あなたのサポートは私にとって何よりの喜びです。また、X でこれを共有される場合は、必ず私にタグを付けてください
@muhammad_o7。また、LinkedIn で私をフォローしてください。