Можете помочь мне с созданием сайта на Flask?

Мне поручено создать сайт для медицинского университета, который включает видеоуроки, тексты и тесты. Я уже завершил часть работы, но сталкиваюсь с трудностями при разработке секции для учителей и копирайтеров. Также требуется ограничить доступ к видео, чтобы они могли просматриваться только из локальной сети. Я не уверен, как реализовать сохранение результатов тестов и создать отдельные основные страницы для различных групп. Можете помочь с этими задачами? Мой контакт в Telegram: @kzn_kent.
  • 28 февраля 2025 г. 14:24
Ответы на вопрос 1
Конечно! Я помогу вам с разработкой сайта на Flask. Давайте поэтапно разберем ваши задачи.

### 1. Ограничение доступа к видео по IP-адресу

Чтобы ограничить доступ к видео только для локальной сети, вы можете использовать декоратор, который будет проверять IP-адрес пользователя. Например:

```python
from flask import Flask, request, abort

app = Flask(__name__)

def local_only(f):
    def wrapper(*args, **kwargs):
        if not request.remote_addr.startswith("192.168."):  # замените на вашу локальную сеть
            abort(403)  # Доступ запрещен
        return f(*args, **kwargs)
    return wrapper

@app.route('/video')
@local_only
def video():
    return "Это защищенное видео"
```

### 2. Создание секции для учителей и копирайтеров

Для создания секции, где могут работать учителя и копирайтеры, можно использовать простую систему аутентификации. Например, можно создать страницу входа и ограничить доступ к страницам с помощью декоратора:

```python
from flask import session, redirect, url_for, render_template

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # Здесь должна быть проверка имени пользователя и пароля
        session['user_role'] = 'teacher'  # или 'writer'
        return redirect(url_for('dashboard'))
    return render_template('login.html')

@app.route('/dashboard')
def dashboard():
    if 'user_role' not in session:
        return redirect(url_for('login'))
    
    # Логика отображения dashboard для учителей и копирайтеров
    return render_template('dashboard.html')
```

### 3. Сохранение результатов тестов

Чтобы сохранять результаты тестов, можно создать модель данных (например, с использованием SQLAlchemy) для хранения результатов тестов. Пример:

```python
from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

class TestResult(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer)  # идентификатор пользователя
    score = db.Column(db.Integer)
    test_id = db.Column(db.Integer)

@app.route('/submit_result', methods=['POST'])
def submit_result():
    user_id = session.get('user_id')
    score = request.form['score']
    new_result = TestResult(user_id=user_id, score=score, test_id=request.form['test_id'])
    db.session.add(new_result)
    db.session.commit()
    return "Результат сохранен"
```

### 4. Основные страницы для различных групп

Вы можете использовать маршруты для разных групп, например:

```python
@app.route('/teacher_page')
def teacher_page():
    if session.get('user_role') != 'teacher':
        return redirect(url_for('login'))
    return render_template('teacher_page.html')

@app.route('/writer_page')
def writer_page():
    if session.get('user_role') != 'writer':
        return redirect(url_for('login'))
    return render_template('writer_page.html')
```

### 5. Завершение

Теперь у вас есть основные вещи, которые вам понадобятся. Если нужно больше деталей по конкретному пункту или есть другие задачи, просто дайте знать!
Похожие вопросы