Eluza133 commited on
Commit
2a35527
·
verified ·
1 Parent(s): a5e8401

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -17
app.py CHANGED
@@ -10,7 +10,7 @@ from werkzeug.utils import secure_filename
10
  import hashlib
11
 
12
  app = Flask(__name__)
13
- app.secret_key = 'supersecretkey' # Для сессий, в продакшене замените на безопасный ключ
14
  DATA_FILE = 'datatest.json'
15
  REPO_ID = "Eluza133/w1f9"
16
  HF_TOKEN_WRITE = os.getenv("HF_TOKEN") # Токен с правами записи
@@ -41,6 +41,7 @@ def save_data(data):
41
  with open(DATA_FILE, 'w', encoding='utf-8') as file:
42
  json.dump(data, file, ensure_ascii=False, indent=4)
43
  upload_db_to_hf()
 
44
  except Exception as e:
45
  logging.error(f"Ошибка сохранения данных: {e}")
46
  raise
@@ -93,7 +94,7 @@ def register():
93
  return redirect(url_for('register'))
94
 
95
  # Хешируем пароль
96
- hashed_password = hashlib.sha256(password.encode()).hexdigest()
97
  data['users'][username] = {'password': hashed_password}
98
  save_data(data)
99
  flash('Регистрация успешна! Войдите в систему.')
@@ -144,7 +145,7 @@ def login():
144
  password = request.form.get('password')
145
  data = load_data()
146
 
147
- hashed_password = hashlib.sha256(password.encode()).hexdigest()
148
  if username in data['users'] and data['users'][username]['password'] == hashed_password:
149
  session['username'] = username
150
  return redirect(url_for('video_feed'))
@@ -193,16 +194,14 @@ def login():
193
  @app.route('/logout')
194
  def logout():
195
  session.pop('username', None)
196
- return redirect(url_for('login'))
197
 
198
- # Главная страница - лента видео с превью
199
  @app.route('/')
200
  def video_feed():
201
- if 'username' not in session:
202
- return redirect(url_for('login'))
203
-
204
  data = load_data()
205
  videos = data['videos']
 
206
  html = '''
207
  <!DOCTYPE html>
208
  <html lang="ru">
@@ -216,15 +215,22 @@ def video_feed():
216
  .video-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; }
217
  .video-item { background: #fff; padding: 15px; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); text-decoration: none; color: #2d3748; }
218
  .video-item img { width: 100%; border-radius: 8px; height: 200px; object-fit: cover; }
219
- .upload-btn, .logout-btn { display: inline-block; margin: 20px 10px; padding: 10px 20px; background: #3b82f6; color: white; text-align: center; text-decoration: none; border-radius: 8px; }
220
  .logout-btn { background: #ef4444; }
221
  </style>
222
  </head>
223
  <body>
224
  <div class="container">
225
  <h1>Лента видео</h1>
226
- <a href="/upload" class="upload-btn">Загрузить видео</a>
227
- <a href="/logout" class="logout-btn">Выйти</a>
 
 
 
 
 
 
 
228
  <div class="video-grid">
229
  {% for video in videos %}
230
  <a href="{{ url_for('video_page', title=video['title']) }}" class="video-item">
@@ -239,19 +245,17 @@ def video_feed():
239
  </body>
240
  </html>
241
  '''
242
- return render_template_string(html, videos=videos)
243
 
244
- # Страница отдельного видео
245
  @app.route('/video/<title>')
246
  def video_page(title):
247
- if 'username' not in session:
248
- return redirect(url_for('login'))
249
-
250
  data = load_data()
251
  video = next((v for v in data['videos'] if v['title'] == title), None)
252
  if not video:
253
  return "Видео не найдено", 404
254
 
 
255
  html = '''
256
  <!DOCTYPE html>
257
  <html lang="ru">
@@ -275,16 +279,20 @@ def video_page(title):
275
  <p>{{ video['description'] }}</p>
276
  <p>Загрузил: {{ video['uploader'] }} | {{ video['upload_date'] }}</p>
277
  <a href="{{ url_for('video_feed') }}" class="back-btn">Назад к ленте</a>
 
 
 
278
  </div>
279
  </body>
280
  </html>
281
  '''
282
- return render_template_string(html, video=video, repo_id=REPO_ID)
283
 
284
  # Страница загрузки видео (только для авторизованных)
285
  @app.route('/upload', methods=['GET', 'POST'])
286
  def upload_video():
287
  if 'username' not in session:
 
288
  return redirect(url_for('login'))
289
 
290
  if request.method == 'POST':
 
10
  import hashlib
11
 
12
  app = Flask(__name__)
13
+ app.secret_key = 'supersecretkey' # Замените на безопасный ключ в продакшене
14
  DATA_FILE = 'datatest.json'
15
  REPO_ID = "Eluza133/w1f9"
16
  HF_TOKEN_WRITE = os.getenv("HF_TOKEN") # Токен с правами записи
 
41
  with open(DATA_FILE, 'w', encoding='utf-8') as file:
42
  json.dump(data, file, ensure_ascii=False, indent=4)
43
  upload_db_to_hf()
44
+ logging.info("Данные сохранены и загружены на HF")
45
  except Exception as e:
46
  logging.error(f"Ошибка сохранения данных: {e}")
47
  raise
 
94
  return redirect(url_for('register'))
95
 
96
  # Хешируем пароль
97
+ hashed_password = hashlib.sha256(password.encode('utf-8')).hexdigest()
98
  data['users'][username] = {'password': hashed_password}
99
  save_data(data)
100
  flash('Регистрация успешна! Войдите в систему.')
 
145
  password = request.form.get('password')
146
  data = load_data()
147
 
148
+ hashed_password = hashlib.sha256(password.encode('utf-8')).hexdigest()
149
  if username in data['users'] and data['users'][username]['password'] == hashed_password:
150
  session['username'] = username
151
  return redirect(url_for('video_feed'))
 
194
  @app.route('/logout')
195
  def logout():
196
  session.pop('username', None)
197
+ return redirect(url_for('video_feed'))
198
 
199
+ # Главная страница - лента видео с превью (доступна всем)
200
  @app.route('/')
201
  def video_feed():
 
 
 
202
  data = load_data()
203
  videos = data['videos']
204
+ is_authenticated = 'username' in session
205
  html = '''
206
  <!DOCTYPE html>
207
  <html lang="ru">
 
215
  .video-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; }
216
  .video-item { background: #fff; padding: 15px; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); text-decoration: none; color: #2d3748; }
217
  .video-item img { width: 100%; border-radius: 8px; height: 200px; object-fit: cover; }
218
+ .auth-links, .upload-btn, .logout-btn { display: inline-block; margin: 20px 10px; padding: 10px 20px; background: #3b82f6; color: white; text-align: center; text-decoration: none; border-radius: 8px; }
219
  .logout-btn { background: #ef4444; }
220
  </style>
221
  </head>
222
  <body>
223
  <div class="container">
224
  <h1>Лента видео</h1>
225
+ <div class="auth-links">
226
+ {% if is_authenticated %}
227
+ <a href="/upload" class="upload-btn">Загрузить видео</a>
228
+ <a href="/logout" class="logout-btn">Выйти</a>
229
+ {% else %}
230
+ <a href="/login" class="auth-links">Войти</a>
231
+ <a href="/register" class="auth-links">Зарегистрироваться</a>
232
+ {% endif %}
233
+ </div>
234
  <div class="video-grid">
235
  {% for video in videos %}
236
  <a href="{{ url_for('video_page', title=video['title']) }}" class="video-item">
 
245
  </body>
246
  </html>
247
  '''
248
+ return render_template_string(html, videos=videos, is_authenticated=is_authenticated)
249
 
250
+ # Страница отдельного видео (доступна всем)
251
  @app.route('/video/<title>')
252
  def video_page(title):
 
 
 
253
  data = load_data()
254
  video = next((v for v in data['videos'] if v['title'] == title), None)
255
  if not video:
256
  return "Видео не найдено", 404
257
 
258
+ is_authenticated = 'username' in session
259
  html = '''
260
  <!DOCTYPE html>
261
  <html lang="ru">
 
279
  <p>{{ video['description'] }}</p>
280
  <p>Загрузил: {{ video['uploader'] }} | {{ video['upload_date'] }}</p>
281
  <a href="{{ url_for('video_feed') }}" class="back-btn">Назад к ленте</a>
282
+ {% if not is_authenticated %}
283
+ <p><a href="{{ url_for('login') }}">Войдите</a>, чтобы загрузить свои видео.</p>
284
+ {% endif %}
285
  </div>
286
  </body>
287
  </html>
288
  '''
289
+ return render_template_string(html, video=video, repo_id=REPO_ID, is_authenticated=is_authenticated)
290
 
291
  # Страница загрузки видео (только для авторизованных)
292
  @app.route('/upload', methods=['GET', 'POST'])
293
  def upload_video():
294
  if 'username' not in session:
295
+ flash('Войдите, чтобы загрузить видео!')
296
  return redirect(url_for('login'))
297
 
298
  if request.method == 'POST':