Django+Vue:搭建个人博客(6)

博客增删改查及后台数据渲染

博客管理

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})

在这里插入图片描述
完成了博客的怎删改查,搜索及博客评论会在下一章完成。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值