Masonite 熟悉步驟小記錄 (七、更新和刪除文章)

Galois發表於2020-06-07

控制器中新增方法

masapp/app/http/controllers/PostController.py

def update(self, view: View, request: Request):
    post = Post.find(request.param('id'))

    return view.render('update', {'post': post})

def store(self, request: Request):
    post = Post.find(request.param('id'))

    post.title = request.input('title')
    post.body = request.input('body')

    post.save()

    return 'post updated'

新建檢視模版

(env) $ craft view update

masapp/resources/templates/update.html

<form action="/post/{{ post.id }}/update" method="POST">
    {{ csrf_field }}

    <label for="">Title</label>
    <input type="text" name="title" value="{{ post.title }}"><br>

    <label>Body</label>
    <textarea name="body">{{ post.body }}</textarea><br>

    <input type="submit" value="Update">
</form>

新增路由

masapp/routes/web.py

Get('/post/@id/update', 'PostController@update'),
Post('/post/@id/update', 'PostController@store'),

完成了「控制器方法、檢視、路由」這三樣的編寫之後,可以進入 localhost:8000/post/1/update 裡面重新輸入一些文字進去,再在資料庫中的 posts 資料表中重新整理檢視,可以看到之前的文章儲存內容被改變了。

刪除方法

masapp/app/http/controllers/PostController.py

from masonite.request import Request
...

def delete(self, request: Request):
    post = Post.find(request.param('id'))

    post.delete()

    return 'post deleted'

masapp/routes/web.py

Get('/post/@id/delete', 'PostController@delete'),

在這裡使用了 GET 路由,使用 POST 方法會更好,但是為簡單起見,先用 GET 吧。

masapp/resources/templates/update.html 模版中增加一個刪除連結 <a href="/post/{{ post.id }}/delete"> Delete </a>

<form action="/post/{{ post.id }}/update" method="POST">
    {{ csrf_field }}

    <label for="">Title</label>
    <input type="text" name="title" value="{{ post.title }}"><br>

    <label>Body</label>
    <textarea name="body">{{ post.body }}</textarea><br>

    <input type="submit" value="Update">

    <a href="/post/{{ post.id }}/delete"> Delete </a>
</form>

現在可以去 localhost:8000/post/1/update 刪除文章了,找到剛才新增的連結並點選,這相當於訪問了刪除文章的頁面:localhost:8000/post/1/delete 可以在資料庫中重新整理 posts 資料表,會發現 id=1 的文章消失了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章