Masonite 熟悉步骤小记录 (四、模型创建)

模型创建

(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 协议》,转载必须注明作者和本文链接

不要试图用百米冲刺的方法完成马拉松比赛。

本帖由 Galois 于 3天前 加精
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!