diff --git a/WZY/xhs_server/__pycache__/config.cpython-312.pyc b/WZY/xhs_server/__pycache__/config.cpython-312.pyc
index bd10f35..189ac81 100644
--- a/WZY/xhs_server/__pycache__/config.cpython-312.pyc
+++ b/WZY/xhs_server/__pycache__/config.cpython-312.pyc
Binary files differ
diff --git a/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc b/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
index f301c84..2e58010 100644
--- a/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
+++ b/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
Binary files differ
diff --git a/WZY/xhs_server/routes/posts.py b/WZY/xhs_server/routes/posts.py
index cb7e266..d4994c1 100644
--- a/WZY/xhs_server/routes/posts.py
+++ b/WZY/xhs_server/routes/posts.py
@@ -1,26 +1,31 @@
 # routes/posts.py
 
 from flask import Blueprint, request, jsonify, abort
-from extensions    import db
-from models.post   import Post
+from extensions      import db
+from models.post     import Post
 from models.behavior import Behavior
 
 posts_bp = Blueprint('posts', __name__)
 
 @posts_bp.route('', methods=['POST'])
 def create_post():
+    """
+    POST /posts
+    接收 application/json 格式：
+        { "user_id": ..., "title": ..., "content": ..., "topic_id": ..., "media_urls": [...], "status": ... }
+    """
     data = request.get_json() or {}
     post = Post(**data)
     db.session.add(post)
     db.session.commit()
     return jsonify({'id': post.id}), 201
 
+
 @posts_bp.route('', methods=['GET'])
 def list_posts():
     """
-    获取帖子列表，支持：
-      - GET /posts              返回所有已发布帖子
-      - GET /posts?user_id=123  返回指定用户 user_id 的所有帖子
+    GET /posts             → 返回所有已发布帖子
+    GET /posts?user_id=xx  → 返回指定用户的所有帖子
     """
     user_id = request.args.get('user_id', type=int)
     query = Post.query
@@ -28,36 +33,43 @@
         query = query.filter_by(user_id=user_id)
     else:
         query = query.filter_by(status='published')
-    posts = query.all()
 
+    posts = query.all()
     return jsonify([{
-        'id': p.id,
-        'title': p.title,
-        'heat': p.heat,
-        'status': p.status,
-        'created_at': p.created_at.isoformat()
+        'id'         : p.id,
+        'title'      : p.title,
+        'status'     : p.status,
+        'heat'       : p.heat,
+        'created_at' : p.created_at.isoformat()
     } for p in posts])
 
+
 @posts_bp.route('/<int:post_id>', methods=['GET'])
 def get_post(post_id):
+    """
+    GET /posts/<post_id>
+    """
     post = Post.query.get_or_404(post_id)
     return jsonify({
-        'id': post.id,
-        'user_id': post.user_id,
-        'topic_id': post.topic_id,
-        'title': post.title,
-        'content': post.content,
-        'media_urls': post.media_urls,
-        'status': post.status,
-        'heat': post.heat,
-        'created_at': post.created_at.isoformat(),
-        'updated_at': post.updated_at.isoformat()
+        'id'          : post.id,
+        'user_id'     : post.user_id,
+        'topic_id'    : post.topic_id,
+        'title'       : post.title,
+        'content'     : post.content,
+        'media_urls'  : post.media_urls,
+        'status'      : post.status,
+        'heat'        : post.heat,
+        'created_at'  : post.created_at.isoformat(),
+        'updated_at'  : post.updated_at.isoformat()
     })
 
+
 @posts_bp.route('/<int:post_id>', methods=['PUT'])
 def update_post(post_id):
     """
-    修改帖子字段（可选字段：title, content, topic_id, media_urls, status）
+    PUT /posts/<post_id>
+    接收 application/json 格式，可选字段：
+        title, content, topic_id, media_urls, status
     """
     post = Post.query.get_or_404(post_id)
     data = request.get_json() or {}
@@ -67,28 +79,104 @@
     db.session.commit()
     return '', 204
 
+
 @posts_bp.route('/<int:post_id>', methods=['DELETE'])
 def delete_post(post_id):
+    """
+    DELETE /posts/<post_id>
+    """
     post = Post.query.get_or_404(post_id)
     db.session.delete(post)
     db.session.commit()
     return '', 204
 
-@posts_bp.route('/<int:post_id>/<action>', methods=['POST'])
-def post_action(post_id, action):
-    """
-    支持的 action: like, favorite, view, share
-    对于 like 和 favorite，保证每个用户每帖只做一次。
-    """
-    if action not in ('like', 'favorite', 'view', 'share'):
-        abort(400, 'Invalid action')
 
-    data = request.get_json() or {}
+@posts_bp.route('/<int:post_id>/like', methods=['GET'])
+def has_liked(post_id):
+    """
+    GET /posts/<post_id>/like?user_id=xx
+    返回 { "liked": true/false }
+    """
+    user_id = request.args.get('user_id', type=int)
+    if not user_id:
+        abort(400, 'user_id required')
+
+    exists = Behavior.query.filter_by(
+        user_id=user_id,
+        post_id=post_id,
+        type='like'
+    ).first() is not None
+
+    return jsonify({'liked': exists}), 200
+
+
+@posts_bp.route('/<int:post_id>/like', methods=['DELETE'])
+def unlike(post_id):
+    """
+    DELETE /posts/<post_id>/like
+    body: { "user_id": xx }
+    """
+    data    = request.get_json(silent=True) or {}
     user_id = data.get('user_id')
     if not user_id:
         abort(400, 'user_id required')
 
-    # 对 like/favorite 做去重检查
+    beh = Behavior.query.filter_by(
+        user_id=user_id,
+        post_id=post_id,
+        type='like'
+    ).first()
+    if not beh:
+        return jsonify({'error': 'not liked yet'}), 400
+
+    db.session.delete(beh)
+    post = Post.query.get_or_404(post_id)
+    post.heat = max(post.heat - 1, 0)
+    db.session.commit()
+    return '', 204
+
+
+@posts_bp.route('/<int:post_id>/favorite', methods=['DELETE'])
+def unfavorite(post_id):
+    """
+    DELETE /posts/<post_id>/favorite
+    body: { "user_id": xx }
+    """
+    data    = request.get_json(silent=True) or {}
+    user_id = data.get('user_id')
+    if not user_id:
+        abort(400, 'user_id required')
+
+    beh = Behavior.query.filter_by(
+        user_id=user_id,
+        post_id=post_id,
+        type='favorite'
+    ).first()
+    if not beh:
+        return jsonify({'error': 'not favorited yet'}), 400
+
+    db.session.delete(beh)
+    post = Post.query.get_or_404(post_id)
+    post.heat = max(post.heat - 1, 0)
+    db.session.commit()
+    return '', 204
+
+
+@posts_bp.route('/<int:post_id>/<action>', methods=['POST'])
+def post_action(post_id, action):
+    """
+    POST /posts/<post_id>/<action>
+    支持 action: like, favorite, view, share
+    """
+    if action not in ('like', 'favorite', 'view', 'share'):
+        abort(400, 'Invalid action')
+
+    data    = request.get_json() or {}
+    user_id = data.get('user_id')
+    if not user_id:
+        abort(400, 'user_id required')
+
+    # 幂等检查
     if action in ('like', 'favorite'):
         exists = Behavior.query.filter_by(
             user_id=user_id,
@@ -108,64 +196,3 @@
 
     db.session.commit()
     return '', 201
-
-@posts_bp.route('/<int:post_id>/like', methods=['DELETE'])
-def unlike(post_id):
-    user_id = request.get_json(silent=True) and request.get_json().get('user_id')
-    if not user_id:
-        abort(400, 'user_id required')
-    # 查找已有的 like 行为
-    beh = Behavior.query.filter_by(
-        user_id=user_id,
-        post_id=post_id,
-        type='like'
-    ).first()
-    if not beh:
-        return jsonify({'error': 'not liked yet'}), 400
-
-    db.session.delete(beh)
-    # 更新热度，确保不降到负数
-    post = Post.query.get_or_404(post_id)
-    post.heat = max(post.heat - 1, 0)
-    db.session.commit()
-    return '', 204
-
-@posts_bp.route('/<int:post_id>/favorite', methods=['DELETE'])
-def unfavorite(post_id):
-    user_id = request.get_json(silent=True) and request.get_json().get('user_id')
-    if not user_id:
-        abort(400, 'user_id required')
-    # 查找已有的 favorite 行为
-    beh = Behavior.query.filter_by(
-        user_id=user_id,
-        post_id=post_id,
-        type='favorite'
-    ).first()
-    if not beh:
-        return jsonify({'error': 'not favorited yet'}), 400
-
-    db.session.delete(beh)
-    # 更新热度
-    post = Post.query.get_or_404(post_id)
-    post.heat = max(post.heat - 1, 0)
-    db.session.commit()
-    return '', 204
-
-@posts_bp.route('/<int:post_id>/like', methods=['GET'])
-def has_liked(post_id):
-    """
-    检查指定 user_id 是否对 post_id 点过赞。
-    GET /posts/<post_id>/like?user_id=123
-    返回 { "liked": true } 或 { "liked": false }
-    """
-    user_id = request.args.get('user_id', type=int)
-    if not user_id:
-        abort(400, 'user_id required')
-
-    exists = Behavior.query.filter_by(
-        user_id=user_id,
-        post_id=post_id,
-        type='like'
-    ).first() is not None
-
-    return jsonify({'liked': exists}), 200
