Rad*_*dek 22 django user-agent ip-address django-models django-admin
想存储每个来到网站的人的IP地址.这样做的最佳方法是什么?让我们说有模特
class ip(models.Model):
pub_date = models.DateTimeField('date published')
ip_address = models.GenericIPAddressField()
Run Code Online (Sandbox Code Playgroud)
什么是模型或视图中的代码或我将其保存在数据库中的某个地方也希望使用类似于此的用户代理信息保存它.
rud*_*dra 19
在views.py中:
views.py:
....
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ipaddress = x_forwarded_for.split(',')[-1].strip()
else:
ipaddress = request.META.get('REMOTE_ADDR')
get_ip= ip() #imported class from model
get_ip.ip_address= ipaddress
get_ip.pub_date = datetime.date.today() #import datetime
get_ip.save()
Run Code Online (Sandbox Code Playgroud)
我使用中间件给了@Sahil Kalra的例子,
模型:
class IpAddress(models.Model):
pub_date = models.DateTimeField('date published')
ip_address = models. GenericIPAddressField()
Run Code Online (Sandbox Code Playgroud)
中间件:
import datetime
class SaveIpAddressMiddleware(object):
"""
Save the Ip address if does not exist
"""
def process_request(self, request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[-1].strip()
else:
ip = request.META.get('REMOTE_ADDR')
try:
IpAddress.objects.get(ip_address=ip)
except IpAddress.DoesNotExist: #-----Here My Edit
ip_address = IpAddress(ip_address=ip, pub_date=datetime.datetime.now())
ip_address.save()
return None
Run Code Online (Sandbox Code Playgroud)
将中间件保存在项目文件夹中的某个位置,并在设置文件中添加此中间件.以下是如何在设置文件中设置django中间件
您可以非常轻松地将IP地址提取到views.py中.
def get_ip_address(request): """ use requestobject to fetch client machine's IP Address """ 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') ### Real IP address of client Machine return ip def home(request): """ your vies to handle http request """ ip_address = get_ip_address(request)
归档时间: |
|
查看次数: |
16732 次 |
最近记录: |