Merges accidental branch.

This commit is contained in:
Johnny 2018-10-05 20:19:14 +00:00
commit e7b9ee3536
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 random import choice, randint
class AccountCreationForm(UserCreationForm):
class AccountForm(UserCreationForm):
class Meta:
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)
class CharacterCreationForm(forms.Form):
class CharacterForm(forms.Form):
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.")
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)]
return buckets
class CharacterUpdateForm(CharacterForm):
class Meta:
fields = ('description',)
class ExtendedCharacterCreationForm(forms.Form):
class ExtendedCharacterForm(CharacterForm):
GENDERS = (
('male', 'Male'),

View file

@ -17,8 +17,10 @@ urlpatterns = [
url(r'^auth/register', website_views.AccountCreationView.as_view(), name="register"),
# 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
# we've chosen to use Evennia's custom admin or not.
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.conf import settings
from django.contrib import messages
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.http import HttpResponseRedirect
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.objects.models import ObjectDB
from evennia.accounts.models import AccountDB
from evennia.utils import logger
from evennia.web.website.forms import AccountCreationForm, CharacterCreationForm
from django.contrib.auth import login
from django.utils.text import slugify
_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.
"""
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):
form_class = AccountCreationForm
form_class = AccountForm
template_name = 'website/registration/register.html'
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)
return HttpResponseRedirect(self.success_url)
class CharacterCreationView(LoginRequiredMixin, FormView):
form_class = CharacterCreationForm
class CharacterManageView(LoginRequiredMixin, ListView):
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'
success_url = '/'#reverse_lazy('character-manage')
@ -232,4 +252,4 @@ class CharacterCreationView(LoginRequiredMixin, FormView):
return HttpResponseRedirect(self.success_url)
else:
messages.error(self.request, "Your character could not be created. Please contact an admin.")
return self.form_invalid(form)
return self.form_invalid(form)