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
于 4年前 加精