Adds puppet quick links to dropdown menu, implements views and adds tests. Converts index view to CBV.

This commit is contained in:
Johnny 2018-10-24 21:11:17 +00:00
parent 73456a3d8c
commit f083cf61c3
4 changed files with 65 additions and 18 deletions

View file

@ -15,8 +15,9 @@ from django.core.exceptions import PermissionDenied
from django.db.models.functions import Lower
from django.http import HttpResponseBadRequest, HttpResponseRedirect, Http404
from django.shortcuts import render
from django.urls import reverse_lazy
from django.urls import reverse, reverse_lazy
from django.views.generic import View, TemplateView, ListView, DetailView, FormView
from django.views.generic.base import RedirectView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from evennia import SESSION_HANDLER
@ -102,20 +103,6 @@ def _gamestats():
return pagevars
def page_index(request):
"""
Main root page.
"""
# handle webclient-website shared login
_shared_login(request)
# get game db stats
pagevars = _gamestats()
return render(request, 'index.html', pagevars)
def to_be_implemented(request):
"""
A notice letting the user know that this particular feature hasn't been
@ -149,6 +136,20 @@ def admin_wrapper(request):
# Class-based views
#
class EvenniaIndexView(TemplateView):
# Display this HTML page
template_name = 'website/index.html'
# Display these variables on it
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context object
context = super(EvenniaIndexView, self).get_context_data(**kwargs)
# Add game statistics and other pagevars
context.update(_gamestats())
return context
class EvenniaCreateView(CreateView):
@property
@ -324,6 +325,22 @@ class CharacterMixin(object):
# Return a queryset consisting of those characters
return self.model.objects.filter(id__in=ids).order_by(Lower('db_key'))
class CharacterPuppetView(LoginRequiredMixin, CharacterMixin, RedirectView, ObjectDetailView):
def get_redirect_url(self, *args, **kwargs):
# Get the requested character, if it belongs to the authenticated user
char = self.get_object()
next = self.kwargs.get('next', reverse('character-manage'))
if char:
self.request.session['puppet'] = int(char.pk)
messages.success(self.request, "You become '%s'!" % char)
else:
self.request.session['puppet'] = None
messages.error(self.request, "You cannot become '%s'." % char)
return next
class CharacterManageView(LoginRequiredMixin, CharacterMixin, ListView):
paginate_by = 10