大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,用AdminLTE编写Dashboard。
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码Tag是Post_024
目前,当我们登录我们的CMS界面,我们看到的是这个样子:
很丑,不美观。所以这几节,我们将要开发一款真正意义上的CMS Dashboard。具体开发完成长这个样子:
我们看到,具体分为这么几个部分:
- 用户访问
- 文章统计
- 若是想加,还可以加其他的功能
这些东西我们其实都是可以做出来的,接下来的几节课,我们就来讲讲每一个部分都是怎么实现的。
用户访问统计
首先是用户访问统计,我们要统计每一个用户的访问请求,同时要记录每天网站访问人数,那么我们就需要创建模型了。
这个模型应该是属于全站使用,所以我们就在basefucntion/models.py
下面的创建:
class UserIP(models.Model):
ip_address = models.CharField(max_length=30)
ip_location = models.CharField(max_length=30)
end_point = models.CharField(default='/', max_length=30)
day = models.DateField(default=timezone.now)
# 网站总访问次数
class VisitNumber(models.Model):
count = models.IntegerField(default=0) # 网站访问总次数
# 单日访问量统计
class DayNumber(models.Model):
day = models.DateField(default=timezone.now)
count = models.IntegerField(default=0) # 网站访问总次数
接着,我们在base
应用下,创建一个tracking_view.py
,里面要放我们的更新方法,即最终网站访问数量的方法:
def peekpa_tracking(func):
def wrapper(request, *args, **kwargs):
tacking_info(request)
return func(request, *args, **kwargs)
return wrapper
def tacking_info(request):
update_visit_number()
update_user_ip(request)
update_day_visit_number()
def update_visit_number():
count_nums = VisitNumber.objects.filter(id=1)
if count_nums:
count_nums = count_nums[0]
count_nums.count = F('count') + 1
else:
count_nums = VisitNumber()
count_nums.count = 1
count_nums.save()
def update_user_ip(request):
if 'HTTP_X_FORWARDED_FOR' in request.META: # 获取 ip
client_ip = request.META['HTTP_X_FORWARDED_FOR']
client_ip = client_ip.split(",")[0] # 所以这里是真实的 ip
else:
client_ip = request.META['REMOTE_ADDR'] # 这里获得代理 ip
UserIP().objects.create(ip=client_ip