一、目标
- 粗略统计阅读量
- 视图函数修改成类视图
二、过程
2.1 粗略统计阅读量
- Post 增加阅读量字段 views 粗略统计
- 数据迁移,字段同步到数据库
- 访问详情页的时候阅读量自动加 1
- 修改视图上的显示阅读量字段(index.html,detail.html)
2.2 视图函数修改成类视图
- ListView, DetailView
class IndexView(ListView):
model = Post
template_name = 'blog/index.html'
context_object_name = 'post_list'
class ArchiveView(IndexView):
def get_queryset(self):
year = self.kwargs.get('year')
month = self.kwargs.get('month')
return super(ArchiveView, self).get_queryset().filter(created_time__year=year, created_time__month=month)
class PostDetailView(DetailView):
model = Post
template_name = 'blog/detail.html'
context_object_name = 'post'
def get(self, request, *args, **kwargs):
response = super(PostDetailView, self).get(request, *args, **kwargs)
self.object.increase_views()
return response
def get_object(self, queryset=None):
post = super(PostDetailView, self).get_object(queryset=queryset)
md = markdown.markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
TocExtension(slugify=slugify)
])
post.body = md.convert(post.body)
m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)
post.toc = m.group(1) if m else ''
return post
三、问题
- 数据库迁移的时候需要关闭 Django 服务吗
- 在详情页刷新下就统计一次,不合适,怎么精确统计阅读量
- get_queryset() ?
- 详情类函数,不懂?
- 没感觉到类视图使用的好处?
附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial