flask---博客后端接口(4. 文章接口)

from flask import Blueprint, request, jsonify, session
from sqlalchemy.orm import joinedload

from decorators.login_decorators import login_required
from book_from.post_from import PostFrom
from models.book_model import Post, Comment, User
from init.book_init import db
from sqlalchemy.orm.exc import NoResultFound
from flask import jsonify, request

api = Blueprint("post_api", __name__, url_prefix='/post')


# 发送文章
@api.route("/get_essay", methods=['POST'])
@login_required
def post_essay():
    try:
        if request.method != "POST":
            return jsonify({'code': 400, 'message': '请求错误'})
        else:
            form = PostFrom(request.form)

            if form.validate():
                user_id = session.get('uuid')
                title = form.title.data
                content = form.content.data
                post = Post(user_id=user_id, title=title, content=content)
                db.session.add(post)
                db.session.commit()
                return jsonify({'code': 200, 'message': '文章已发送'})
            else:
                # 表单验证失败
                errors = form.errors
                return jsonify({'code': 400, 'message': '表单验证失败', 'errors': errors})
    except Exception as e:
        # 捕获其他异常
        return jsonify({'code': 500, 'message': '服务器内部错误', 'error': str(e)})


@api.route("/get_delete/<string:sid>", methods=['DELETE'])
@login_required
def post_delete(sid):
    if request.method != "DELETE":
        return jsonify({'code': 400, 'message': '请求错误'})
    else:
        post_id = sid
        post = Post.query.get(post_id)
        if post:
            db.session.delete(post)
            db.session.commit()
            return jsonify({"code": 200, "message": "删除文章成功"}), 200
        else:
            return jsonify({"code": 404, "message": "文章不存在"}), 404


@api.route("/get_revise/<string:sid>", methods=['POST'])
@login_required
def post_revise(sid):
    try:
        # 获取文章对象
        post = Post.query.get(sid)

        if not post:
            # 如果文章不存在,返回404错误
            return jsonify({"code": 404, "message": "文章不存在"}), 404

        # 根据请求方法执行不同的操作
        if request.method == 'POST':
            # 如果请求方法是POST,则执行文章修改操作
            form = PostFrom(request.form)

            if form.validate():
                post.title = form.title.data
                post.content = form.content.data
                db.session.commit()
                return jsonify({"code": 200, "message": "文章编辑成功"}), 200
            else:
                # 表单验证失败
                return jsonify({"code": 400, "message": "文章信息格式错误", "errors": form.errors}), 400
        else:
            # 如果请求方法不是POST,则返回405错误
            return jsonify({"code": 405, "message": "方法不允许"}), 405
    except Exception as e:
        # 捕获其他异常
        return jsonify({'code': 500, 'message': '服务器内部错误', 'error': str(e)}), 500


@api.route('/get_search', methods=['GET'])
@login_required
def post_search():
    q = request.args.get('q', '')
    if not q:
        return jsonify({"code": 400, "message": "请输入搜索关键词"}), 400

    # 构建查询条件
    results = Post.query.filter(
        db.or_(
            Post.title.ilike(f'%{q}%'),  # 在这里添加 % 来表示模糊匹配
            Post.content.ilike(f'%{q}%')  # 在这里添加 % 来表示模糊匹配
        )
    ).all()

    if results:
        # 如果有结果,则序列化结果并返回
        serialized_results = [{'title': post.title, 'content': post.content} for post in results]
        return jsonify({"code": 200, "message": "搜索成功", "results": serialized_results}), 200
    else:
        # 如果没有匹配结果,则返回404错误
        return jsonify({"code": 404, "message": "未找到匹配结果"}), 404


@api.route('/get_list/<string:sid>', methods=['GET'])
@login_required
def post_list(sid):
    try:
        post = Post.query.get(sid)
        if post:
            session['post_id'] = post.id
            user_id = session.get('uuid')
            # 查询与该帖子相关的评论
            comments = Comment.query.filter_by(post_id=post.id).all()

            serialized_results = {
                'title': post.title,
                'content': post.content,
                'comments': [{'content': comment.content, '作者': User.query.get(comment.user_id).username} for comment in comments],
            }
            return jsonify({"code": 200, "message": "文章详情", "result": serialized_results}), 200
        else:
            return jsonify({"code": 404, "message": "帖子不存在"}), 404
    except NoResultFound:
        return jsonify({"code": 404, "message": "帖子不存在"}), 404
    except Exception as e:
        return jsonify({"code": 500, "message": "服务器错误", "error": str(e)}), 500
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值