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
flask---博客后端接口(4. 文章接口)
最新推荐文章于 2024-09-15 16:49:26 发布