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