python - Django RequestFactory 添加 HTTP_X_FORWARDED_FOR

标签 python django python-3.x unit-testing

我有这个代码块,我正在尝试为其编写测试:

def get_client_ip(req):
    """
    This is used to get the user's IP from the request object.

    """
    x_forwarded_for = req.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = req.META.get('REMOTE_ADDR', "unknown")
    return ip

到目前为止,我已经能够测试 if 语句的 else 部分。
这是我的测试目前的样子:
def test_get_client_ip(self):
    """
    Test the get Client IP fuction with a request.

    """
    # Create an instance of a GET request.
    request = self.factory.get('/home')
    ip = get_client_ip(request)
    self.assertEqual(ip, '127.0.0.1')

我将如何将“HTTP_X_FORWARDED_FOR”添加到请求对象的 META 中?

最佳答案

事实证明,您可以使用 get 方法中的 extra 关键字为 get 请求提供额外的 header :
https://docs.djangoproject.com/en/2.0/topics/testing/tools/#django.test.Client.get

工作代码如下:

    def test_get_client_ip(self):
    """
    Test the get Client IP fuction with a request.

    """
    # Create an instance of a GET request.
    request = self.factory.get('/home')
    ip = get_client_ip(request)
    self.assertEqual(ip, '127.0.0.1')
    request = self.factory.get('/home', HTTP_X_FORWARDED_FOR="8.8.8.8")
    ip = get_client_ip(request)
    self.assertEqual(ip, '8.8.8.8')

关于python - Django RequestFactory 添加 HTTP_X_FORWARDED_FOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498944/

相关文章:

python - 将向量数组与矩阵数组相乘;返回向量数组?

python - 时间序列数据框 python 上的 ARIMA 建模

python - mongodb到python稀疏矩阵,如何让它更快?

python - 将模板分成几个部分并包含每个部分不好吗?

python - 如何使用 python-docx 将存储在数据库中的二进制图像插入到 word 文档中?

python - 如何以变形/漏勺形式更改标签内容?

站点根页面的 Django 和 Nginx try_files 403

django - 如果这条RECORD不存在,是否保存?

python - 如何在字符串中大写偶数字母和小写奇数字母?

python-3.x - 使用出现次数最多的像素值的图像过滤器