【python】勉強メモ　速習Flask⑤


## はじめに
今回は、登録された記事の削除処理を行います。
以下の記事の続きとなります。
[【python】勉強メモ 速習Flask①](https://qiita.com/qiitataro/items/d9b4b44255ae5082838a)
[【python】勉強メモ 速習Flask②](https://qiita.com/qiitataro/items/682faa9749d596cb3496)
[【python】勉強メモ 速習Flask③](https://qiita.com/qiitataro/items/5f12300c4b238d2b6170)
[【python】勉強メモ 速習Flask④](https://qiita.com/qiitataro/items/ae5eca426fbf7d1bea83)

## 削除処理について
index.htmlとapp.pyを編集する。新たにdelete用にファイルを作成する必要は無し。
```index.html
{% extends "base.html" %}
{% block content %}
<h1>ブログアプリケーション</h1>

<a href="/create" role="button">新規作成画面</a>
{% for post in posts %}
<article>
    <h2>{{ post.title }}</h2>
    <a href="/{{post.id}}/update" role="button">編集</a>
    <!-- 削除ボタン作成 -->
    <a href="/{{post.id}}/delete" role="button">削除</a>
    <p>作成日時： {{ post.created_at }}</p>
    <p>{{ post.body }}</p>
</article>
{% endfor %}
{% endblock %}

```

```app.py
from flask import Flask
from flask import render_template
from flask import request
from flask import redirect
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pytz

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///blog.db"
db = SQLAlchemy(app)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title= db.Column(db.String(50), nullable=True)
    body = db.Column(db.String(300), nullable=True)
    created_at = db.Column(db.DateTime, nullable=False,default=datetime.now(pytz.timezone('Asia/Tokyo')))

# GETとPOSTを受け取れる様にする。
@app.route("/", methods=['GET', 'POST'])
def hello():
    # ページにアクセスしたら（HTTP GETでアクセスしたら）
    if request.method == 'GET':
        # DBに登録されたデーターを全てPostで取得する。取得したデーターは、postsに、リスト形式で格納される。
        posts = Post.query.all()
        # index.htmlに表示するため、posts=postsで、取得したデーターを渡す。
        return render_template('index.html', posts=posts)


@app.route("/create", methods=['GET', 'POST']) 
def create():
    if request.method == 'POST':
        title = request.form.get('title')
        body = request.form.get('body')

        post = Post(title=title, body=body)

        db.session.add(post)
        # 変更を保存
        db.session.commit()

        return redirect('/')
    else:
        return render_template('create.html')

# update処理を作成
@app.route("/<int:id>/update", methods=['GET', 'POST']) 
def update(id):
    post = Post.query.get(id)
    
    if request.method == 'GET':
        return render_template('update.html', post=post)
    
    # 更新ボタンが押されると、POSTが送信されるめ、eles移行が実行される
    else:
        post.title = request.form.get('title') # 書き換え
        post.body = request.form.get('body') # 書き換え
        
        # 不要なのでコメントアウト
        # post = Post(title=title, body=body)
        
        # db.session.add(post) 更新なので、addする必要はないため削除
        # commitだけすれば良い
        db.session.commit()

        return redirect('/')
        # return render_template('create.html')

# delete処理作成
# deleteは、POSTが流れることはないため、GETのみにする
@app.route("/<int:id>/delete", methods=['GET'])

def delete(id):
    post = Post.query.get(id)
    
    # delete処理
    db.session.delete(post)
    db.session.commit()
    
    return redirect('/')

```
ブラウザで、`127.0.0.1:5000`にアクセス。

![Flask-22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014502/1edf1759-9ac0-e13d-bc1f-bfb2ceb5f5bc.png)

「削除」ボタンをクリック
![Flask-23.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014502/0cd21d6a-ec22-0b88-a26d-735c409091b6.png)

記事が消えていれば成功です。