PythonAnywhere部署Flask应用调用RESTful接口报504错误求助
问题解决:PythonAnywhere上Flask应用无法自调用API导致504超时
问题根源
PythonAnywhere的Web应用环境存在限制:应用实例无法通过外部域名向自身发起HTTP请求,这类请求会被服务器拦截或长时间等待后返回504超时。同时,你当前通过HTTP调用自身API的做法完全是冗余操作,既增加了请求延迟,又触发了环境限制。
解决方案:直接调用业务逻辑,避免HTTP自调用
不需要通过requests.post调用自身API,直接抽离更新last_seen的公共逻辑,在before_request和API资源中复用即可。
步骤1:抽离公共更新函数
创建一个可复用的函数,把更新用户last_seen的逻辑从API中独立出来,比如在/app/utils.py中:
from datetime import datetime, timezone from app.models import User from app import db def update_user_last_seen(user_id): """更新指定用户的last_seen字段""" user = User.query.get_or_404(user_id) user.last_seen = datetime.now(timezone.utc) db.session.commit()
或者直接在User模型中添加方法(更符合MVC模式):
# /app/models.py from datetime import datetime, timezone from app import db class User(db.Model): # 现有字段定义... last_seen = db.DateTime(timezone=True) def update_last_seen(self): self.last_seen = datetime.now(timezone.utc) db.session.commit()
步骤2:修改API资源,复用公共逻辑
更新/app/api/users.py中的UpdateLastSeen资源,直接调用公共函数:
from app.utils import update_user_last_seen # 若用模型方法则导入User from flask_restful import Resource from app.decorators import token_required # 你的token装饰器 class UpdateLastSeen(Resource): """ - POST '/api/users/<int:user_id>/update_last_seen' """ @token_required def post(self, user_id): update_user_last_seen(user_id) # 若用模型方法则: # user = User.query.get_or_404(user_id) # user.update_last_seen() return {'message': 'last_seen attribute updated successfully'}, 200
步骤3:修改before_request逻辑,移除HTTP请求
更新/app/auth/routes.py中的update_last_seen函数,直接调用公共逻辑:
from app.utils import update_user_last_seen # 若用模型方法则导入User from flask import current_user @auth_bp.before_request def update_last_seen(): if current_user.is_authenticated: try: update_user_last_seen(current_user.id) # 若用模型方法则: # current_user.update_last_seen() except Exception as e: logger.exception(f"Failed to update last_seen for user {current_user.id}: {e}")
额外说明
- 这种方式不仅解决了PythonAnywhere的环境限制问题,还大幅降低了请求延迟,因为省去了HTTP请求的网络开销和API路由处理步骤。
- 本地环境能正常运行是因为本地服务器没有这类自请求限制,但即使在本地,直接调用函数也是更优的实现方式。
内容的提问来源于stack exchange,提问作者sigma
相关产品推荐
相关产品推荐

