Я разрабатываю веб-приложение Flask, в котором пользователи могут создавать публикации, которые необходимо сохранять в файл JSON. Однако когда пользователь отправляет сообщение, оно не сохраняется в Posts.json. Ожидаемое поведение заключается в том, что сообщение должно быть доступно для извлечения в указанной комнате, но фактическое поведение заключается в том, что файл остается неизменным.
Добавлены операторы печати, чтобы проверить, выполняется ли функция save_posts(). Вызывается.
Проверено, существует ли файл JSON перед попыткой записи в него.
Проверено сохраняемая структура данных.
Гарантировано, что во время файловых операций не возникает исключений.
@staticmethod
def save_post(username, content, room="general"):
"""Save a new post to the room."""
all_posts = Post.load_all_posts()
if room not in all_posts:
all_posts[room] = []
post_id = str(uuid.uuid4())
post = {
'id': post_id,
'username': username,
'content': content,
'timestamp': datetime.now().isoformat(),
'pinned': False
}
all_posts[room].append(post)
Post.save_posts(all_posts)
return post # Return the created post
@staticmethod
def load_posts(room="general"):
"""Load posts from a specific room."""
all_posts = Post.load_all_posts()
posts = all_posts.get(room, [])
print(f"Loaded posts for room {room}: {posts}") # Debug log
return posts
@staticmethod
def load_all_posts():
"""Load all posts from the JSON file."""
if not os.path.exists(POSTS_FILE):
print("Posts file does not exist, creating new file.")
Post.save_posts({})
try:
with open(POSTS_FILE, 'r') as f:
data = json.load(f)
if isinstance(data, dict):
return data
else:
print("Invalid data structure in posts file.")
return {}
except (FileNotFoundError, json.JSONDecodeError):
print("Error loading posts.json, initializing empty file.")
Post.save_posts({})
return {}
@staticmethod
def save_posts(all_posts):
print(f"Saving posts to: {POSTS_FILE}")
try:
with open(POSTS_FILE, 'w') as f:
json.dump(all_posts, f, indent=4)
print("Posts saved successfully.")
except Exception as e:
print(f"Error saving posts: {e}")
@socketio.on('submit_post')
def handle_submit_post(data):
username = data.get('username')
content = data.get('content')
room = data.get('room')
print(f"Received post data: {data}")
if not username or not content or not room:
return {'error': 'Invalid post data.'}, 400
post = Post.save_post(username, content, room)
can_delete = (current_user.username == username) or (current_user.role in ['admin', 'moderator'])
delete_url = url_for('delete_post', post_id=post['id'], room_name=room) # Now this will work correctly
post_data = {
'username': username,
'content': content,
'timestamp': datetime.now().isoformat(),
'room': room,
'canDelete': can_delete,
'deleteUrl': delete_url
}
emit('new_post', post_data, room=room)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ling-issue