Bonsoir,
Ayant fait du PHP pendant presque 10 ans à faible niveau mais m'ayant permis de réaliser pas mal de petits sitesweb, je m'essaie aujourd'hui à Django/Python pour refaire mon site principal.
Je commence donc par l'inscription des utilisateurs, et l'ai presque finie. J'aimerais savoir si le code écrit était correct ou s'il me fallait revoir certaines choses.
Pourriez-vous vérifier ce code et me dire ce qui ne va pas ?
Merci d'avance.
membres.models.py:
membres.forms.py (je n'ai pas encore fini mes vérifications, je dois gérer le cas de l'unicité des utilisateurs et une regex pour l'email):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User) slug = models.SlugField(max_length=30) avatar = models.ImageField(null=True, blank=True, upload_to="images/") def __str__(self): return self.user class UserProfilePublic(models.Model): FREQUENCY_CHOICES = ( ('', ''), ('1', 'Moins de 2 romans'), ('2', 'Entre 2 et 5 romans'), ('3', 'Entre 6 et 10 romans'), ('4', 'Plus de 2 romans') ) user = models.OneToOneField(User) website = models.URLField(blank=True) facebook = models.URLField(blank=True) twitter = models.URLField(blank=True) google = models.URLField(blank=True) hobbies = models.CharField(max_length=250, blank=True) books_frequency = models.CharField(max_length=1, choices=FREQUENCY_CHOICES, default='') favorite_types_of_book = models.TextField(blank=True) favorite_books = models.TextField(blank=True) quote = models.CharField(max_length=250, blank=True) def __str__(self): return self.user class UserProfilePrivate(models.Model): user = models.OneToOneField(User) address = models.CharField(max_length=250, blank=True) address_bis = models.CharField(max_length=250, blank=True) zipcode = models.CharField(max_length=5, blank=True) address_bis = models.CharField(max_length=30, blank=True) def __str__(self): return self.user
membres.views.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from django import forms class RegisterForm(forms.Form): username = forms.CharField(min_length=5, max_length=30, required=True) email = forms.EmailField(max_length=75, required=True) password = forms.CharField(widget=forms.PasswordInput, required=True) password_check = forms.CharField(widget=forms.PasswordInput, required=True) def clean(self): cleaned_data = super(RegisterForm, self).clean() password = cleaned_data.get('password') password_check = cleaned_data.get('password_check') # Username # Email # Password if password_check != password: msg = "Le mot de passe et sa confirmation doivent être identiques" self.add_error('password', msg) return cleaned_data
Quelques remarques : Slugify ne me convient pas, en existe-t-il un plus puissant ? Puis-je, sinon, modifier Slugify et si oui comment ? J'ai entendu parler de post_save mais ne comprend pas du tout, mais alors pas du tout comment le faire fonctionner dans mon cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 from django.shortcuts import render from django.template.defaultfilters import slugify from django.contrib.auth.models import User from membres.models import UserProfile, UserProfilePublic, UserProfilePrivate from membres.forms import RegisterForm def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'].strip() email = form.cleaned_data['email'] password = form.cleaned_data['password'] slug = slugify(username) user = User.objects.create_user(username, email, password) profile = UserProfile(user= user, slug= slug) profile.save() profile_public = UserProfilePublic(user= user) profile_public.save() profile_private = UserProfilePrivate(user= user) profile_private.save() form_validated = True else: form = RegisterForm() return render(request, 'membres/register.html', locals())
Je reviendrai probablement vers vous pour le traitement AJAX du formulaire. J'ai fait tout le JS sauf cette partie.
Si ça ne se fait pas de créer un topic pour ce genre de choses, n'hésitez pas à me prévenir, je le supprimerai.
Merci d'avance et bonne soirée.
Cordialement,
Partager