这里准备处理三个重要的细节,
blog -> fswy -> 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 -> fswy -> models.py
在文章模型下,添加一个浏览量增加的函数,方便使用,在视图类下可以添加一些有必要的小功能,也可以是基础字段的处理扩展字段
def update_views(self):
self.views += 1
self.save(update_fields=['views'])
喜欢是点击事件,那么需要 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
编写视图
from django.views.decorators.csrf import csrf_exempt
@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)
# 喜欢
path(r'love/', LoveView, name='love'),
前端请求的路径其实有很多写法
<a target="_blank" href="/article/{{ article.slug }}" title="{{ article.title }}">
<a target="_blank" href="{% url 'blog:article' article.slug %}" title="{{ article.title }}">
无论方法一还是方法二写起来其实还是很麻烦,怎么办呢?
分析一下发现,这些路径其实是固定的,变的无非是:文章ID、分类类别等
那么换个思路能不能让这些路径写在后台,前端直接根据使用的对象获取呢?答案肯定是可以的
这里以文章、分类为例,其实每个模型都可以添加访问路径,自己尝试
blog -> fswy -> 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 }}">
是不是很方便,分类、归档、标签等都可以这样搞
可能博客目前还存在细节问题,比如适配手机、给网站添加一个LOGO、等,但是我想还有更多细节或者有意思的功能,就是需要自己去发现处理的,把它当作自己的一个作品好好去打磨一番,会更加完美。接下来我会对自己不满意的地方进行升级改造。如果发现什么Bug欢迎在评论区留言
Django3.0+Python3.8+MySQL8.0 个人博客搭建一|前言
Django3.0+Python3.8+MySQL8.0 个人博客搭建二|创建虚拟环境
Django3.0+Python3.8+MySQL8.0 个人博客搭建三|创建博客项目
Django3.0+Python3.8+MySQL8.0 个人博客搭建四|创建第一个APP
Django3.0+Python3.8+MySQL8.0 个人博客搭建五|makemigrations连接MySQL数据库的坑
Django3.0+Python3.8+MySQL8.0 个人博客搭建六|数据库结构设计
Django3.0+Python3.8+MySQL8.0 个人博客搭建七|makemigrations创建数据库的坑(第二弹)
Django3.0+Python3.8+MySQL8.0 个人博客搭建八|通过admin管理后台
Django3.0+Python3.8+MySQL8.0 个人博客搭建九|博客首页开发(一)
Django3.0+Python3.8+MySQL8.0 个人博客搭建十|整理项目结构
Django3.0+Python3.8+MySQL8.0 个人博客搭建十一|博客首页开发(二)
Django3.0+Python3.8+MySQL8.0 个人博客搭建十二|博客首页开发(三)
Django3.0+Python3.8+MySQL8.0 个人博客搭建十三|博客详情页面
Django3.0+Python3.8+MySQL8.0 个人博客搭建十四|注册登录
Django3.0+Python3.8+MySQL8.0 个人博客搭建十五|评论区
Django3.0+Python3.8+MySQL8.0 个人博客搭建十六|网站地图
Django3.0+Python3.8+MySQL8.0 个人博客搭建十七|Haystack 全文搜索