博客增删改查及后台数据渲染
博客管理
1)添加博客
博客主界面如下图(已登录)
点击写博客,在添加博客页面中我们使用了VUE的富文本编辑器:
接下来我们讲解后台代码,源码地址我们在第一章博客写出了,下面直接讲解后台实现代码。
def check(class_name, name=None):
try:
cate = class_name.objects.get(name=name)
if cate:
return cate
except Exception as e:
return None
def add_blog(request):
try: # 判断异常
title = request.POST.get('title', '') # 获取博客标题
author = request.POST.get('author', '') # 获取博客作者
content = request.POST.get('content', '') # 获取博客内容
category = request.POST.get('category', '') # 获取博客分类
tag = request.POST.get('tag', '') # 获取博客标签
tag_list = tag.split(' ') # 标签是以空格分开 然后拆分
cate = check(Category, name=category)
# 处理分类
if cate is not None:
# 存在此分类,就在blog创建时加上此分类
blog = BlogInfo.objects.create(title=title, author=author, content=content, category=cate)
else:
# 反之,先创建分类,再添加到blog
cate = Category.objects.create(name=category)
blog = BlogInfo.objects.create(title=title, author=author, content=content, category=cate)
# 处理标签
for _t in tag_list:
_tag = check(Tag, name=_t)
# 检查是否存在这个标签对象
if _tag is not None:
# 如果存在 not None,就添加这个对象到当前blog
blog.tag.add(_tag)
else:
# 不存在,先在Tag模型创建一个对象,再添加到当前blog
t = Tag.objects.create(name=_t)
blog.tag.add(t)
data = {'code': '200', 'msg': '发布成功'}
return JsonResponse({'result': data})
except Exception as e:
data = {'code': '10001', 'msg': '发布失败'}
return JsonResponse({'result': data})
2)删除博客
def delete(request):
try: # 判断异常
blog_id = request.POST.get('blog_id', '') # 获取删除的指定博客id
blog = BlogInfo.objects.get(id=blog_id) # get这个blog对象
blog.delete() # 删除
data = {'code': '200', 'msg': '删除成功'}
return JsonResponse({'result': data})
except Exception as e:
data = {'code': '10001', 'msg': '请求失败'}
return JsonResponse({'result': data})
3)编辑博客
def edit_blog(request, blog_id):
try: # 判断异常
blog = BlogInfo.objects.get(id=blog_id) # 首先获取指定要编辑的博客对象
title = blog.title
content = blog.content # 返回前端的数据博客标题、内容
data = {'code': '200', 'title': title, 'content': content}
return JsonResponse({'result': data})
except Exception as e:
data = {'code': '10001', 'msg': '请求失败'}
return JsonResponse({'result': data})
def edit_post_save(request): # 编辑之后的提交操作
try: # 判断异常
blog_id = request.POST.get('id', '')
title = request.POST.get('title', '')
content = request.POST.get('content', '') # 获取前端返回数据id title content
blog_info = BlogInfo.objects.get(id=blog_id) # 获取数据库指定博客对象
blog_info.title = title
blog_info.content = content # 修改title content
blog_info.save() # 保存
return JsonResponse({'result': {'code': '200', 'msg': '编辑成功'}})
except Exception as e:
data = {'code': '10001', 'msg': '请求失败'}
return JsonResponse({'result': data})
4)查看博客
class BlogListView(View): # 这个类完成显示首页的博客list 及相关博客信息
def get(self, request):
blog_list = BlogInfo.objects.all().order_by('-add_time') # 获取所有博客对象
all_blog = list()
for b in blog_list:
blog_info = dict()
blog_info['id'] = b.id
blog_info['title'] = b.title
blog_info['author'] = b.author
user_portrait = UserProfile.objects.get(Q(username=b.author) | Q(email=b.author)).portrait
blog_info['portrait'] = str(user_portrait)
blog_info['content'] = b.content
blog_info['category'] = str(b.category)
blog_info['join_time'] = str(b.add_time)
blog_info['visit'] = b.visit
tags = b.tag.all()
tag_list = list()
for t in tags:
if t.name != "":
tag_list.append(t.name)
blog_info['tags'] = tag_list
blog_info['comment_count'] = str(len(b.blog_comments.all()))
all_blog.append(blog_info) # 返回all_blog数组
data = {'code': '200', 'data': all_blog}
return JsonResponse({'result': data})
def post(self, request):
pass
def get_one_blog(request, blog_id): # 点击某个博客查看博客详情内容
blog_detail = dict()
blog = BlogInfo.objects.get(id=blog_id) # 通过前端获取指定博客对象
blog.visit += 1 # 阅读数+1
blog.save()
blog_detail['id'] = blog_id
blog_detail['title'] = blog.title
blog_detail['author'] = blog.author
user_portrait = UserProfile.objects.get(Q(username=blog.author) | Q(email=blog.author)).portrait # 获取博客作者用户头像
blog_detail['portrait'] = str(user_portrait)
blog_detail['content'] = blog.content
blog_detail['category'] = str(blog.category)
blog_detail['join_time'] = str(blog.add_time)
blog_detail['visit'] = blog.visit
tags = blog.tag.all()
tag_list = list()
for t in tags:
if t.name != "":
tag_list.append(t.name)
blog_detail['tags'] = tag_list
blog_detail['comment_count'] = str(len(blog.blog_comments.all())) # 获取评论数
comments = blog.blog_comments.all().order_by('-pub') # 获取与其对应的评论
comments_list = list()
for c in comments:
comment = dict()
comment['author'] = c.name
comment_portrait = UserProfile.objects.get(Q(username=c.name) | Q(email=c.name)).portrait
comment['portrait'] = str(comment_portrait)
comment['content'] = c.content
comment['pub'] = str(c.pub)
comments_list.append(comment)
data = {'code': '200', 'data': blog_detail, 'comments': comments_list}
# 返回前端数据:博客的所有信息data及博客评论信息comments
return JsonResponse({'result': data})
完成了博客的怎删改查,搜索及博客评论会在下一章完成。