本渣渣不专注技术,只专注使用技术,不是一个资深的coder,是一个不折不扣的copier |
目前个人博客基础功能基本实现。最后再对博客的一些细节进行完善一下即可,可能还有很多细节,就不一一处理了。这里准备处理三个重要的细节,一是浏览量、二是喜欢、三是访问路径
1、浏览量
blog -> storm -> views.py
在详情页 DetailView 视图中添加浏览量增加功能, 首先不能是作者浏览,作者本人浏览不增加浏览量
二是访客浏览,浏览不能打开一次就算一次浏览,必须是访问间隔超过半个小时才能记录下一次浏览
def get_object(self): obj = super(DetailView, self).get_object() # 设置浏览量增加时间判断,同一篇文章两次浏览超过半小时才重新统计阅览量,作者浏览忽略 u = self.request.user ses = self.request.session the_key = 'is_read_{}'.format(obj.id) is_read_time = ses.get(the_key) if u != obj.author: if not is_read_time: obj.update_views() ses[the_key] = time.time() else: now_time = time.time() t = now_time - is_read_time if t > 60 * 30: obj.update_views() ses[the_key] = time.time() md = markdown.Markdown(extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', TocExtension(slugify=slugify), ]) obj.body = md.convert(obj.body) obj.toc = md.toc return obj
blog -> storm -> models.py
在文章模型下,添加一个浏览量增加的函数,方便使用,在视图类下可以添加一些有必要的小功能,也可以是基础字段的处理扩展字段
def update_views(self): self.views += 1 self.save(update_fields=['views'])
2、喜欢
喜欢是点击事件,那么需要 Jquery 触发, 根据前端喜欢按钮标签属性去 jquery.js 文件找到对应代码
id="Addlike"
blog -> static -> js -> jquery.js
a.fn.postLike = function() { if (a(this).hasClass("actived")) { return alert("已经点过赞啦!") } else { a(this).addClass("actived"); var z = a(this).data("id"), y = a(this).data("action"), x = a(this).children(".count"); var w = { action: "bigfa_like", um_id: z, um_action: y }; a.post("/wp-admin/admin-ajax.php", w, function(A) { a(x).html(A) }); a.tipsBox({ obj: a(this), str: "+1", callback: function() {} }); return false } };
可以找到
a.post("/wp-admin/admin-ajax.php", w, function(A) { a(x).html(A) });
改为
a.post("/love/", w, function(A) { a(x).html(A) });
um_id: 即为文章ID
配置路由
# 喜欢 url(r'^love/$', LoveView, name='love'),
编写视图
@csrf_exempt def LoveView(request): data_id = request.POST.get('um_id', '') if data_id: article = Article.objects.get(id=data_id) article.loves += 1 article.save() return HttpResponse(article.loves) else: return HttpResponse('error', status=405)
3、访问路径
前端请求的路径其实有很多写法
方法一
<a target="_blank" href="/article/{{ article.slug }}" title="{{ article.title }}">
方法二
<a target="_blank" href="{% url 'blog:article' article.slug %}" title="{{ article.title }}">
无论方法一还是方法二写起来其实还是很麻烦,怎么办呢?
分析一下发现,这些路径其实是固定的,变的无非是,文章ID、分类类别等
那么换个思路能不能让这些路径写在后台,前端直接根据使用的对象获取呢?答案肯定是可以的
这里以文章、分类为例,其实每个模型都可以添加访问路径,自己尝试
blog -> storm -> moodels.py
在 Article 模型类下添加
def get_absolute_url(self): return reverse('blog:article', kwargs={'slug': self.slug})
在 Category 模型类下添加
def get_absolute_url(self): return reverse('blog:category', kwargs={'slug': self.slug, 'bigslug': self.bigcategory.slug})
前端怎么使用呢?
原始:
<a target="_blank" href="/article/{{ article.slug }}" title="{{ article.title }}">
改为:
<a target="_blank" href="{{ article.get_absolute_url }}" title="{{ article.title }}">
是不是很方便,分类、归档、标签等都可以这样搞
4、总结
可能博客目前还存在细节问题,比如适配手机、给网站添加一个LOGO、等,但是我想还有更多细节或者有意思的功能,就是需要自己去发现处理的,把它当作自己的一个作品好好去打磨一番,会更加完美。接下来我会对自己不满意的地方进行升级改造。如果发现什么Bug欢迎在评论区留言
【友情提示】——如果发现有表达错误,或者知识点错误,或者搞不懂的地方,请及时留言,可以在评论区互相帮助,让后来者少走弯路是我的初衷。我也是一步步摸着石头走过来的,深知网络上只言片语的图文教程,给初学者带来的深深困扰。
【建议】——在对项目结构不太熟悉时,参照完整源码少走弯路
转载请注明: StormSha » Django个人博客开发十七 | 功能完善