This release is still in beta and is not yet released. All information in this documentation section is subject to change.
Route Prefixes
Previously you had to append all routes with a / character. This would look something like:
Get('/some/url')
You can know optionally prefix this without a / character:
Get('some/url')
URL parameters can now optionally be retrieved from the controller definition
Previously we had to do something like:
defshow(self,view: View,request: Request): user = User.find(request.param('user_id'))return view.render('some.template',{'user': user})
Now we can optionally get the parameter from the method definition:
defshow(self,user_id,view: View): user = User.find(user_id)return view.render('some.template',{'user': user})
Added a storage manager and disk storage drivers
This is used as a wrapper around I/O operations. It will also be a wrapper around the upload drivers and moving files around and other file management type operations
Async driver now can be specified whether to use threading or processing
We can now specify directly in the configuration file whether or not the threading or multiprocessing for the async type operations.
Added new HTTP Verbs
We added 4 new HTTP verbs: HEAD, CONNECT, OPTIONS, TRACE. You import these and use them like normal:
JSON error responses
If the incoming request is a JSON request, Masonite will now return all errors as JSON
Rearranged Drivers into their own folders
This is more of an internal change for Core itself.
Craft serve command defaults to auto-reloading
Before we had to specify that we wanted the server to auto-reload by specifying a -r flag:
Now we can just specify the serve command it will default to auto-reloading:
You can now specify it to NOT auto-reload by passing in 1 of these 2 commands:
Added Accept(*) to drivers
By default you can only upload image files because of security reasons but now you can disable that by doing an accept(*) option:
We moved from pytest to unittests for test structures.
Added a better way to run database tests
Added a new DatabaseTestcase so we can properly setup and teardown our database. This works for sqlite databases by default to prevent your actual database from being destroyed.
The back view helper now defaults to the current path
Before in templates we had to specify a path to go back to but most of the time we wanted to go back to the current path.
We built a new validation library from scratch and completely ripped out the old validation code. Any current validation code will need to be updated to the new way.
There were a lot of needless computations behind done to constantly recompile regex that has already been compiled before. Now all routes are responsible for compiling their own regex when they are constructed. This offsets a lot of computations before the server even boots. This is a huge performance boost.
Added Container Remembering
The container can now remember previous objects it has already resolved. This can lead to a performance boost of 10 - 15x when it comes to container resolving.
Added with_errors to the request class
Previous we had to flash errors to the session and then redirect back. Now we can do both at the same time.
This takes this code example:
Now we can do this:
Added the concept of publishing
In order to assist in package development, it is now easier to publish assets like migrations, routes, and commands from your package and into the developers application
Added a new JWT driver for authentication
Previously every request required a database call. Now you can set the driver to jwt and it will store all the user information into a jwt token, encrypted as a cookie and continuously fetch the information from the token instead of calling the database on every request.
{
"error": {
"exception": "Invalid response type of <class 'set'>",
"status": 500,
"stacktrace": [
"/Users/joseph/Programming/core/bootstrap/start.py line 38 in app",
"/Users/joseph/Programming/core/masonite/app.py line 149 in resolve",
"/Users/joseph/Programming/core/masonite/providers/RouteProvider.py line 92 in boot",
"/Users/joseph/Programming/core/masonite/response.py line 105 in view"
]
}
}