Review profile app #35

Merged
Sulley merged 1 commits from review/profile into master 2020-11-01 08:44:38 +01:00
5 changed files with 53 additions and 41 deletions

View File

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

View File

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

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@ -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/<int:profileid>/", views.profile_update, name="profile_update"),
# re_path(r'^(?P<gymnastid>[0-9]+)/statistics', 'people.views.statistics'),
# re_path(r"^(?P<gymnastid>[0-9]+)$", views.gymnast_detail, name="gymnast_details"),
# re_path(r"^$", views.gymnast_listing, name="gymnasts_list"),
]

View File

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