Masonite 熟悉步驟小記錄 (四、模型建立)

Galois發表於2020-06-07

模型建立

(env) $ craft model Post

注意⚠️,這裡使用了單數形式。

現在會生成一個模型檔案 masapp/app/Post.py

from config.database import Model

class Post(Model):
    pass

如果表名用的不是複數形式而是單數形式或其它形式末尾沒有 ‘s’ 的形式,可以在這裡指定表名,比如我的表名叫做 ‘blog’:

from config.database import Model

class Post(Model):
    __table__ = 'blog'

預設情況下 Qrator 的安全措施防止批次分配,因此需要明確指定需要填充的列:

from config.database import Model

class Post(Model):
    __fillable__ = ['title', 'author_id', 'body']

在遷移中建立 foreign key(外來鍵),在模型中建立這種對映關係:

from config.database import Model
from orator.orm import belongs_to

class Post(Model):
    __fillable__ = ['title', 'author_id', 'body']

    @belongs_to('author_id', 'id')
    def author(self):
        from app.User import User
        return User

一些模型可能會相互依賴,因此通常最好像上述那樣在關係內執行匯入,以防止任何迴圈匯入的可能性。ORM
修改 blog 的前端模版檔案(用於建立的 URL 將位於 /blog/create):
masapp/resources/templates/blog.html

<form action="/blog/create" method="POST">
    {{ csrf_field }}

    <input type="name" name="title">
    <textarea name="body"></textarea>
</form>

為了確保使用者在進入這個頁面之前是登陸的狀態可以修改下這個模版:

{% if auth() %}
    <form action="/blog/create" method="POST">
        {{ csrf_field }}

        <label> Title </label>
        <input type="name" name="title"><br>

        <label> Body </label>
        <textarea name="body"></textarea>

        <input type="submit" value="Post!">
    </form>
{% else %}
    <a href="/login">Please Login</a>
{% endif %}

auth() 是一個檢視幫助器函式,要麼返回當前使用者,要麼返回 None。
Masonite 用的是 Jinja2 模版。

靜態樣式

masapp/static/ 裡建立一個 blog.css 檔案:
masapp/static/blog.css

html {
    background-color: #ddd;
}

現在可以將這個樣式檔案 masapp/static/blog.css 引入到模版 blog.html 了:

<link  href="/static/blog.css"  rel="stylesheet">
{% if auth() %}
    <form action="/blog/create" method="POST">
        {{ csrf_field }}

        <label> Title </label>
        <input type="name" name="title"><br>

        <label> Body </label>
        <textarea name="body"></textarea>

        <input type="submit" value="Post!">
    </form>
{% else %}
    <a href="/login">Please Login</a>
{% endif %}

Javascript 也是一樣,比如這樣:

<link href="/static/blog.css" rel="stylesheet">
{% if auth() %}
    <form action="/blog/create" method="POST">
        {{ csrf_field }}

        <label> Title </label>
        <input type="name" name="title"><br>

        <label> Body </label>
        <textarea name="body"></textarea>

        <input type="submit" value="Post!">
    </form>
{% else %}
    <a href="/login">Please Login</a>
{% endif %}

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

相關文章