Nil*_*Kar 5 django django-templates django-models django-views
我正在使用 django 执行博客应用程序..
每当用户看到特定博客时,无论是注册用户还是非注册用户,我都想跟踪页面查看次数...
并且还想根据查看次数显示查看次数最多的博客..
谁能帮我解决这个..
谢谢
Abh*_*h K 11
模型.py
class Blog(models.Model):
#fields you need
blog_views=models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
视图.py
def blog_post(request,post_id):
#your code
blog_object=Blog.objects.get(id=post_id)
blog_object.blog_views=blog_object.blog_views+1
blog_object.save()
#your code
Run Code Online (Sandbox Code Playgroud)
这将简单地计算每个博客访问量。这也将计算单个用户的多次查看。
小智 6
我们可以通过为数据库中的帖子视图创建一个表来使用 IPAdress 计算视图。
在models.py中
from django.contrib.auth.models import User
class PostViews(models.Model):
IPAddres= models.GenericIPAddressField(default="45.243.82.169")
post = models.ForeignKey('Post', on_delete=models.CASCADE)
def __str__(self):
return '{0} in {1} post'.format(self.IPAddres,self.post.title)
Run Code Online (Sandbox Code Playgroud)
然后,让它成为 Post 类的一个属性。
例如models.py:
class Post(models.Model):
title = models.CharField(max_length=100, unique= True)
slug= models.SlugField(blank=True, null=True, unique=True)
@property
def views_count(self):
return PostViews.objects.filter(post=self).count()
Run Code Online (Sandbox Code Playgroud)
你可以阅读有关财产在这里再
在views.py中
from .models import PostViews
def PostsDetailsView(request,slug):
post_details=Post.objects.get(slug=slug)
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
PostViews.objects.get_or_create(user=request.user, post=post_details)
Run Code Online (Sandbox Code Playgroud)
所以这个函数保证如果这个IPAdress看过这个帖子,他第一次看到这个帖子就什么都不做,它会在数据库中创建一个对象,并把它算作一个视图。您可以在此处阅读有关 IPAdress 的更多信息。不要忘记在 admin.py 中进行迁移、迁移和注册 PostViews 类
| 归档时间: |
|
| 查看次数: |
5236 次 |
| 最近记录: |