[profiles] Add settings form

This commit is contained in:
2025-02-23 22:49:18 -05:00
parent b03da9ab37
commit 93c16d80ec
5 changed files with 113 additions and 1 deletions

View File

@ -0,0 +1,28 @@
from django import forms
from profiles.models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = [
"timezone",
"lastfm_username",
"lastfm_password",
"lastfm_auto_import",
"retroarch_path",
"retroarch_auto_import",
"archivebox_username",
"archivebox_password",
"archivebox_url",
"bgg_username",
"lichess_username",
"webdav_url",
"webdav_user",
"webdav_pass",
"webdav_auto_import",
"ntfy_url",
"ntfy_enabled",
"redirect_to_webpage",
]

View File

@ -0,0 +1,11 @@
from django.urls import path
from profiles import views
app_name = "profiles"
urlpatterns = [
path(
"settings/", views.ProfileDetailView.as_view(), name="profile_settings"
),
]

View File

@ -0,0 +1,17 @@
from django.urls import reverse_lazy
from django.http.response import HttpResponseBadRequest
from django.views.generic import FormView
from profiles.forms import UserProfileForm
class ProfileDetailView(FormView):
form_class = UserProfileForm
template_name = "profiles/settings_form.html"
success_url = reverse_lazy("profiles:profile_settings")
def get_context_data(self, **kwargs):
context_data = super().get_context_data(**kwargs)
if self.request.user.is_anonymous:
return HttpResponseBadRequest
return context_data

View File

@ -0,0 +1,54 @@
{% extends "base_detail.html" %}
{% load mathfilters %}
{% load static %}
{% load naturalduration %}
{% block head_extra %}
<style>
.container {
max-width: 500px;
float:left;
}
p {
margin-bottom: 15px;
}
label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
input[type="text"] {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 14px;
}
input[type="checkbox"] {
margin-left: 5px;
transform: scale(1.2);
}
input:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 5px rgba(0, 123, 255, 0.2);
}
</style>
{% endblock %}
{% block title %}Settings{% endblock %}
{% block details %}
<form action="." method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Save">
</form>
{% endblock %}

View File

@ -36,6 +36,7 @@ from vrobbler.apps.sports.api.views import (
TeamViewSet,
)
from vrobbler.apps.tasks import urls as tasks_urls
from vrobbler.apps.profiles import urls as profiles_urls
from vrobbler.apps.trails import urls as trails_urls
from vrobbler.apps.beers import urls as beers_urls
from vrobbler.apps.foods import urls as foods_urls
@ -63,7 +64,7 @@ router.register(r"players", PlayerViewSet)
router.register(r"sport-events", SportEventViewSet)
router.register(r"teams", TeamViewSet)
router.register(r"users", UserViewSet)
router.register(r"user_profiles", UserProfileViewSet)
router.register(r"profiles", UserProfileViewSet)
urlpatterns = [
path("api/v1/", include(router.urls)),
@ -88,6 +89,7 @@ urlpatterns = [
path("", include(lifeevents_urls, namespace="life-events")),
path("", include(moods_urls, namespace="moods")),
path("", include(scrobble_urls, namespace="scrobbles")),
path("", include(profiles_urls, namespace="profiles")),
path(
"", scrobbles_views.RecentScrobbleList.as_view(), name="vrobbler-home"
),