响应
Masonite 中的请求和响应协同工作以形成一个格式良好的响应,浏览器可以读取和呈现该响应。 Response 类负责返回什么数据以及如何格式化。在这种情况下,响应可以包含 cookie 和 HTTP 响应头(headers)。 Request 类也可以有 cookie 和 HTTP 请求头(headers)。在大多数情况下,通常,当你必须获取 HTTP 请求头或 cookie 时,你应该在请求类上这样做,而当你设置 cookie 和 HTTP 头(header)时,你应该在响应类上这样做。
Cookies
响应类上的 Cookie 附加到响应并呈现为 HTTP 响应头 的一部分。你可能会从请求类中获取任何传入的 cookie,但如果你有理由可以从响应中获取它们:
from masonite.response import Response
def show(self, response: Response):
response.cookie("key")
你还可以在响应中设置 cookie:
from masonite.response import Response
def show(self, response: Response):
response.cookie("Accepted-Cookies", "True")
你还可以删除 cookie:
from masonite.response import Response
def show(self, response: Response):
response.delete_cookie("Accepted-Cookies")
重定向
你可以将用户重定向到任意数量的 URL。
首先,你可以重定向到一个简单的 URL:
from masonite.response import Response
def show(self, response: Response):
return response.redirect('/home')
你可以重定向回用户原来访问的位置:
from masonite.response import Response
def show(self, response: Response):
return response.back()
如果使用 back 方法作为表单请求的一部分,那么你还需要使用 back 视图助手:
<form>
{{ csrf_field }}
{{ back() }}
<input type="text">
...
</form>
你还可以通过路由名称重定向到路由:
from masonite.response import Response
def show(self, response: Response):
return response.redirect(name='users.home')
这将找到一个命名路由 users.home
,例如:
Route.get('/dashboard/@user_id', 'DashboardController@show').name('users.home')
如果 URL 需要,你也可以将参数传递给路由:
from masonite.response import Response
def show(self, response: Response):
return response.redirect(name='users.home', {"user_id", 1})
最后,你还可以将查询字符串参数传递给 url 或路由以重定向:
def show(self, response: Response):
return response.redirect(name='users.home', {"user_id", 1}, query_params={"mode": "preview"})
#== 将重定向到 /dashboard/1?mode=preview
带有成功提示的重定向
你可以通过将成功消息提示传递到会话中来重定向:
def show(self, response: Response):
return response.redirect('/home').with_success("Preferences have been saved !")
带错误提示的重定向
你可以通过将错误消息或错误消息提示传递到会话中来重定向:
def show(self, request: Request, response: Response):
return response.redirect('/home').with_errors("This account is disabled !")
你可以直接使用错误验证:
def show(self, request: Request, response: Response):
errors = request.validate({
"name": required
})
return response.redirect('/home').with_errors(errors)
带输入提示的重定向
你可以通过将表单输入提示传输到会话中来重定向,以便在出现错误时重新填充表单:
def show(self, request: Request, response: Response):
errors = request.validate({
"name": required
})
return response.redirect('/home').with_errors(errors).with_input()
Headers(HTTP 头信息)
HTTP 响应头是可以在响应中找到的 HTTP 头信息。 Masonite 会为你处理所有重要的响应头,但有时你希望设置自己的自定义响应头。
你想要获取的大多数传入 HTTP 头信息都可以在请求类中找到,但如果你需要在响应中获取任意 HTTP 头信息:
from masonite.response import Response
def show(self, response: Response):
response.header('key')
你想要返回的任何响应都应在响应类上设置:
from masonite.response import Response
def show(self, response: Response):
response.header('X-Custom', 'value')
这将在响应上设置 HTTP 头(headers)。
状态码
你可以简单地设置响应的状态:
from masonite.response import Response
def show(self, response: Response):
response.status(409)
文件下载
你还可以非常简单地下载图片、PDF 或其他文件资产:
def show(self, response: Response):
return response.download("invoice-2021-01", "path/to/invoice.pdf")
这将设置所需的所有正确相应的 Header 并在浏览器中响应处理对应文件。
设置名称时,将从文件类型中选择文件扩展名。此示例将下载名称为“invoice-2021-01.pdf”的发票
如果你想强制下载它,或者在响应时表现为自动下载文件,你可以添加一个 force
参数并将其设置为True
:
def show(self, response: Response):
return response.download("invoice-2021-01", "path/to/invoice.pdf", force=True)
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。