今回は初心者向けに簡単なメモアプリを作成していきます。
GoogleColabを使うので、だれでも簡単に実行できます!
アプリのメイン部分
まずはメイン部分のapp.pyの中身を作っていきます。
最後にコードをまとめて実行もできるようにGoogleColabのリンクを記載しています。
app.pyは以下のように記入します。
from flask import Flask, render_template, request, send_file
import qrcode
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate_qr_code', methods=['POST'])
def generate_qr_code():
data = request.form.get('data')
if data:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save('/content/qrcode_app/static/qr_code.png')
return render_template('index.html', qr_code=True)
else:
return "QRコードを生成するためのデータを入力してください。"
@app.route('/download_qr_code')
def download_qr_code():
try:
# 保存されたQRコード画像のファイルパス
qr_code_path = '/content/qrcode_app/static/qr_code.png'
# ダウンロードファイル名を設定
download_filename = 'qr_code.png'
return send_file(
qr_code_path,
as_attachment=True,
download_name=download_filename
)
except Exception as e:
return str(e)
if __name__ == "__main__":
import sys
args = sys.argv
app.run(debug=True, port=args[1])
また、対応するHTMLとしてtemplates/index.htmlに以下のように記述します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRコード生成アプリ</title>
</head>
<body>
<h1>QRコード生成アプリ</h1>
<form method="POST" action="/generate_qr_code">
<label for="data">QRコードに変換するデータ:</label>
<input type="text" name="data" id="data" required>
<button type="submit">QRコードを生成</button>
</form>
<br>
{% if qr_code %}
<h2>生成されたQRコード:</h2>
<!-- qr_code変数をbase64エンコードした画像を表示 -->
<img src="{{ url_for('static', filename='qr_code.png') }}" alt="QRコード">
<br>
<!-- QRコードをダウンロードするリンク -->
<a href="/download_qr_code">ダウンロード</a>
{% endif %}
</body>
</html>
コードの解説
このコードは、Flaskを使用してQRコードを生成し、それをダウンロードできるシンプルなWebアプリケーションを作成するものです。以下に、コードの主要な部分を説明します。
ライブラリのインポート:
from flask import Flask, render_template, request, send_file
import qrcode
Flask
はWebアプリケーションのフレームワークです。render_template
はHTMLテンプレートをレンダリングするために使用されます。request
はHTTPリクエストデータを取得するために使用されます。send_file
はファイルをダウンロードするために使用されます。qrcode
はQRコードを生成するためのライブラリです。
Flaskアプリケーションの設定:
app = Flask(__name__)
- Flaskアプリケーションを作成します。
ルートURL(‘/’)の処理:
@app.route('/')
def index():
return render_template('index.html')
- ルートURLにアクセスしたときに、’index.html’テンプレートを表示します。
QRコードを生成するルート(‘/generate_qr_code’)の処理:
@app.route('/generate_qr_code', methods=['POST'])
def generate_qr_code():
data = request.form.get('data')
if data:
# QRコードを生成する処理
# ...
return render_template('index.html', qr_code=True)
else:
return "QRコードを生成するためのデータを入力してください。"
- POSTメソッドで’/generate_qr_code’にアクセスしたとき、フォームからデータを取得します。
- データが提供された場合、QRコードを生成し、それを ‘qr_code.png’ として保存します。その後、’index.html’テンプレートを表示してQRコードを表示します。
- データが提供されない場合、エラーメッセージを表示します。
QRコードをダウンロードするルート(‘/download_qr_code’)の処理:
@app.route('/download_qr_code')
def download_qr_code():
try:
# 保存されたQRコード画像のファイルパス
qr_code_path = '/content/qrcode_app/static/qr_code.png'
# ダウンロードファイル名を設定
download_filename = 'qr_code.png'
return send_file(
qr_code_path,
as_attachment=True,
download_name=download_filename
)
except Exception as e:
return str(e)
- ‘/download_qr_code’にアクセスしたとき、QRコード画像をダウンロード可能な形式で送信します。
HTMLの詳細
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRコード生成アプリ</title>
</head>
<body>
- この部分はHTML文書の基本的な設定を行っています。
<!DOCTYPE html>
: HTMLドキュメントの種類を指定します。<html lang="en">
: HTML文書の言語を設定します。<head>
セクション: ページのメタデータを含むセクションです。<meta charset="UTF-8">
: 文字エンコーディングをUTF-8に設定します。<meta name="viewport" content="width=device-width, initial-scale=1.0">
: レスポンシブデザインをサポートし、画面幅に合わせてスケーリングするためのビューポート設定を行います。<title>QRコード生成アプリ</title>
: ページのタイトルを設定します。
<h1>QRコード生成アプリ</h1>
<form method="POST" action="/generate_qr_code">
<label for="data">QRコードに変換するデータ:</label>
<input type="text" name="data" id="data" required>
<button type="submit">QRコードを生成</button>
</form>
<br>
- この部分はアプリケーションのユーザーインターフェースを定義しています。
<h1>QRコード生成アプリ</h1>
: ページの大見出しを表示します。<form>
要素: データ入力フォームを表示します。method="POST"
: フォームの送信方法をPOSTに設定します。action="/generate_qr_code"
: フォームデータが送信されるURLを指定します。<label>
要素: フォームフィールドのラベルを表示します。<input>
要素: ユーザーからのテキスト入力を受け付けます。name
属性はデータの識別子です。required
属性は必須フィールドであることを示します。<button>
要素: フォームの送信をトリガーするボタンを表示します。
{% if qr_code %}
<h2>生成されたQRコード:</h2>
<!-- qr_code変数をbase64エンコードした画像を表示 -->
<img src="{{ url_for('static', filename='qr_code.png') }}" alt="QRコード">
<br>
<!-- QRコードをダウンロードするリンク -->
<a href="/download_qr_code">ダウンロード</a>
{% endif %}
</body>
</html>
- この部分はQRコードの表示とダウンロード用の要素を制御します。
{% if qr_code %}
: 条件文で、qr_code
変数が存在する場合に以下の要素を表示します。<h2>生成されたQRコード:</h2>
: 生成されたQRコードのセクションの見出しを表示します。<img>
要素: QRコード画像を表示します。src
属性はQRコード画像のファイルパスを指定します。<a>
要素: QRコードをダウンロードするためのリンクを提供します。href
属性はダウンロードURLを指定します。
このHTMLテンプレートは、QRコード生成アプリのユーザーインターフェースを定義し、ユーザーがデータを入力し、QRコードを生成して表示またはダウンロードできるようにします。