Merges accidental branch.

This commit is contained in:
Johnny 2018-10-05 20:19:14 +00:00
commit 221ca9462e
3 changed files with 41 additions and 15 deletions

View file

@ -4,7 +4,7 @@ from django.contrib.auth.forms import UserCreationForm, UsernameField
from evennia.utils import class_from_module from evennia.utils import class_from_module
from random import choice, randint from random import choice, randint
class AccountCreationForm(UserCreationForm): class AccountForm(UserCreationForm):
class Meta: class Meta:
model = class_from_module(settings.BASE_ACCOUNT_TYPECLASS) model = class_from_module(settings.BASE_ACCOUNT_TYPECLASS)
@ -13,7 +13,7 @@ class AccountCreationForm(UserCreationForm):
email = forms.EmailField(help_text="A valid email address. Optional; used for password resets.", required=False) email = forms.EmailField(help_text="A valid email address. Optional; used for password resets.", required=False)
class CharacterCreationForm(forms.Form): class CharacterForm(forms.Form):
name = forms.CharField(help_text="The name of your intended character.") name = forms.CharField(help_text="The name of your intended character.")
age = forms.IntegerField(min_value=3, max_value=99, help_text="How old your character should be once spawned.") age = forms.IntegerField(min_value=3, max_value=99, help_text="How old your character should be once spawned.")
description = forms.CharField(widget=forms.Textarea(attrs={'rows': 3}), max_length=2048, min_length=160, required=False) description = forms.CharField(widget=forms.Textarea(attrs={'rows': 3}), max_length=2048, min_length=160, required=False)
@ -82,8 +82,12 @@ class CharacterCreationForm(forms.Form):
indices = [i for (i, value) in enumerate(buckets) if (value < min_points) or (value < max_points)] indices = [i for (i, value) in enumerate(buckets) if (value < min_points) or (value < max_points)]
return buckets return buckets
class CharacterUpdateForm(CharacterForm):
class Meta:
fields = ('description',)
class ExtendedCharacterCreationForm(forms.Form): class ExtendedCharacterForm(CharacterForm):
GENDERS = ( GENDERS = (
('male', 'Male'), ('male', 'Male'),

View file

@ -17,8 +17,10 @@ urlpatterns = [
url(r'^auth/register', website_views.AccountCreationView.as_view(), name="register"), url(r'^auth/register', website_views.AccountCreationView.as_view(), name="register"),
# Character management # Character management
url(r'^characters/create/', website_views.CharacterCreationView.as_view(), name="chargen"), url(r'^characters/create/$', website_views.CharacterCreateView.as_view(), name="chargen"),
url(r'^characters/manage/$', website_views.CharacterManageView.as_view(), name="manage-characters"),
url(r'^characters/update/(?P<slug>[\w\d\-]+)/(?P<pk>[0-9]+)/$', website_views.CharacterUpdateView.as_view(), name="update-character"),
# Django original admin page. Make this URL is always available, whether # Django original admin page. Make this URL is always available, whether
# we've chosen to use Evennia's custom admin or not. # we've chosen to use Evennia's custom admin or not.
url(r'django_admin/', website_views.admin_wrapper, name="django_admin"), url(r'django_admin/', website_views.admin_wrapper, name="django_admin"),

View file

@ -7,22 +7,17 @@ templates on the fly.
""" """
from django.contrib.admin.sites import site from django.contrib.admin.sites import site
from django.conf import settings from django.conf import settings
from django.contrib import messages
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse, reverse_lazy
from django.views.generic import View, DetailView, ListView, FormView
from evennia import SESSION_HANDLER from evennia import SESSION_HANDLER
from evennia.objects.models import ObjectDB from evennia.objects.models import ObjectDB
from evennia.accounts.models import AccountDB from evennia.accounts.models import AccountDB
from evennia.utils import logger from evennia.utils import logger
from evennia.web.website.forms import AccountCreationForm, CharacterCreationForm
from django.contrib.auth import login from django.contrib.auth import login
from django.utils.text import slugify
_BASE_CHAR_TYPECLASS = settings.BASE_CHARACTER_TYPECLASS _BASE_CHAR_TYPECLASS = settings.BASE_CHARACTER_TYPECLASS
@ -140,9 +135,19 @@ def admin_wrapper(request):
Wrapper that allows us to properly use the base Django admin site, if needed. Wrapper that allows us to properly use the base Django admin site, if needed.
""" """
return staff_member_required(site.index)(request) return staff_member_required(site.index)(request)
class ObjectDetailView(DetailView):
model = ObjectDB
def get_object(self, queryset=None):
obj = super(ObjectDetailView, self).get_object(queryset)
if not slugify(obj.name) == self.kwargs.get('slug'):
raise Http404(u"No %(verbose_name)s found matching the query" %
{'verbose_name': queryset.model._meta.verbose_name})
return obj
class AccountCreationView(FormView): class AccountCreationView(FormView):
form_class = AccountCreationForm form_class = AccountForm
template_name = 'website/registration/register.html' template_name = 'website/registration/register.html'
success_url = reverse_lazy('login') success_url = reverse_lazy('login')
@ -178,8 +183,23 @@ class AccountCreationView(FormView):
messages.success(self.request, "Your account '%s' was successfully created! You may log in using it now." % account.name) messages.success(self.request, "Your account '%s' was successfully created! You may log in using it now." % account.name)
return HttpResponseRedirect(self.success_url) return HttpResponseRedirect(self.success_url)
class CharacterCreationView(LoginRequiredMixin, FormView): class CharacterManageView(LoginRequiredMixin, ListView):
form_class = CharacterCreationForm model = ObjectDB
def get_queryset(self):
# Get IDs of characters owned by account
ids = [getattr(x, 'id') for x in self.request.user.db._playable_characters]
# Return a queryset consisting of those characters
return self.model.filter(id__in=ids)
class CharacterUpdateView(LoginRequiredMixin, FormView):
form_class = CharacterUpdateForm
template_name = 'website/generic_form.html'
success_url = '/'#reverse_lazy('character-manage')
class CharacterCreateView(LoginRequiredMixin, FormView):
form_class = CharacterForm
template_name = 'website/chargen_form.html' template_name = 'website/chargen_form.html'
success_url = '/'#reverse_lazy('character-manage') success_url = '/'#reverse_lazy('character-manage')
@ -232,4 +252,4 @@ class CharacterCreationView(LoginRequiredMixin, FormView):
return HttpResponseRedirect(self.success_url) return HttpResponseRedirect(self.success_url)
else: else:
messages.error(self.request, "Your character could not be created. Please contact an admin.") messages.error(self.request, "Your character could not be created. Please contact an admin.")
return self.form_invalid(form) return self.form_invalid(form)