向請求新增資料
Django 使得在檢視中使用請求新增額外資料變得非常容易。例如,我們可以解析請求的 META 上的子域,並使用中介軟體將其作為請求的單獨屬性附加。
class SubdomainMiddleware:
def process_request(self, request):
"""
Parse out the subdomain from the request
"""
host = request.META.get('HTTP_HOST', '')
host_s = host.replace('www.', '').split('.')
request.subdomain = None
if len(host_s) > 2:
request.subdomain = host_s[0]
如果你將中介軟體資料新增到請求中,則可以進一步訪問新新增的資料。在這裡,我們將使用已解析的子域來確定組織正在訪問你的應用程式的內容。此方法對於使用帶有萬用字元子域的 DNS 設定部署的應用程式非常有用,這些子域都指向單個例項,訪問該應用程式的人員希望蒙皮版本依賴於訪問點。
class OrganizationMiddleware:
def process_request(self, request):
"""
Determine the organization based on the subdomain
"""
try:
request.org = Organization.objects.get(domain=request.subdomain)
except Organization.DoesNotExist:
request.org = None
請記住,當中介軟體彼此依賴時,順序很重要。對於請求,你需要將依賴中介軟體放在依賴項之後。
MIDDLEWARE_CLASSES = [
...
'myapp.middleware.SubdomainMiddleware',
'myapp.middleware.OrganizationMiddleware',
...
]