创新设计记录-4:博客功能-后端

创新设计记录-4:博客-后端

用户可以在本系统中像csdn一样实时在线的编写自己博客。博客是markdown的富文本编辑器格式

在这里插入图片描述

1.添加博客

async def add_blog(blog: BlogModel) -> BaseResponse:
    """
    添加博客
    """
    global res
    try:
        with Session(engine) as session:
            time = datetime.now()

            if blog.blog_id is None or blog.blog_id == '':
                blog_id = uuid.uuid4().hex
                session.add(
                    Blog(id=blog_id, title=blog.title, content=blog.content, create_time=time, user_id=blog.user_id))
            else:
                # 博客已经存在
                blog_id = blog.blog_id
                b = session.query(Blog).filter(Blog.id == blog_id).first()
                b.content = blog.content
                b.title = blog.title
            session.commit()
    except Exception as e:
        print(e)
        logging.info(f'user_id为{blog.user_id}的用户创建博客失败, time{time}')
        return BaseResponse(msg="创建失败")

    # 文件保存本地
    # 上传知识库
    if blog.save_to_kb:
        filename = save_md(blog.title, blog.content)
        file = open(filename, "rb")
        files = {'files': (blog.title + '.md', file)}
        form_data = {
            'knowledge_base_name': KB_ARGS["default_kb"],
            'override': DOC_ARGS["override_custom_docs"],
            'to_vector_store': DOC_ARGS["to_vector_store"],
            'chunk_size': DOC_ARGS["chunk_size"],
            'chunk_overlap': DOC_ARGS["overlap_size"],
            'zh_title_enhance': DOC_ARGS["zh_title_enhance"],
            'docs': DOC_ARGS["docs"],
            'not_refresh_vs_cache': DOC_ARGS["not_refresh_vs_cache"]
        }
        try:
            response = requests.post(DOC_ARGS['url'], files=files, data=form_data)
        except Exception as e:
            return BaseResponse(code=500, msg="上传文件失败", data={"error": f'{e}'})

        print(response.json())
    return BaseResponse(code=200, msg='添加成功', data={'blog_id': blog_id})

这个方法上半部分是简单的获取请求输入并将其存入到数据库中,后半部分的功能我们留到下一篇再详述

2.获取用户的博客列表

def get_blog(user_id: str) -> BaseResponse:
    """获取博客列表"""
    try:
        with Session(engine) as session:
            result = session.query(Blog).filter(Blog.user_id == user_id).all()

    except Exception as e:
        print(e)
        return BaseResponse(msg="查询失败")
    return

该方法获取用户自己的博客列表,显示在博客界面的左侧列表中

3.删除博客

def delete_blog(blog_id: str) -> BaseResponse:
    try:
        with Session(engine) as session:
            session.query(Blog).filter(Blog.id == blog_id).delete()
            session.commit()
    except Exception as e:
        print(e)
        return BaseResponse(msg="删除失败")
    return BaseResponse(code=200, msg='删除成功')

用户可以选中某一篇博客删除

4.获取博客的内容

用户在点击某一篇博客时,点击博客就可以请求这个方法,把选中的博客的有关信息返回到前端中显示。

def blog(blog_id: str) -> BaseResponse:
    """
    获取博客内容
    """
    try:
        with Session(engine) as session:
            result = session.query(Blog).filter(Blog.id == blog_id).first()
    except Exception as e:
        print(e)
        return BaseResponse(msg="查询失败")
    return BaseResponse(code=200, msg='查询成功', data=serialize_blog(result))

5.把博客以md文件的格式保存到本地

def save_md(title: str, content: str):
    """将md文件存本地"""
    filename = title + '.md'
    path = os.getcwd() + FILE_ARGS["relative_path"]
    if not os.path.exists(path):
        os.makedirs(path)
    with open(path + filename, 'w', encoding='utf-8') as f:
        f.write(content)
        f.close()
    return path + filename

细心的朋友可以发现,该方法被添加博客的方法调用了。

我这里保存的位置为当前目录下的文件夹中,文件夹的路径定义在FILE_ARGS配置文件中。

至此博客功能的后端服务基本结束。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值