Django4.0 進(jìn)階測(cè)試主題-測(cè)試與多主機(jī)名

2022-03-17 11:52 更新

?ALLOWED_HOSTS ?配置在運(yùn)行測(cè)試時(shí)被驗(yàn)證。這允許測(cè)試客戶端區(qū)分內(nèi)部和外部 URL。

支持多租戶或根據(jù)請(qǐng)求的主機(jī)改變業(yè)務(wù)邏輯的項(xiàng)目,以及在測(cè)試中使用自定義主機(jī)名的項(xiàng)目,必須在 ?ALLOWED_HOSTS ?中包含這些主機(jī)。

第一個(gè)選項(xiàng)是將主機(jī)添加到你的配置文件中。例如,?docs.djangoproject.com? 的測(cè)試套件包括以下內(nèi)容:

from django.test import TestCase

class SearchFormTestCase(TestCase):
    def test_empty_get(self):
        response = self.client.get('/en/dev/search/', HTTP_HOST='docs.djangoproject.dev:8000')
        self.assertEqual(response.status_code, 200)

同時(shí)配置文件包含項(xiàng)目支持的域列表:

ALLOWED_HOSTS = [
    'www.djangoproject.dev',
    'docs.djangoproject.dev',
    ...
]

另一個(gè)選項(xiàng)是使用 ?override_settings()? 或 ?modify_settings()? 將所需的主機(jī)添加到 ?ALLOWED_HOSTS? 中。這個(gè)選項(xiàng)在不能打包自己配置文件的獨(dú)立應(yīng)用中可能比較好,或者對(duì)于域列表不是靜態(tài)的項(xiàng)目(例如,多租戶的子域)。例如,你可以為域 ?http://otherserver/? 寫一個(gè)測(cè)試,如下所示:

from django.test import TestCase, override_settings

class MultiDomainTestCase(TestCase):
    @override_settings(ALLOWED_HOSTS=['otherserver'])
    def test_other_domain(self):
        response = self.client.get('http://otherserver/foo/bar/')

當(dāng)運(yùn)行測(cè)試時(shí),禁用 ?ALLOWED_HOSTS ?檢查ALLOWED_HOSTS = ['*']?,可以防止測(cè)試客戶端在遵循重定向到外部 URL 時(shí)發(fā)出有用的錯(cuò)誤信息。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)