107 lines
4.3 KiB
Python
107 lines
4.3 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.http import HttpResponse
|
|
from .models import Tutorial, TutorialCategory, TutorialSeries
|
|
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
|
|
from django.contrib.auth import logout, authenticate, login
|
|
from django.contrib import messages
|
|
from django.contrib.auth.decorators import login_required
|
|
from .forms import NewUserForm
|
|
|
|
# Create your views here.
|
|
def single_slug(request, single_slug):
|
|
# first check to see if the url is in categories.
|
|
|
|
categories = [c.category_slug for c in TutorialCategory.objects.all()]
|
|
if single_slug in categories:
|
|
matching_series = TutorialSeries.objects.filter(tutorial_category__category_slug=single_slug)
|
|
series_urls = {}
|
|
|
|
for m in matching_series.all():
|
|
part_one = Tutorial.objects.filter(tutorial_series__tutorial_series=m.tutorial_series).earliest("tutorial_published")
|
|
series_urls[m] = part_one.tutorial_slug
|
|
|
|
return render(request=request,
|
|
template_name='main/category.html',
|
|
context={"tutorial_series": matching_series, "part_ones": series_urls})
|
|
tutorials = [t.tutorial_slug for t in Tutorial.objects.all()]
|
|
|
|
if single_slug in tutorials:
|
|
this_tutorial = Tutorial.objects.get(tutorial_slug=single_slug)
|
|
tutorials_from_series = Tutorial.objects.filter(tutorial_series__tutorial_series=this_tutorial.tutorial_series).order_by('tutorial_published')
|
|
this_tutorial_idx = list(tutorials_from_series).index(this_tutorial)
|
|
|
|
return render(request=request,
|
|
template_name='main/tutorial.html',
|
|
context={"tutorial": this_tutorial,
|
|
"sidebar": tutorials_from_series,
|
|
"this_tut_idx": this_tutorial_idx})
|
|
|
|
@login_required
|
|
def homepage(request):
|
|
return render(request = request,
|
|
template_name='main/categories.html',
|
|
context={"categories": TutorialCategory.objects.all})
|
|
|
|
@login_required
|
|
def about(request):
|
|
messages.success(request, f"method: {request.method}")
|
|
messages.success(request, f"path: {request.path_info}")
|
|
return render(request = request,
|
|
template_name='main/about.html',
|
|
context = {"tutorials":Tutorial.objects.all})
|
|
|
|
def logout_request(request):
|
|
logout(request)
|
|
messages.info(request, "Logged out successfully!")
|
|
## return redirect("main:homepage")
|
|
return redirect("main:login")
|
|
|
|
def login_request(request):
|
|
if request.method == 'POST':
|
|
form = AuthenticationForm(request=request, data=request.POST)
|
|
if form.is_valid():
|
|
username = form.cleaned_data.get('username')
|
|
password = form.cleaned_data.get('password')
|
|
user = authenticate(username=username, password=password)
|
|
if user is not None:
|
|
login(request, user)
|
|
messages.info(request, f"You are now logged in as {username}")
|
|
## return redirect('/')
|
|
return redirect("main:homepage")
|
|
else:
|
|
messages.error(request, "Invalid username or password.")
|
|
else:
|
|
messages.error(request, "Invalid username or password.")
|
|
form = AuthenticationForm()
|
|
return render(request = request,
|
|
template_name = "main/login.html",
|
|
context={"form":form})
|
|
|
|
|
|
def register(request):
|
|
if request.method == "POST":
|
|
form = NewUserForm(request.POST)
|
|
if form.is_valid():
|
|
user = form.save()
|
|
username = form.cleaned_data.get('username')
|
|
messages.success(request, f"New account created: {username}")
|
|
login(request, user)
|
|
return redirect("main:homepage")
|
|
|
|
else:
|
|
for msg in form.error_messages:
|
|
messages.error(request, f"{msg}: {form.error_messages[msg]}")
|
|
|
|
return render(request = request,
|
|
template_name = "main/register.html",
|
|
context={"form":form})
|
|
|
|
form = NewUserForm
|
|
return render(request = request,
|
|
template_name = "main/register.html",
|
|
context={"form":form})
|
|
|
|
@login_required
|
|
def profile(request):
|
|
return render(request,"main/profile.html")
|
|
|