'''
return render_template_string(html, is_authenticated=is_authenticated, username=username)
# Выход из системы
@app.route('/logout')
def logout():
session.pop('username', None)
logging.info("Пользователь вышел из системы")
return redirect(url_for('feed'))
# Главная страница - лента публикаций
@app.route('/', methods=['GET', 'POST'])
def feed():
data = load_data()
posts = sorted(data.get('posts', []), key=lambda x: datetime.strptime(x['upload_date'], '%Y-%m-%d %H:%M:%S'), reverse=True)
is_authenticated = 'username' in session
username = session.get('username', None)
search_query = request.form.get('search', '').strip().lower() if request.method == 'POST' else request.args.get('search', '').strip().lower()
if search_query:
posts = [post for post in posts if search_query in post['title'].lower() or search_query in post['description'].lower()]
html = '''
Лента
''' + NAV_HTML + '''
'''
return render_template_string(html, posts=posts, is_authenticated=is_authenticated, username=username, repo_id=REPO_ID, search_query=search_query)
# Страница отдельной публикации
@app.route('/post/', methods=['GET', 'POST'])
def post_page(post_id):
data = load_data()
post = next((p for p in data['posts'] if p['id'] == post_id), None)
if not post:
return "Публикация не найдена", 404
is_authenticated = 'username' in session
username = session.get('username', None)
# Увеличение количества просмотров
post['views'] = post.get('views', 0) + 1
save_data(data)
if request.method == 'POST' and is_authenticated:
if 'like' in request.form:
if username not in post.get('likes', []):
post['likes'] = post.get('likes', []) + [username]
else:
post['likes'] = [user for user in post.get('likes', []) if user != username]
save_data(data)
elif 'comment' in request.form:
comment_text = request.form.get('comment')
if comment_text:
post['comments'] = post.get('comments', []) + [{'user': username, 'text': comment_text, 'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]
save_data(data)
html = '''
{{ post['title'] }}
''' + NAV_HTML + '''
'''
return render_template_string(html, username=username, user_posts=user_posts, total_views=total_views, total_likes=total_likes, bio=bio, link=link, avatar=avatar, repo_id=REPO_ID, is_authenticated=is_authenticated)
# Страница профиля другого пользователя
@app.route('/profile/')
def user_profile(username):
data = load_data()
if username not in data['users']:
return "Пользователь не найден", 404
user_posts = sorted([p for p in data['posts'] if p['uploader'] == username], key=lambda x: datetime.strptime(x['upload_date'], '%Y-%m-%d %H:%M:%S'), reverse=True)
is_authenticated = 'username' in session
current_user = session.get('username', None)
# Подсчет общего количества просмотров и лайков
total_views = sum(post.get('views', 0) for post in user_posts)
total_likes = sum(len(post.get('likes', [])) for post in user_posts)
# Получение данных пользователя
user_data = data['users'].get(username, {})
bio = user_data.get('bio', '')
link = user_data.get('link', '')
avatar = user_data.get('avatar', None)
html = '''
Профиль - {{ username }}
''' + NAV_HTML + '''
Этот пользователь пока не загрузил ни одной публикации.
{% endif %}
'''
return render_template_string(html, username=username, user_posts=user_posts, total_views=total_views, total_likes=total_likes, bio=bio, link=link, avatar=avatar, repo_id=REPO_ID, is_authenticated=is_authenticated, current_user=current_user)
# Страница загрузки контента
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if 'username' not in session:
flash('Войдите, чтобы загрузить контент!')
return redirect(url_for('login'))
if request.method == 'POST':
title = request.form.get('title')
description = request.form.get('description')
file = request.files.get('file')
uploader = session['username']
if not title or not file:
return "Укажите название и выберите файл", 400
filename = secure_filename(file.filename)
temp_path = os.path.join('uploads', filename)
os.makedirs('uploads', exist_ok=True)
file.save(temp_path)
# Определение типа файла
file_type = 'video' if filename.lower().endswith(('.mp4', '.mov', '.avi')) else 'photo'
# Загрузка на Hugging Face
api = HfApi()
api.upload_file(
path_or_fileobj=temp_path,
path_in_repo=f"{file_type}s/{filename}",
repo_id=REPO_ID,
repo_type="dataset",
token=HF_TOKEN_WRITE,
commit_message=f"Добавлена публикация: {title} пользователем {uploader}"
)
# Обновление базы данных
data = load_data()
post_id = f"post_{len(data['posts']) + 1}"
while any(p['id'] == post_id for p in data['posts']):
post_id = f"post_{len(data['posts']) + 1}_{int(time.time())}"
data['posts'].append({
'id': post_id,
'title': title,
'description': description,
'filename': filename,
'type': file_type,
'uploader': uploader,
'upload_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'views': 0,
'likes': [],
'comments': []
})
save_data(data)
logging.info(f"Публикация {title} ({file_type}) загружена пользователем {uploader} с ID {post_id}")
if os.path.exists(temp_path):
os.remove(temp_path)
return redirect(url_for('profile'))
is_authenticated = 'username' in session
username = session.get('username', None)
html = '''
Загрузка контента
''' + NAV_HTML + '''
Загрузить контент
0%
'''
return render_template_string(html, username=username, is_authenticated=is_authenticated)
# Админ-панель (все посты: видео и фото)
@app.route('/admhosto', methods=['GET', 'POST'])
def admin_panel():
data = load_data()
posts = sorted(data.get('posts', []), key=lambda x: datetime.strptime(x['upload_date'], '%Y-%m-%d %H:%M:%S'), reverse=True)
is_authenticated = 'username' in session
username = session.get('username', None)
search_query = request.form.get('search', '').strip().lower() if request.method == 'POST' and 'search' in request.form else request.args.get('search', '').strip().lower()
if search_query:
posts = [post for post in posts if search_query in post['title'].lower() or search_query in post['description'].lower()]
if request.method == 'POST' and 'delete' in request.form:
post_id = request.form.get('post_id')
if post_id:
data['posts'] = [p for p in data['posts'] if p['id'] != post_id]
save_data(data)
logging.info(f"Удален пост с ID {post_id} через админ-панель")
return redirect(url_for('admin_panel'))
html = '''
Админ-панель
''' + NAV_HTML + '''
{{ comment['user'] }} ({{ comment['date'] }}): {{ comment['text'] }}