Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django项目范围内的用户ip日志记录_Python_Django - Fatal编程技术网

Python Django项目范围内的用户ip日志记录

Python Django项目范围内的用户ip日志记录,python,django,Python,Django,是否可以为已经存在的站点登录一个系统,该系统记录每个用户的详细信息(如果登录了他们的cookie和用户名)和ip地址。您最好的选择是编写自己的中间件类 它看起来像这样: class LogUserDetailsMiddleware(object): def process_request(self, request): print 'user: ' + request.user print 'ip-address: ' + request.META.g

是否可以为已经存在的站点登录一个系统,该系统记录每个用户的详细信息(如果登录了他们的cookie和用户名)和ip地址。

您最好的选择是编写自己的中间件类

它看起来像这样:

class LogUserDetailsMiddleware(object):

    def process_request(self, request):
        print 'user: ' + request.user
        print 'ip-address: ' + request.META.get('REMOTE_ADDR')

不要忘记在
AuthenticationMiddleware
(因此
request.user
excists)之后,将您的中间件类添加到您的settings.py中的
Middleware\u类中

class SetRemoteAddrFromForwardedFor(object):
    def process_request(self, request):
        try:
            real_ip = request.META['HTTP_X_FORWARDED_FOR']
        except KeyError:
            pass
        else:
            # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
            # Take just the first one.
            real_ip = real_ip.split(",")[0]
            #request.META['REMOTE_ADDR'] = real_ip
        if request.user.is_authenticated():
            email = request.user.email
            user_id = request.user.id
        else:
            email,user_id = "",""
        today = datetime.date.today()
        try:
            user = UserLog.objects.get(ip=real_ip, date=today, email=email)
        except:
            user = UserLog(ip=real_ip, email=email, user_id=user_id)
        if user.visits:
            user.visits +=1
        else:
            user.visits = 1
        user.save()
        log = LogTime(page=user)
        log.save()

class LogTime(models.Model):
    page = models.ForeignKey('UserLog', related_name="times",)
    time = models.TimeField(auto_now=True, blank=True)

    class Meta:
        ordering = ['page', 'time',]
        verbose_name = 'Log Time'
    def __unicode__(self):
        return self.page

class UserLog(models.Model):
    date = models.DateField(default=datetime.date.today(), blank=True, null=True)
    ip = models.CharField(max_length=100, blank=True, )
    email = models.CharField(max_length=100, blank=True, )
    user_id = models.CharField(max_length=100, blank=True, )
    visits = models.IntegerField(default=1, blank=True, null=True)


    class Meta:
        ordering = ['visits','date']
        verbose_name = 'User Log'
    def __unicode__(self):
        return "{0} {1}: {2} Visits Today: {3}".format(self.date, self.ip, self.email, self.visits)

是的,例如,您可以为此编写自己的中间件。