第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 ではそのページ固有の部分のみを書いていけばいいわけです。