响应

未匹配的标注

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)

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

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

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~