38222-vm/core/views.py
Flatlogic Bot 3c3b3ecffe v1
2026-02-07 20:22:14 +00:00

158 lines
6.1 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login as auth_login
from .models import Course, Module, Lesson, UserProgress
from .forms import UserUpdateForm, ProfileUpdateForm, CourseForm, ModuleForm, LessonForm
def index(request):
courses = Course.objects.all()
return render(request, 'core/index.html', {'courses': courses})
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
messages.success(request, 'Registration successful!')
return redirect('index')
else:
form = UserCreationForm()
return render(request, 'registration/signup.html', {'form': form})
def course_detail(request, pk):
course = get_object_or_404(Course, pk=pk)
return render(request, 'core/course_detail.html', {'course': course})
def lesson_detail(request, pk):
lesson = get_object_or_404(Lesson, pk=pk)
course = lesson.module.course
if request.user.is_authenticated:
UserProgress.objects.get_or_create(user=request.user, lesson=lesson)
return render(request, 'core/lesson_detail.html', {'lesson': lesson, 'course': course})
@login_required
def profile(request):
if request.method == 'POST':
u_form = UserUpdateForm(request.POST, instance=request.user)
p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('profile')
else:
u_form = UserUpdateForm(instance=request.user)
p_form = ProfileUpdateForm(instance=request.user.profile)
user_progress = UserProgress.objects.filter(user=request.user)
completed_lessons = [progress.lesson for progress in user_progress]
context = {
'u_form': u_form,
'p_form': p_form,
'completed_lessons': completed_lessons
}
return render(request, 'core/profile.html', context)
@login_required
def dashboard(request):
authored_courses = Course.objects.filter(author=request.user)
return render(request, 'core/dashboard.html', {'courses': authored_courses})
@login_required
def course_create(request):
if request.method == 'POST':
form = CourseForm(request.POST, request.FILES)
if form.is_valid():
course = form.save(commit=False)
course.author = request.user
course.save()
messages.success(request, 'Course created successfully!')
return redirect('dashboard')
else:
form = CourseForm()
return render(request, 'core/course_form.html', {'form': form, 'title': 'Create Course'})
@login_required
def course_edit(request, pk):
course = get_object_or_404(Course, pk=pk, author=request.user)
if request.method == 'POST':
form = CourseForm(request.POST, request.FILES, instance=course)
if form.is_valid():
form.save()
messages.success(request, 'Course updated successfully!')
return redirect('dashboard')
else:
form = CourseForm(instance=course)
return render(request, 'core/course_form.html', {'form': form, 'title': 'Edit Course'})
@login_required
def course_delete(request, pk):
course = get_object_or_404(Course, pk=pk, author=request.user)
if request.method == 'POST':
course.delete()
messages.success(request, 'Course deleted successfully!')
return redirect('dashboard')
return render(request, 'core/course_confirm_delete.html', {'object': course})
@login_required
def module_create(request, course_pk):
course = get_object_or_404(Course, pk=course_pk, author=request.user)
if request.method == 'POST':
form = ModuleForm(request.POST)
if form.is_valid():
module = form.save(commit=False)
module.course = course
module.save()
messages.success(request, 'Module added successfully!')
return redirect('course_edit', pk=course.pk)
else:
form = ModuleForm()
return render(request, 'core/module_form.html', {'form': form, 'course': course})
@login_required
def module_edit(request, pk):
module = get_object_or_404(Module, pk=pk, course__author=request.user)
if request.method == 'POST':
form = ModuleForm(request.POST, instance=module)
if form.is_valid():
form.save()
messages.success(request, 'Module updated successfully!')
return redirect('course_edit', pk=module.course.pk)
else:
form = ModuleForm(instance=module)
return render(request, 'core/module_form.html', {'form': form, 'course': module.course})
@login_required
def lesson_create(request, module_pk):
module = get_object_or_404(Module, pk=module_pk, course__author=request.user)
if request.method == 'POST':
form = LessonForm(request.POST)
if form.is_valid():
lesson = form.save(commit=False)
lesson.module = module
lesson.save()
messages.success(request, 'Lesson added successfully!')
return redirect('course_edit', pk=module.course.pk)
else:
form = LessonForm()
return render(request, 'core/lesson_form.html', {'form': form, 'module': module})
@login_required
def lesson_edit(request, pk):
lesson = get_object_or_404(Lesson, pk=pk, module__course__author=request.user)
if request.method == 'POST':
form = LessonForm(request.POST, instance=lesson)
if form.is_valid():
form.save()
messages.success(request, 'Lesson updated successfully!')
return redirect('course_edit', pk=lesson.module.course.pk)
else:
form = LessonForm(instance=lesson)
return render(request, 'core/lesson_form.html', {'form': form, 'module': lesson.module})