コンテンツにスキップ

第10章 削除

1 toukou.html

自分が投稿したもののみ、削除できるようにします。まず、削除のリンクをtoukou.htmlに作成します。

if文で、投稿のユーザIDがセッションのユーザIDと一致する場合、自分の投稿ですので削除のリンクを設置します。

{% if toukou.uid == session.uid %}
<div class="operation">
<a href="/del/{{toukou.tid}}" class="del">削除</a>
</div>
{% endif %}

2 app.py(確認画面)

app.py で削除確認画面を表示するdel_get関数を作成します。URLからtidを受け取り、tid から投稿テーブルを検索し、それをdel.htmlに渡します。

@app.get('/del/<tid>')
def del_get(tid):
    row = Toukou.query.get_or_404(tid)
    return render_template("del.html",toukou=row)

3 del.html

del.htmlでは削除の確認で、まず投稿内容を表示します。これは、投稿一覧の画面表示と同じです。ただし本文を表示します。また、その下にフォームで/del/投稿IDにpostで送信するようにします。

<div class="toukou">
    <div class="uname"><a href="/user/{{toukou.user.uid}}">{{toukou.user.uname}}</a></div>
    <div class="hi">{{toukou.hi}}</div>
    <div class="image">
        <img src="/static/{{toukou.image}}" class="">
    </div>
    <div class="mes">{{toukou.mes}}</div>
</div>

<form method="post" action="/del/{{toukou.tid}}">
    <input type="submit" value="削除">
</form>

4 app.py(削除処理)

app.pyで削除処理を書きます。受け取ったtidで投稿を削除します。また、アップロードされたファイルをos.remove で削除し、投稿一覧にリダイレクトします。

@app.post('/del/<tid>')
def del_post(tid):
    row = Toukou.query.get_or_404(tid)
    db.session.delete(row)
    db.session.commit()

    os.remove(os.path.dirname(__file__) + '/static/' + row.image)

    return redirect(f"/")

5 style.css

staticフォルダにあるstyle.cssにスタイルを設定します。 まず、削除を行うリンクを囲む.operationにスタイルを設定します。このあと、削除の他に編集のリンクも付加するため、それを横に並べるように flex を設定し、その間隔を1文字としています。

.operation {
    display: flex;
    gap: 1em;
    margin: 1em;
}

削除のリンクはボタン風にするためにまず、リンクの下線を消去し、枠線の内側に余白を付けます。枠線の角は丸くします。

.operation a {
    text-decoration: none;
    padding: 0.5em 1em;
    border-radius: 4px;
}

削除の背景色は赤色とし、文字色は白とします。

.operation .del {
    background-color: #f44336;
    color: white;
}