Craft 命令介绍

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

介绍

Craft 命令是功能非常强大的开发工具,可让您快速构建项目中的模型、控制器、视图、命令、服务提供程序等,这将几乎所有内容压缩为最简单的 craft 操作。在创建模板代码时,大幅度减少您重复性工作。 Masonite 将所有常见的开发任务压缩到一个命名空间中。

例如,在Django中,您可能需要执行以下操作:

$ django-admin startproject
$ python manage.py runserver
$ python manage.py migrate

Craft 将所有常用命令浓缩到自己的命名空间中。

$ craft new
$ craft serve
$ craft migrate

Masonite 的所有脚手架都可以手动完成(例如,手动创建一个控制器并导入 view 函数),但是 craft 命令工具可用于加快开发速度并减少重复开发工作。

命令

当在 masonite 目录之外使用 Craft 时,它将仅显示极少几个基本命令,例如 newinstall 命令。其他命令(例如用于创建控制器或模型的命令)是从 Masonite 项目本身加载的。

当在 Masonite 项目目录中运行 Craft 时,许多命令会加载到框架本身中并获取。这样,可以在后续版本上有效的处理特定于某个版本的命令,也可以加载第三方命令去扩展 craft 本身。

可用命令包含以下:

Tinker 命令

您可以通过运行以下命令对 Masonite 进行调试:

$ craft tinker

此命令将启动Python Shell,默认情况下也会导入容器。因此,我们可以这样调用:

Type `exit()` to exit.
>>> app
<masonite.app.App object at 0x10cfb8d30>
>>> app.make('Request')
<masonite.request.Request object at 0x10d03c8d0>
>>> app.collect("Mail*Driver")
{'MailSmtpDriver': <class 'masonite.drivers.MailSmtpDriver.MailSmtpDriver'>,
'MailMailgunDriver': <class 'masonite.drivers.MailMailgunDriver.MailMailgunDriver'>
}
>>> exit()

并在容器内部使用。在出现任何问题时验证是否将对象加载到了容器中,这将是一个非常有用的调试工具。

展示路由命令

另一个有用的命令是 show:routes 命令,该命令将显示可被访问的路由表:

$ craft show:routes

这将显示如下一个路由表:

========  =======  =======  ========  ============
Method    Path     Name     Domain    Middleware
========  =======  =======  ========  ============
GET       /        welcome
GET       /home    home
GET       /user 
POST      /create  user   
========  =======  =======  ========  ============

应用信息

如果您尝试调试应用程序或在 Slack 通道中需要帮助,它将对你查看系统和环境信息的时候有所帮助。在这种情况下,我们有一个简单的命令:

$ craft info

这个命令提供了当前系统的一些细节对你非常有用。运行这个命令将会提供一下信息:

Environment Information
-------------------------  ------------------
System Information         MacOS x86_64 64bit
System Memory              8 GB
Python Version             CPython 3.6.5
Virtual Environment        ✓
Masonite Version           2.0.6
Craft Version              2.0.7
APP_ENV                    local
APP_DEBUG                  True

在核心仓库中随时为您提供您任务有必要的其他信息。

创建身份验证系统

创建一个带有登录,注册和仪表盘系统的身份验证系统,只需要运行:

 $ craft auth

该命令将创建几个新的模板,控制器和路由,因此您不需要从头开始创建身份验证系统,尽管您可以。如果您需要自定义身份验证系统,此命令将为您提供脚手架,以便您可以进入这些新的控制器并修改成您想要的。

这些新的控制器并不是框架本身的一部分,而是您项目的一部分。不要将编辑这些控制器视为编辑框架源代码。

创建验证器

验证器是基于验证表单或请求输入的类。我们可以通过运行以下命令来创建验证器:

$ craft validator LoginValidator

请务必阅读 表单验证 文档,以了解有关表单验证的更多信息。

创建模型定义文档字符串

Masonite 使用 Orator,这是一种活动记录 ORM。如果您使用过其他 Python 框架,则您可能更熟悉 Data Mapper ORM,例如 Django ORM 或 SQLAlchemy 。这些 ORM 很友好,因为表中列的名称通常是类属性的名称。如果忘记了列的名称,通常可以查看模型来找到,但是如果模型看起来像:

class User(Model):
    pass

那么表结构并不明显。我们可以运行一个简单的命令来生成一个文档字符串,然后将其放入模型中:

$ craft model:docstring table_name

它将在终端中生成如下内容:

"""Model Definition (generated with love by Masonite)

id: integer default: None
name: string(255) default: None
email: string(255) default: None
password: string(255) default: None
remember_token: string(255) default: None
created_at: datetime(6) default: CURRENT_TIMESTAMP(6)
updated_at: datetime(6) default: CURRENT_TIMESTAMP(6)
customer_id: string(255) default: None
plan_id: string(255) default: None
is_active: integer default: None
verified_at: datetime default: None
"""

现在,我们可以将其复制并粘贴到您的模型中,并进行以下更改:

class User(Model):
    """Model Definition (generated with love by Masonite)

    id: integer default: None
    name: string(255) default: None
    email: string(255) default: None
    password: string(255) default: None
    remember_token: string(255) default: None
    created_at: datetime(6) default: CURRENT_TIMESTAMP(6)
    updated_at: datetime(6) default: CURRENT_TIMESTAMP(6)
    customer_id: string(255) default: None
    plan_id: string(255) default: None
    is_active: integer default: None
    verified_at: datetime default: None
    """
    pass

您还可以使用 -connection 选项指定要使用的连接。

$ craft model:docstring table_name --connection amazon_db

创建控制器

如果您希望创建控制器,请运行:

$ craft controller Dashboard

此命令将创建 app/http/controllers/DashboardController.py 控制器。按照惯例,所有控制器都应附加一个 「Controller」,因此 Masonite 会将「控制器」 附加到创建的控制器上。

您可以通过运行以下命令来创建不带 「Controller」 的控制器:

$ craft controller Dashboard -e

这将创建一个 app/http/controllers/Dashboard.py 控制器。注意,文件名未带 「Controller」。

-e--exact 的缩写。 两者都可以。

您还可以创建资源控制器,其中包括标准操作,例如显示,创建,更新等:

$ craft controller Dashboard -r

-r--resource 的缩写。两者都可以。

您可以将它们结合起来:

$ craft controller Dashboard -r -e

创建一个新项目

如果您想开始一个新项目,可以运行:

$ craft new project_name

这将下载 MasoniteFramework/masonite 库的 zip 文件,并将其解压缩到当前工作目录中。该命令将默认为最新版本的仓库。
您也可以指定一些选项。-version 选项将根据 MasoniteFramework/masonite 存储库中的发行版创建一个新项目。

$ craft new project_name --version 1.3.0

或者,您可以使用以下命令指定要创建新项目使用的分支:

$ craft new project_name --branch develop

创建新项目后,将具有一个包含所有项目依赖项的 requirements.txt 文件。除此文件外,还有一个 .env-example 文件,它是 .env 文件的样板。安装依赖项,将示例环境文件复制到 .env 文件,运行:

$ craft install

craft install 命令也将同时运行 craft key --store ,它会生成一个密钥并将其放置在.env 文件中。

创建迁移

所有框架都有一种创建迁移操作数据库表的方式。与其他 Python 框架相比,Masonite 使用的迁移方法略有不同,开发人员可以编辑迁移文件。这是对已存在的表进行迁移的命令:

$ craft migration name_of_migration --table users

如果要为尚不存在的表创建迁移(迁移将创建该表),则可以传递 -create 标志,如下所示:

$ craft migration name_of_migration --create users

这两个标志将创建稍微不同的迁移类型。

迁移

创建、编辑并准备好迁移文件之后,我们现在可以将其迁移到数据库中。要迁移所有未迁移的迁移,只需运行:

$ craft migrate

回滚并重建迁移

您还可以刷新和回滚所有迁移,然后重新迁移。

这实际上将重建整个数据库。

$ craft migrate:refresh

您也可以回滚所有迁移:

$ craft migrate:reset

最后,您可以仅回滚您尝试迁移的最后一组迁移

$ craft migrate:rollback

模型

如果要创建模型,可以运行:

$ craft model ModelName

这将在 app/ModelName 文件搭建模型并导入所需的所有内容。
您也可以在 app 文件夹指定特定的目录来创建模型:

$ craft model Models/ModelName

这将会创建一个路径为 app/Models/ModelName.py 的模型文件。

模型快捷操作

您还可以使用 -s 和 -m 同时创建种子或模型。

$ craft model ModelName -s -m

这是一下 3 个命令的快捷方式:

$ craft model ModelName
$ craft seed ModelName
$ craft migration create_tablename_table --create tablename

###创建服务提供者
服务提供者是 Masonite 真正强大的功能。如果您想创建自己的服务提供者,请运行:

$ craft provider DashboardProvider

这将创建一个 app/providers/DashboardProvider.py 服务提供者。

阅读更多 服务提供者 文档。

创建视图

视图是位于 resources/templates 中的html文件,可以通过运行以下命令轻松创建:

$ craft view blog

这个命令将会创建一个视图文件,路径为 resources/templates/blogView.html
您还可以在 resources / templates 目录下更深层次目录创建视图。

$ craft view auth/home

这将在 resources/templates/auth/homeView.html 下创建一个视图,但请记住,它不会为您创建目录。如果 auth 目录不存在,此命令将失败。

特别提醒: Masonite Version=2.3.7 版本,如果目录不存在会自动创建目录。

创建任务

任务被设计为加载到队列中。我们可以将耗时的任务封装成任务。然后,我们可以将此Job推送到队列中,以提升应用程序的性能,防止瓶颈和速度下降。

$ craft job SendWelcomeEmail

任务将放置在 app/jobs 目录中。有关更多信息,请参见 队列和任务 文档。

运行队列

Masonite 具有队列功能,可让您加载在上一节中创建的任务,然后异步运行它们,或将其发送给 RabbitMQ 等消息代理。您可以通过运行以下命令启动工作程序:

$ craft queue:work

您可以通过学习 队列任务 来了解更多.

您可以使用添加特定于 Masonite 的 integrations.py 文件来创建 PyPi 软件包。阅读 创建扩展包 文档来学习吧。要创建程序包样板,只需运行:

$ craft package name_of_package

创建命令

您可以搭建基本的命令样板文件:

$ craft command Hello

这将创建一个 HelloCommand.py 文件,路径为 app/commands/HelloCommand.py

运行 WSGI 服务器

您只需运行以下命令即可运行 WSGI 服务器:

$ craft serve

这样文件更改时,服务器自动重新加载。

您还可以将其设置为在文件更改时不自动重新加载:

$ craft serve --dont-reload

$ craft serve -d

如果您有未完成迁移的数据,Masonite 在启动服务时将提示运行 craft migration

实时重载

serve 命令还具有实时重载选项,该选项将刷新所有连接的浏览器,以便您可以更快地构建 jinja 模板的原型。

这不是写 Python 代码的好工具,有些 Python 代码更改仍可能需要刷新浏览器才能看到效果。

$ craft serve --live-reload

主机和端口

您可以使用 -b 绑定主机和使用 -p 绑定端口号。

$ craft serve -b 127.0.0.1 -p 8080

重载间隔

Masonite 附带了一个非常快速的自动重新加载开发服务器。默认情况下,文件更改检测与服务器重新加载之间会有1秒的延迟。这是一个很慢的重载间隔,大多数系统可以处理更快的间隔,同时仍然可以正确地管理进程PID的启动和终止。

您可以使用 -i 选项将间隔更改为小于1的值:

$ craft serve -r -i .1

您会发现计算机上的重新加载时间大大加快。如果您的计算机可以处理此间隔速度(这意味着您的计算机已正确启动并终止进程),则可以在开发过程中使用较小的间隔来安全地进行。

加密

Masonite 带有一种加密数据的方式,默认情况下,它会加密框架设置的所有 cookie。 Masonite使用 key 加密和解密数据。阅读 安全加密 文档以获取有关加密的更多信息。

生成一个密钥:

$ craft key

这将生成一个32位字符串,您可以将其粘贴到 .env 文件中的 KEY 值。

您还可以传递 -store 标志,该标志将自动将密钥添加到您的 .env 文件中:

$ craft key --store

每当您运行 craft install 时,都会运行此命令。

非常好!您现在已经是 Craft 命令行工具的高手。

测试

您也可以搭建基本的测试用例。您可以通过运行以下命令进行操作:

$ craft test NameOfTest

这将在 tests/ 目录中构建测试文件,您可以从那里将其移动到任意位置。

发布

Masonite 具有发布的概念,您可以将指定资源发布到开发人员的应用程序。他们可以进行微调,以更好地满足需求。

您可以通过运行以下命令发布特定的提供者程序:

$ craft provider ProviderName

您还可以选择指定标记:

Masonite Version=2.3.7 Craft Version =2.3.7 环境下,执行下边命令会报 The “–tag” option does not exist. 的错误。

$ craft provider ProviderName --tag name

您可以阅读更多有关发布的文档。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/th...

译文地址:https://learnku.com/docs/masonite/2.3/th...

上一篇 下一篇
贡献者:5
讨论数量: 0
发起讨论 查看所有版本


暂无话题~