请求

未匹配的标注

Masonite里的请求和响应生成结构良好的响应供浏览器读取和渲染。请求类用于获取所有传入的cookies,headers,链接、路径、请求方式和其它传入的数据。

Cookies

虽然请求类和响应类都有headers和cookies,但是在大多数的实例中,都应当通过请求类来获取cookies和headers,通过响应类来设置cookies和headers。

你可以通过这个简单的方式来获取cookies:

from masonite.request import Request
#..

def show(self, request: Request):
  request.cookie('Accepted-Cookies')

它将会从传入的请求头中获取cookies.

你也可以在请求中设置cookies:

from masonite.request import Request
#..

def show(self, request: Request):
  request.cookie('Accepted-Cookies', 'True')

需要注意的是,在请求中设置的cookies不会作为响应的一部分返回,因此,从一个请求到另一个请求的过程中cookies并不会被继承。

Headers

虽然请求和响应都有headers和cookies,但是在大多数的实例中,都应当通过请求类来获取cookies和headers,通过响应类来设置cookies和headers。

你可以通过这个简单的方式来获取header:

from masonite.request import Request
#..

def show(self, request: Request):
  request.header('X-Custom')

你也可以在请求类中设置header:

from masonite.request import Request
#..

def show(self, request: Request):
  request.header('X-Custom', 'value')

需要注意的是,在请求中设置的headers不会作为响应的一部分返回。

路径

你可以获取当前的请求 URI:

from masonite.request import Request
#..

def show(self, request: Request):
  request.get_path() #== /dashboard/1

你可以获取当前的请求方法:

from masonite.request import Request
#..

def show(self, request: Request):
  request.get_request_method() #== PUT

你可以检查当前路径是否包含 glob 样式模式:

from masonite.request import Request
#..

def show(self, request: Request):
  # URI: /dashboard/1/users
  request.contains("/dashboard/*/users") #== True

你可以从主机获取当前子域:

from masonite.request import Request
#..

def show(self, request: Request):
  # URI: work.example.com
  request.get_subdomain() #== work

你可以获取当前主机:

from masonite.request import Request
#..

def show(self, request: Request):
  # URI: work.example.com
  request.get_host() #== example.com

输入

输入可以来自任何类型的请求方法。在 Masonite 中,无论是哪种请求方法,获取输入都是相同的。

要获取输入,我们可以这样做:

from masonite.request import Request
#..

def show(self, request: Request):
  # GET /dashboard?user_id=1
  request.input('user_id') #== 1

如果输入不存在,你可以传入默认值:

from masonite.request import Request
#..

def show(self, request: Request):
  # GET /dashboard
  request.input('user_id', 5) #== 5

路由参数

路由参数是在路由中指定并从 URL 捕获的参数:

如果你有这样的路线:

Route.get('/dashboard/@user_id', 'DashboardController@show')

你可以像这样获取 @user_id 参数的值:

from masonite.request import Request
#..

def show(self, request: Request):
  # GET /dashboard?user_id=1
  request.param('user_id') #== 1

用户

作为获取用户的便捷方式,如果用户已登录,你可以直接在请求类上执行此操作:

from masonite.request import Request
#..

def show(self, request: Request):
  # GET /dashboard?user_id=1
  request.user() #== <app.User.User>

如果用户未通过身份验证,则这将设置为 none

IP 地址

你可以通过添加 IpMiddleware 到项目的 HTTP 中间件来获取发出请求的 IP 地址(ipv4):

# Kernel.py
from masonite.middleware import IpMiddleware

class Kernel:
    http_middleware = [
      # ...
      IpMiddleware
    ]

然后你可以使用 ip() 助手函数:

def show(self, request: Request):
    request.ip()

按以下顺序从各种 HTTP 请求头中检索 IP 地址:

  • HTTP_CLIENT_IP
  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_X_CLUSTER_CLIENT_IP
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • REMOTE_ADDR

通过解析不同的标头找到的第一个非私有和非保留 IP 地址将由助手函数返回。

使用的 header 及其顺序可以通过覆盖 IpMiddleware 并更改 headers 属性:

class CustomIpMiddleware(IpMiddleware):
    headers = [
      "HTTP_CLIENT_IP",
      "REMOTE_ADDR"
    ]

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

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

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

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

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


暂无话题~