From fbf5884fa37885df3ab1aa532489f170a9342a2d Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Tue, 27 Oct 2020 17:44:49 +0100 Subject: [PATCH] Review `profile` app In principle, it only contains documentation changes Remarks have been sent as tickets: * #34 * #33 --- src/profile/admin.py | 3 +-- src/profile/models.py | 31 +++++++++++---------------- src/profile/tests.py | 3 --- src/profile/urls.py | 7 ++---- src/profile/views.py | 50 ++++++++++++++++++++++++++++++++----------- 5 files changed, 53 insertions(+), 41 deletions(-) delete mode 100644 src/profile/tests.py diff --git a/src/profile/admin.py b/src/profile/admin.py index 399993a..89ef764 100644 --- a/src/profile/admin.py +++ b/src/profile/admin.py @@ -1,4 +1,4 @@ -# coding=UTF-8 +"""Administration des profils utilisateurs.""" from django.contrib import admin from .models import Profile @@ -6,7 +6,6 @@ from .models import Profile class ProfileAdmin(admin.ModelAdmin): model = Profile - list_display = ("user", "birth_date", "gsm", "template_color", "sidebar_color") diff --git a/src/profile/models.py b/src/profile/models.py index d2130aa..5e88b2d 100644 --- a/src/profile/models.py +++ b/src/profile/models.py @@ -1,16 +1,22 @@ -# coding=UTF-8 +"""Extension et gestion des profils utilisateurs. + +Les profils peuvent enregistrer les informations suivantes: + +* le type de template, +* la couleur de la barre de navigation +* si la barre de navigation doit être cachée ou non +""" -from django.db import models from django.contrib.auth.models import User -from django.db.models.signals import post_save +from django.db import models from django.dispatch import receiver -# https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html class Profile(models.Model): - """ - Classe étendant les informations des utilisateurs/entraineurs de l' - application. + """Classe étendant les informations des utilisateurs/entraineurs de l'application. + + References: + * https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html """ TEMPLATE_CHOICES = ((0, "Dark"), (1, "Light")) @@ -36,14 +42,3 @@ class Profile(models.Model): def __str__(self): return "%s %s" % (self.user.first_name, self.user.last_name) - - -# @receiver(post_save, sender=User) -# def create_user_profile(sender, instance, created, **kwargs): -# if created: -# Profile.objects.create(user=instance) - - -# @receiver(post_save, sender=User) -# def save_user_profile(sender, instance, **kwargs): -# instance.profile.save() diff --git a/src/profile/tests.py b/src/profile/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/src/profile/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/src/profile/urls.py b/src/profile/urls.py index bd489a9..97d6d2c 100644 --- a/src/profile/urls.py +++ b/src/profile/urls.py @@ -1,14 +1,11 @@ -# coding=UTF-8 +"""URLs définissant la gestion des profils utilisateurs.""" from django.urls import path, re_path from . import views + profile_urlpatterns = [ re_path(r"^lookup/$", views.user_lookup, name="user_lookup"), - # re_path(r"^search/$", views.gymnast_listing), path(r"edit//", views.profile_update, name="profile_update"), - # re_path(r'^(?P[0-9]+)/statistics', 'people.views.statistics'), - # re_path(r"^(?P[0-9]+)$", views.gymnast_detail, name="gymnast_details"), - # re_path(r"^$", views.gymnast_listing, name="gymnasts_list"), ] diff --git a/src/profile/views.py b/src/profile/views.py index 63f446e..3e41ef7 100644 --- a/src/profile/views.py +++ b/src/profile/views.py @@ -1,29 +1,51 @@ -# coding=UTF-8 +"""Vues de gestion des profils utilisateurs.""" -from django.shortcuts import render -from django.shortcuts import render, get_object_or_404 from django.contrib.auth.decorators import login_required -from django.views.decorators.http import require_http_methods -from django.http import HttpResponseRedirect, HttpResponse from django.contrib.auth.models import User +from django.db.models import Q +from django.http import HttpResponseRedirect, HttpResponse +from django.shortcuts import get_object_or_404, render +from django.views.decorators.http import require_http_methods + +import simplejson + from .forms import ProfileForm from .models import Profile -from django.db.models import Q -import simplejson @login_required @require_http_methods(["GET"]) def user_lookup(request): - """ - Récupère la liste des gymnastes à la volée suivant des caractères de - recherche entrés. (min 3 caractères) + """Récupère la liste des gymnastes sur base d'un paramètre `pattern`. + + En dessous de 4 caractères (inclus), cette fonction ne retourne rien. + + Les champs analysés sont: + * Le nom + * Le prénom + * Le nom d'utilisateur + + Returns: + Le résultat est formaté en JSON, et contient les champs `id` et `name` d'une personne. + Le champ `name` correspond au champ `username` d'un utilisateur. + + Examples: + >>> /user_lookup/?pattern=bond + [ + { + "id": 1726, + "name": "James_Bond" + }, + { + "id": 187, + "name": "margarine_bonduelle" + } + ] """ results = [] pattern = request.GET.get("pattern", None) - # Ignore queries shorter than length 3 if pattern is not None and len(pattern) > 3: model_results = User.objects.filter( Q(last_name__icontains=pattern) @@ -39,8 +61,10 @@ def user_lookup(request): @login_required @require_http_methods(["GET", "POST"]) def profile_update(request, profileid): - """ - Formulaire de modification d'un profile utilisateur. + """Modification d'un profil utilisateur. + + Args: + profileid (int): L'identifiant du profil utilisateur à modifier. """ profile = get_object_or_404(Profile, pk=profileid) -- 2.39.2