コンテンツにスキップ

第3章 基本部分

1 app.py

webアプリケーションの本体となる app.py を作成します。 まずは、インポートを記述します。あらかじめ、必要となるものを全て読み込ませます。appを生成し、セッションキーを設定します。

import os
from flask import Flask,render_template,request,redirect,session,flash
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import uuid

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///photo.db'
app.secret_key = b'\x83\xc9L:\xdf\x8a\x97\xb9\xef\xc4}G\t\xed\x1b('
db = SQLAlchemy(app)

このときapp.secret_keyにセッションの暗号化キーを記述します。セッションはログイン情報など、ページをまたいで保持する必要があるデータです。これはブラウザに保存されますので暗号化キーで暗号化して保存します。

2 データベースの定義

次にデータベースのクラスを定義します。UserクラスとToukouクラスをコピーしてきます。

class User(db.Model):
    uid = db.Column(db.Integer, primary_key=True)
    uname = db.Column(db.String(255))
    upass = db.Column(db.String(255))

    toukou = db.relationship('Toukou', backref='user', lazy=True)

    def __init__(self,uname, upass):
        self.uname = uname
        self.upass = upass

class Toukou(db.Model):
    tid = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.Integer, db.ForeignKey("user.uid"))
    image = db.Column(db.String(255))
    mes = db.Column(db.String(255))
    hi = db.Column(db.DateTime, default=datetime.now())

    def __init__(self,uid,image,mes):
        self.uid = uid
        self.image = image
        self.mes = mes

3 トップページ

関数 indexでindex.htmlを開くようにします。最後に app.runで実行します。

@app.get('/')
def index():
    return render_template("index.html")


app.run(debug=True)

実行し、http://127.0.0.1:5000 にアクセスし、index.htmlが表示されていることを確認します。

4 テンプレート

index.htmlでは以下の部分しか書かれていません。

{% extends "base.html" %}
{% block title %}写真投稿サイト{% endblock %}
{% block main %}

 <h1>投稿一覧</h1>


{% endblock %}

にも関わらず、なぜ「写真投稿サイト」や「新規登録」「ログアウト」の部分が表示されるかというと、extends "base.html"のところでhtmlを継承するように指定しているからです。

このhtmlの継承を使うと、base.htmlを読み込んで、そこにある{% block 名前 %} ~{% endblock %} までのところを置き換えてくれます。

base.htmlには全ページで共通部分のhtmlが書かれています。 ですから、index.html ではそのページ固有の部分のみを書いていけばいいわけです。