فهرست منبع

[profiles] Add settings form

Colin Powell 2 ماه پیش
والد
کامیت
93c16d80ec

+ 28 - 0
vrobbler/apps/profiles/forms.py

@@ -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",
+        ]

+ 11 - 0
vrobbler/apps/profiles/urls.py

@@ -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"
+    ),
+]

+ 17 - 0
vrobbler/apps/profiles/views.py

@@ -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

+ 54 - 0
vrobbler/templates/profiles/settings_form.html

@@ -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 %}

+ 3 - 1
vrobbler/urls.py

@@ -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"
     ),