LoginSignup
0
1

More than 1 year has passed since last update.

【python】勉強メモ 速習Flask⑤

Last updated at Posted at 2022-12-27

はじめに

今回は、登録された記事の削除処理を行います。
以下の記事の続きとなります。
【python】勉強メモ 速習Flask①
【python】勉強メモ 速習Flask②
【python】勉強メモ 速習Flask③
【python】勉強メモ 速習Flask④

削除処理について

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

「削除」ボタンをクリック
Flask-23.PNG

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1