Masonite 2.3
Masonite 2.3
前言
Masonite 2.3带来了许多代码和生活质量的改进。 没有什么重大的突破性变化,这取决于应用程序的结构,并且不需要太多的升级工作。
以下是Masonite 2.3中的更改列表:
组件变化
一些较大的更改包括Masonite使用SEMVER版本控制的所有软件包,而Masonite自从Masonite启动以来仍在使用ROMVER。
Masonite也不需要通过Masonite要求为您提供任何软件包,而是将要求放到新项目的requirements.txt
文件中。 允许软件包在Masonite的主要升级之外发布新的Majors。 因此,我们可以更快地开发新的程序包并改进。
删除TestSuite类
masonite.testing.TestSuite
类已被完全删除。 这是一个过时的类,已经被masonite.testing.TestCase
类代替。 TestSuite
类基本上是对较早的测试功能前的某些命令的包装。
删除了SassProvider
有很多关于使用Pythonlibsass
提供程序编译sass的局限性。 由于这些限制,Masonite 2.3将完全删除它。
默认添加了Laravel Mix
Laravel Mix文件附带由craft创建的新安装的应用程序。
增加Responsable 类
Responsable类可以被任何类继承并在控制器中返回。 如果该类具有get_response()
方法,则使用该方法呈此类。 View
类将以这种方式起作用。
不再支持 Python 3.4
Masonite支持4个Python版本,由于Python 3.8发布,Masonite仅将对 Python 3.5, 3.6, 3.7和3.8支持。当Python3.9发布,Python3.5支持将会被移除。
如果你需要之前Python版本,依然可以选择使用Masonite之前对应支持版本。
重写验证模块
Masonite移除Auth
类,新增Guard
类。这些类负责用户登录和注销。
更佳注册guards方式,来为你节省切换工作。
切换Auth
类为Guard
类
这里变更极小,为你升级应用节省了大量的时间。现在任何需要使用Auth
类地方,会被Guard
类取代。两个类使用方法相同,这样切换后也能正常工作。
(这种切换可能会在 Masonite 2.4版本中移除)
新增 AuthenticationProvider
改进的身份验证已经抽象到自己的服务提供者里,我们需要在服务提供者指明。
导入Auth类同时加入相关脚手架
Auth
类现在包含一些路由。这样web.py
文件会更加整洁。
移除容器管理模块
现在容器并不绑定这些模块。需要导入。
新增断言
新增一批断言方法使得测试方法更加简短。包括assertHasHeader
和assertNotHasHeader
。
新增下载类
新增下载类,使得下载下载和显示文件更加容易。
使用类似如下:
from masonite.response import Download
def show(self):
return Download('/path/to/file', force=True)
这里会强制文件下载,如果不传递force参数,文件内容会直接在浏览器中显示。
加入 Preset 命令
你现在可以执行craft preset
命令来生成一些.json
文件和示例模板。目前支持react
,vue
和boostrap
支持。
解析查询字符串变更
之前 /?filter[name]=Joe&filter[user]=bob&email=user@email.com
解析为:
{
"filter[name]": "Joe",
"filter[user]": "Bob",
"email": "user@email.com"
}
现在为:
{
"email": "user@email.com",
"filter": {
"name": "Joe",
"user": "bob"
}
}
原始解析方法已经不支持了。还提供了query_parse
辅助函数帮你手动使用Masonite方式来解析字符串。
改善容器集合
容器提供了collect
方法让你可以根据提供的关键字来获取相关类:
app.collect('*Command')
这里将获取所有以Command
结尾的类。
你还可以获取传入的所有子类:
from masonite.response import Responsable
app.collect(Responsable)
这里将获取所有 Responsable
的子类
不仅是类,同样也支持实例。
移动 masonite/
目录到src/masonite
目录
这里对于用户来说是完全透明的,允许安装任意同名第三方包,防止命名冲突。
改变WSGI服务器处理响应结果方式
Masonite现在响应结果为字节类型。允许不同类使用不同方式来处理响应结果。
之前Masonite最终响应内容都会转换为字符串,但是一些(例如文件下载)又需要将内容转换为字节。如果你需要处理原始响应内容,现在要注意其类型为字节而不是字符串了。
调度器
调度器有一些变更
新方法
提供了一些新方法 every
, every_minute
, every_15_minutes
, every_30_minutes
, every_45_minutes
, daily
, hourly
, weekly
, monthly
.
这些方法可以在服务提供者里执行,或者命令里执行,提供更强的调度能力。
新的调度辅助类
服务提供者现在继承自CanSchedule
类,提供了self.call()
方法(用来调度命令)和self.schedule()
方法(用来调度任务)。
这些辅助方法用来提供服务提供者绑定更加容易。
新的调度方式
现在可以调度任务和命令更简单。除了作为Task属性,你还可以在服务提供者里配置:
def register(self):
self.call('your:command --flag').daily().at('9:00')
self.call('your:command --flag').every_minute()
self.schedule(YourJob()).every('3 days')
发行时还会记录其他一些方法。
命名变更
我们将scheduler
命名空间变更为masonite.scheduler
。所以你需要重构你的导入。
可邮件类
支持可邮件类,帮助包装一些逻辑来构建邮件。例如:
mail.to('user@example.com').reply_to('admin@me.com').template('emails.register').subject(..).send()
现在可以这样
from app.mailables import RegistrationMailable
mail.mailable(RegistrationMailable()).send()
控制器返回元组方式指定状态码
通过返回一个元组,可以指定期响应状态码。
之前需要这样:
def show(self, response: Response):
return response.json({'error': 'unauthenticated'}, status=401)
现在我们如下就可以实现:
def show(self):
return {'error': 'unauthenticated'}, 401
WSGI服务器返回结果变更
之前响应内容为字符串,现在变更为字节(例如返回图片或者PDF)。它将会在WSGI需要响应之前就发生了(或者没有)。所以应用程序有略微变更。
Masonite CLI 内置在内核
CLI工具无需安装了。在安装了masonite就提供了craft工具。从这就可以创建一个新项目了。
变更 Masonite API 命名控件
Masonite API 之前为from api.
,现在使用 from masonite.api.
命名控件。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。