Python 如何从视图或中间件获取模型的IP地址?

Python 如何从视图或中间件获取模型的IP地址?,python,django,python-3.x,django-models,django-views,Python,Django,Python 3.x,Django Models,Django Views,几个小时前,我遇到了一个基本问题,在尝试了很多例子之后,我决定问一个问题,但我仍然有一个错误 我的答案是,我想把用户的国家根据他的ip地址注册或其他查询 我的意思是ip地址将通过或我的中间件文件从视图函数中收集 我想这样做,但我想从我的视图或我说的中间件中获取ip地址 这是我从我的视图或我的中间件文件中获取ip地址的函数: def get_client_ip(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FO

几个小时前,我遇到了一个基本问题,在尝试了很多例子之后,我决定问一个问题,但我仍然有一个错误

我的答案是,我想把用户的国家根据他的ip地址注册或其他查询

我的意思是ip地址将通过或我的中间件文件从视图函数中收集

我想这样做,但我想从我的视图或我说的中间件中获取ip地址

这是我从我的视图或我的中间件文件中获取ip地址的函数:

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
       ip = request.META.get('REMOTE_ADDR')

    return ip
所以,一旦我得到了ip地址,让我们从我的角度说,我如何才能得到这个ip地址,我的模型来做这个过程下面

这就是我所期望的:

ip = '0.0.0.0'
readerone = GeoIP2()
readerone.country_name(ip)
visitor_info = readerone.city(ip)
dma_code = visitor_info['dma_code']
city = visitor_info['city']
continent_code = visitor_info['continent_code']
continent_name = visitor_info['continent_name']
country_code = visitor_info['country_code']
country = visitor_info['country_name']
latitude = visitor_info['latitude']
longitude = visitor_info['longitude']
postal_code = visitor_info['postal_code']
region = visitor_info['region']
time_zone = visitor_info['time_zone']

current_country = country
因此,当我通过ip地址获取国家/地区时,我可以将其传递到默认国家/地区,如下所示:

class GetSomeInfoByIp(models.Model):

    city  = models.CharField(max_length=120)
    pub_date = models.DateTimeField('date published', null=True, 
    blank=True)
    ip_address  = models.GenericIPAddressField()
    country = models.CharField(max_length=120, 
    choices=COUNTRIES, default=current_country)
    state_or_department  = models.CharField(max_length=120)
    postal_code = models.CharField(max_length=120) 

我不太明白你的问题。为什么你不能用保存全名等相同的方式保存数据?请显示你的查看代码。Hello@DanielRoseman的可能重复对不起,全名不重要,最重要的是将ip地址从我的中间件或我的视图获取到我的模型。与您之前的问题一样,绝对没有办法回答这个问题,因为您拒绝显示任何代码。当然有可能。在视图中创建模型实例时,只需将IP和其余数据一起传递给它。我不明白你在这里发现了什么困难。我真的不明白你的问题。为什么你不能用保存全名等相同的方式保存数据?请显示你的查看代码。Hello@DanielRoseman的可能重复对不起,全名不重要,最重要的是将ip地址从我的中间件或我的视图获取到我的模型。与您之前的问题一样,绝对没有办法回答这个问题,因为您拒绝显示任何代码。当然有可能。在视图中创建模型实例时,只需将IP和其余数据一起传递给它。我不明白你觉得这里有什么困难。