Декораторы (Decorators)

Модуль содержит декораторы для контроля доступа на основе ролей пользователей.

Декораторы для контроля доступа в системе проверки домашних заданий.

Содержит декораторы для: - Ограничения доступа только для студентов - Ограничения доступа только для преподавателей - Универсальной проверки роли пользователя

assignments.decorators.student_required(function=None, redirect_url='/')[исходный код]

Декоратор для ограничения доступа только для студентов

assignments.decorators.teacher_required(function=None, redirect_url='/')[исходный код]

Декоратор для ограничения доступа только для преподавателей

assignments.decorators.role_required(role)[исходный код]

Универсальный декоратор для проверки роли

student_required

assignments.decorators.student_required(function=None, redirect_url='/')[исходный код]

Декоратор для ограничения доступа только для студентов

Декоратор для проверки, что текущий пользователь является студентом.

Использование:

@login_required
@student_required
def student_only_view(request):
    # Код доступен только студентам
    pass

Поведение:

  • Если пользователь не авторизован - перенаправление на страницу входа

  • Если пользователь не студент - возвращается HttpResponseForbidden (403)

teacher_required

assignments.decorators.teacher_required(function=None, redirect_url='/')[исходный код]

Декоратор для ограничения доступа только для преподавателей

Декоратор для проверки, что текущий пользователь является преподавателем.

Использование:

@login_required
@teacher_required
def teacher_only_view(request):
    # Код доступен только преподавателям
    pass

Поведение:

  • Если пользователь не авторизован - перенаправление на страницу входа

  • Если пользователь не преподаватель - возвращается HttpResponseForbidden (403)

Примеры использования

Представление только для студентов

from django.contrib.auth.decorators import login_required
from .decorators import student_required

@login_required
@student_required
def homework_detail(request, pk):
    homework = get_object_or_404(Homework, pk=pk)
    return render(request, 'homework_detail.html', {'homework': homework})

Представление только для преподавателей

from django.contrib.auth.decorators import login_required
from .decorators import teacher_required

@login_required
@teacher_required
def create_homework(request):
    if request.method == 'POST':
        form = HomeworkForm(request.POST)
        if form.is_valid():
            form.save()
    return render(request, 'create_homework.html')