Made player config page work

This commit is contained in:
Walter 2025-02-19 01:30:59 +01:00
parent e8f244d279
commit b3d0510161
10 changed files with 72 additions and 52 deletions

View File

@ -50,6 +50,8 @@
right: 0;
position: absolute;
padding: 0;
display: flex;
flex-direction: row;
}
#profile-settings-button, #profile-logout-button {

View File

@ -5,7 +5,7 @@
<div id="profile-box">
<div id="avatar-box">
<img id="avatar" src="{{ user.player.avatar.url }}">
<img id="avatar" src="{{ user.player.avatar.url }}" height=64px width=64px>
</div>
<div id="profile-user">
@ -31,12 +31,11 @@
</div>
<div id="profile-buttons">
<a href="/users/config">
<button id="profile-settings-button">settings</button>
</a>
<a href="/users/logout">
<button id="profile-logout-button">logout</button>
</a>
<form action="/users/config">
<input id="profile-settings-button" type="submit" value="config" />
</form>
<form action="/users/logout">
<input id="profile-logout-button" type="submit" value="logout" />
</form>
</div>
</div>

View File

@ -1,6 +1,6 @@
django==5.1.*
django-crispy-forms
crispy-bulma
crispy-bootstrap4
django-extensions
tqdm
Pillow

View File

@ -39,7 +39,7 @@ INSTALLED_APPS = [
# Plugins
"crispy_forms",
"crispy_bulma",
"crispy_bootstrap4",
"django_extensions",
"django_cleanup.apps.CleanupConfig",
@ -141,7 +141,5 @@ MEDIA_URL = "/media/"
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
CRISPY_ALLOWED_TEMPLATE_PACKS = ("bulma",)
CRISPY_TEMPLATE_PACK = "bulma"
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4"
CRISPY_TEMPLATE_PACK = "bootstrap4"

View File

@ -8,7 +8,8 @@ from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from users.models import Player
from users.validators import usernameValidator
from users.validators import usernameValidator, username_change_validator
from bloonsa_game.models import Config as BloonsaConfig
class UserRegisterForm(UserCreationForm):
field_order = ("username", "password1", "password2")
@ -72,21 +73,19 @@ class UserLoginForm(AuthenticationForm):
]
class UserUpdateForm(forms.ModelForm):
username = forms.CharField(min_length=3,
max_length=16,
label="Username",
required=False,
validators=[usernameValidator, ],
help_text=_("3-16 chars, alphanumeric and _- pls"))
class Meta:
model = User
fields = ["username",]
fields = []
class PlayerUpdateForm(forms.ModelForm):
bio = forms.CharField(max_length=128, required=False)
class Meta:
model = Player
fields = ["avatar", "bio"]
class BloonsaConfigUpdateForm(forms.ModelForm):
class Meta:
model = BloonsaConfig
fields = ["autoplay",]

View File

@ -1,10 +1,14 @@
#config-box {
background-color: black;
background-color: #324299;
font-family: "Comic Sans MS", "Comic Sans", cursive;
color: white;
position: relative;
width: 640px;
height: 600px;
}
#config-box {
display: flex;
flex-direction: row;
}
#config-profile-box {
text-align: left;
}

View File

@ -7,16 +7,17 @@
{% endblock title %}
{% block head %}
<link rel="stylesheet" href="{% static 'users/css/bulma-1.0.3.css' %}">
<link rel="stylesheet" href="{% static 'users/css/config.css' %}">
{% endblock head %}
{% block content %}
<form method="post" id="config-box">
<form method="post" id="config-box" enctype="multipart/form-data">
<div id="config-profile-box">
<div id="profile-settings-text">Profile settings</div>
{% crispy form_player %}
{% crispy form_user %}
{% csrf_token %}
{{ form_user|crispy }}
{{ form_player|crispy }}
{{ form_config|crispy }}
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
<div id="config-bloonsa-box"></div>

View File

@ -1,6 +1,7 @@
from django.contrib.auth import logout
from django.utils import timezone
from bloonsa_game.models import Config
from users.models import Player, Log
actions = Log.Actions
@ -24,6 +25,10 @@ class BloonsaUtil:
if not request.user.is_authenticated:
return
if hasattr(request.user, "player"):
# TODO Optimize this by only doing it on register
if not hasattr(request.user.player, "bloonsa_config"):
bloonsa_config = Config(player=request.user.player)
bloonsa_config.save()
return request.user.player
ip = self.get_ip(request=request)
player = Player(user=request.user,

View File

@ -15,3 +15,11 @@ def usernameValidator(username):
charset = set(string.ascii_letters + string.digits + "_-")
if not all(x in charset for x in username):
raise ValidationError("Username may only contain normal letters, numbers and _-")
def username_change_validator(username):
if len(username) < 3 or len(username) > 16:
raise ValidationError("Username must be between 3-16 characters long")
charset = set(string.ascii_letters + string.digits + "_-")
if not all(x in charset for x in username):
raise ValidationError("Username may only contain normal letters, numbers and _-")

View File

@ -4,7 +4,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from users.forms import UserRegisterForm, UserLoginForm, PlayerUpdateForm, UserUpdateForm
from users.forms import UserRegisterForm, UserLoginForm, PlayerUpdateForm, UserUpdateForm, BloonsaConfigUpdateForm
from users.models import Player
from users.util import bloonsa_util, actions
@ -57,32 +57,36 @@ class LogoutView(TemplateView):
class ConfigView(LoginRequiredMixin, TemplateView):
def get(self, request, *args, **kwargs):
form_config = BloonsaConfigUpdateForm(instance=request.user.player.bloonsa_config)
form_player = PlayerUpdateForm(instance=request.user.player)
form_user = UserUpdateForm(instance=request.user)
return render(request=request,
template_name="users/config.html",
context={"form_player": form_player,
context={"form_config": form_config,
"form_player": form_player,
"form_user": form_user})
# TODO add log
def post(self, request, *args, **kwargs):
form_player = PlayerUpdateForm(request.POST)
form_user = UserUpdateForm(request.POST)
if any((
not form_player.is_valid(),
not form_user.is_valid()
)):
form_config = BloonsaConfigUpdateForm(request.POST,
instance=request.user.player.bloonsa_config)
form_player = PlayerUpdateForm(request.POST,
request.FILES,
instance=request.user.player)
form_user = UserUpdateForm(request.POST, instance=request.user)
"""if not form_player.is_valid() or not form_user.is_valid() or not form_config.is_valid():
return render(request=request,
template_name="users/config.html",
context={
"form_player": form_player,
"form_user": form_user
})
user = form_user.save()
player = form_player.save()
return render(request=request,
template_name="users/config.html",
context={
"form_player": form_player,
"form_user": form_user
})
"form_config": form_config,
"form_player": form_player,
"form_user": form_user})"""
if form_user.is_valid():
form_user.save()
if form_player.is_valid():
form_player.save()
if form_config.is_valid():
form_config.save()
# messages.success(request, "Profile updated successfully")
return redirect("users:config")