Commit 1fa1cff5df72005fbc81eed701e39cc58fb30eeb
1 parent
d3c77ab1
Exists in
master
and in
3 other branches
resolvendo bugs do tipo Problema na verificação do formato do e-mail
Showing
2 changed files
with
36 additions
and
23 deletions
Show diff stats
users/forms.py
1 | # coding=utf-8 | 1 | # coding=utf-8 |
2 | +import re | ||
2 | from django import forms | 3 | from django import forms |
3 | from django.utils.translation import ugettext_lazy as _ | 4 | from django.utils.translation import ugettext_lazy as _ |
4 | from rolepermissions.shortcuts import assign_role | 5 | from rolepermissions.shortcuts import assign_role |
@@ -19,6 +20,11 @@ class Validation(forms.ModelForm): | @@ -19,6 +20,11 @@ class Validation(forms.ModelForm): | ||
19 | 20 | ||
20 | try: | 21 | try: |
21 | validate_email( email ) | 22 | validate_email( email ) |
23 | + v_email = re.compile('[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}') | ||
24 | + if v_email.fullmatch(email) is None: | ||
25 | + self._errors['email'] = [_('You must insert an email address')] | ||
26 | + | ||
27 | + return ValueError | ||
22 | return email | 28 | return email |
23 | except ValidationError: | 29 | except ValidationError: |
24 | self._errors['email'] = [_('You must insert an email address')] | 30 | self._errors['email'] = [_('You must insert an email address')] |
@@ -67,7 +73,7 @@ class RegisterUserForm(Validation): | @@ -67,7 +73,7 @@ class RegisterUserForm(Validation): | ||
67 | model = User | 73 | model = User |
68 | fields = ['email', 'username', 'last_name', 'social_name', 'image', 'show_email', ] | 74 | fields = ['email', 'username', 'last_name', 'social_name', 'image', 'show_email', ] |
69 | widgets = { | 75 | widgets = { |
70 | - 'email': forms.TextInput(attrs = {'placeholder': _('Email') + ' *'}), | 76 | + 'email': forms.EmailInput(attrs = {'placeholder': _('Email') + ' *'}), |
71 | 'username': forms.TextInput(attrs = {'placeholder': _('Name') + ' *'}), | 77 | 'username': forms.TextInput(attrs = {'placeholder': _('Name') + ' *'}), |
72 | 'last_name': forms.TextInput(attrs = {'placeholder': _('Last Name') + ' *'}), | 78 | 'last_name': forms.TextInput(attrs = {'placeholder': _('Last Name') + ' *'}), |
73 | 'social_name': forms.TextInput(attrs = {'placeholder': _('Social Name')}), | 79 | 'social_name': forms.TextInput(attrs = {'placeholder': _('Social Name')}), |
@@ -88,6 +94,7 @@ class ProfileForm(Validation): | @@ -88,6 +94,7 @@ class ProfileForm(Validation): | ||
88 | model = User | 94 | model = User |
89 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image'] | 95 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image'] |
90 | widgets = { | 96 | widgets = { |
97 | + 'email': forms.EmailInput, | ||
91 | 'description': forms.Textarea, | 98 | 'description': forms.Textarea, |
92 | 'username': forms.TextInput(attrs = {'readonly': 'readonly'}), | 99 | 'username': forms.TextInput(attrs = {'readonly': 'readonly'}), |
93 | 'last_name': forms.TextInput(attrs = {'readonly': 'readonly'}), | 100 | 'last_name': forms.TextInput(attrs = {'readonly': 'readonly'}), |
@@ -122,6 +129,7 @@ class UserForm(Validation): | @@ -122,6 +129,7 @@ class UserForm(Validation): | ||
122 | model = User | 129 | model = User |
123 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image', 'is_staff', 'is_active',] | 130 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image', 'is_staff', 'is_active',] |
124 | widgets = { | 131 | widgets = { |
132 | + 'email': forms.EmailInput, | ||
125 | 'description': forms.Textarea, | 133 | 'description': forms.Textarea, |
126 | 'image': ResubmitFileWidget(attrs={'accept':'image/*'}), | 134 | 'image': ResubmitFileWidget(attrs={'accept':'image/*'}), |
127 | } | 135 | } |
@@ -169,13 +177,18 @@ class ChangePassForm(Validation): | @@ -169,13 +177,18 @@ class ChangePassForm(Validation): | ||
169 | } | 177 | } |
170 | 178 | ||
171 | class PassResetRequest(forms.Form): | 179 | class PassResetRequest(forms.Form): |
172 | - email = forms.EmailField(label = _('Email'), max_length = 254, widget = forms.TextInput(attrs = {'placeholder': _('Email') + ' *'})) | 180 | + email = forms.EmailField(label = _('Email'), max_length = 254, widget = forms.EmailInput(attrs = {'placeholder': _('Email') + ' *'})) |
173 | 181 | ||
174 | def clean_email(self): | 182 | def clean_email(self): |
175 | email = self.cleaned_data.get('email', '') | 183 | email = self.cleaned_data.get('email', '') |
176 | 184 | ||
177 | try: | 185 | try: |
178 | validate_email( email ) | 186 | validate_email( email ) |
187 | + v_email = re.compile('[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}') | ||
188 | + if v_email.fullmatch(email) is None: | ||
189 | + self._errors['email'] = [_('You must insert an email address')] | ||
190 | + | ||
191 | + return ValueError | ||
179 | return email | 192 | return email |
180 | except ValidationError: | 193 | except ValidationError: |
181 | self._errors['email'] = [_('You must insert a valid email address')] | 194 | self._errors['email'] = [_('You must insert a valid email address')] |
users/views.py
@@ -47,7 +47,7 @@ class UsersListView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserReq | @@ -47,7 +47,7 @@ class UsersListView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserReq | ||
47 | 47 | ||
48 | def get_queryset(self): | 48 | def get_queryset(self): |
49 | users = User.objects.all().order_by('social_name','username').exclude(email = self.request.user.email) | 49 | users = User.objects.all().order_by('social_name','username').exclude(email = self.request.user.email) |
50 | - | 50 | + |
51 | return users | 51 | return users |
52 | 52 | ||
53 | def get_context_data (self, **kwargs): | 53 | def get_context_data (self, **kwargs): |
@@ -70,14 +70,14 @@ class SearchView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir | @@ -70,14 +70,14 @@ class SearchView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir | ||
70 | 70 | ||
71 | if search == '': | 71 | if search == '': |
72 | return redirect(reverse_lazy('users:manage')) | 72 | return redirect(reverse_lazy('users:manage')) |
73 | - | 73 | + |
74 | return super(SearchView, self).dispatch(request, *args, **kwargs) | 74 | return super(SearchView, self).dispatch(request, *args, **kwargs) |
75 | 75 | ||
76 | def get_queryset(self): | 76 | def get_queryset(self): |
77 | search = self.request.GET.get('search', '') | 77 | search = self.request.GET.get('search', '') |
78 | 78 | ||
79 | users = User.objects.filter(Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)).distinct().order_by('social_name','username').exclude(email = self.request.user.email) | 79 | users = User.objects.filter(Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)).distinct().order_by('social_name','username').exclude(email = self.request.user.email) |
80 | - | 80 | + |
81 | return users | 81 | return users |
82 | 82 | ||
83 | def get_context_data (self, **kwargs): | 83 | def get_context_data (self, **kwargs): |
@@ -143,9 +143,9 @@ class UpdateView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir | @@ -143,9 +143,9 @@ class UpdateView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir | ||
143 | 143 | ||
144 | def get_form_kwargs(self): | 144 | def get_form_kwargs(self): |
145 | kwargs = super(UpdateView, self).get_form_kwargs() | 145 | kwargs = super(UpdateView, self).get_form_kwargs() |
146 | - | 146 | + |
147 | kwargs.update({'is_edit': True}) | 147 | kwargs.update({'is_edit': True}) |
148 | - | 148 | + |
149 | return kwargs | 149 | return kwargs |
150 | 150 | ||
151 | def form_valid(self, form): | 151 | def form_valid(self, form): |
@@ -235,7 +235,7 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView) | @@ -235,7 +235,7 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView) | ||
235 | self.log_context['dependencies'] = False | 235 | self.log_context['dependencies'] = False |
236 | 236 | ||
237 | user.delete() | 237 | user.delete() |
238 | - | 238 | + |
239 | messages.success(self.request, success_msg) | 239 | messages.success(self.request, success_msg) |
240 | 240 | ||
241 | redirect_url = redirect(success_url) | 241 | redirect_url = redirect(success_url) |
@@ -275,10 +275,10 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): | @@ -275,10 +275,10 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): | ||
275 | 275 | ||
276 | def get_form_kwargs(self): | 276 | def get_form_kwargs(self): |
277 | kwargs = super(ChangePassView, self).get_form_kwargs() | 277 | kwargs = super(ChangePassView, self).get_form_kwargs() |
278 | - | 278 | + |
279 | kwargs.update({'user': self.request.user}) | 279 | kwargs.update({'user': self.request.user}) |
280 | kwargs.update({'request': self.request}) | 280 | kwargs.update({'request': self.request}) |
281 | - | 281 | + |
282 | return kwargs | 282 | return kwargs |
283 | 283 | ||
284 | def get_object(self): | 284 | def get_object(self): |
@@ -297,7 +297,7 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): | @@ -297,7 +297,7 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): | ||
297 | context = super(ChangePassView, self).get_context_data(**kwargs) | 297 | context = super(ChangePassView, self).get_context_data(**kwargs) |
298 | context['title'] = _("Change Password") | 298 | context['title'] = _("Change Password") |
299 | 299 | ||
300 | - return context | 300 | + return context |
301 | 301 | ||
302 | class Profile(LoginRequiredMixin, generic.DetailView): | 302 | class Profile(LoginRequiredMixin, generic.DetailView): |
303 | login_url = reverse_lazy("users:login") | 303 | login_url = reverse_lazy("users:login") |
@@ -333,7 +333,7 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): | @@ -333,7 +333,7 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): | ||
333 | def get_context_data(self, **kwargs): | 333 | def get_context_data(self, **kwargs): |
334 | context = super(UpdateProfile, self).get_context_data(**kwargs) | 334 | context = super(UpdateProfile, self).get_context_data(**kwargs) |
335 | context['title'] = _('Update Profile') | 335 | context['title'] = _('Update Profile') |
336 | - | 336 | + |
337 | return context | 337 | return context |
338 | 338 | ||
339 | def form_valid(self, form): | 339 | def form_valid(self, form): |
@@ -406,7 +406,7 @@ class ForgotPassword(generic.FormView): | @@ -406,7 +406,7 @@ class ForgotPassword(generic.FormView): | ||
406 | 406 | ||
407 | subject_template_name = 'registration/password_reset_subject.txt' | 407 | subject_template_name = 'registration/password_reset_subject.txt' |
408 | email_template_name = 'recover_pass_email_template.html' | 408 | email_template_name = 'recover_pass_email_template.html' |
409 | - | 409 | + |
410 | subject = loader.render_to_string(subject_template_name, c) | 410 | subject = loader.render_to_string(subject_template_name, c) |
411 | # Email subject *must not* contain newlines | 411 | # Email subject *must not* contain newlines |
412 | subject = ''.join(subject.splitlines()) | 412 | subject = ''.join(subject.splitlines()) |
@@ -423,7 +423,7 @@ class ForgotPassword(generic.FormView): | @@ -423,7 +423,7 @@ class ForgotPassword(generic.FormView): | ||
423 | tls = False | 423 | tls = False |
424 | 424 | ||
425 | backend = EmailBackend( | 425 | backend = EmailBackend( |
426 | - host = mailsender.hostname, port = mailsender.port, username = mailsender.username, | 426 | + host = mailsender.hostname, port = mailsender.port, username = mailsender.username, |
427 | password = mailsender.password, use_tls = tls, fail_silently = False | 427 | password = mailsender.password, use_tls = tls, fail_silently = False |
428 | ) | 428 | ) |
429 | 429 | ||
@@ -433,12 +433,12 @@ class ForgotPassword(generic.FormView): | @@ -433,12 +433,12 @@ class ForgotPassword(generic.FormView): | ||
433 | 433 | ||
434 | result = self.form_valid(form) | 434 | result = self.form_valid(form) |
435 | messages.success(request, _("Soon you'll receive an email with instructions to set your new password. If you don't receive it in 24 hours, please check your spam box.")) | 435 | messages.success(request, _("Soon you'll receive an email with instructions to set your new password. If you don't receive it in 24 hours, please check your spam box.")) |
436 | - | 436 | + |
437 | return result | 437 | return result |
438 | - | 438 | + messages.error(request, _('No user is associated with this email address')) |
439 | + | ||
439 | result = self.form_invalid(form) | 440 | result = self.form_invalid(form) |
440 | - messages.error(request, _('No user is associated with this email address')) | ||
441 | - | 441 | + |
442 | return result | 442 | return result |
443 | 443 | ||
444 | class PasswordResetConfirmView(generic.FormView): | 444 | class PasswordResetConfirmView(generic.FormView): |
@@ -456,7 +456,7 @@ class PasswordResetConfirmView(generic.FormView): | @@ -456,7 +456,7 @@ class PasswordResetConfirmView(generic.FormView): | ||
456 | form = self.get_form() | 456 | form = self.get_form() |
457 | 457 | ||
458 | assert uidb64 is not None and token is not None | 458 | assert uidb64 is not None and token is not None |
459 | - | 459 | + |
460 | try: | 460 | try: |
461 | uid = urlsafe_base64_decode(uidb64) | 461 | uid = urlsafe_base64_decode(uidb64) |
462 | user = User._default_manager.get(pk=uid) | 462 | user = User._default_manager.get(pk=uid) |
@@ -466,12 +466,12 @@ class PasswordResetConfirmView(generic.FormView): | @@ -466,12 +466,12 @@ class PasswordResetConfirmView(generic.FormView): | ||
466 | if user is not None and default_token_generator.check_token(user, token): | 466 | if user is not None and default_token_generator.check_token(user, token): |
467 | if form.is_valid(): | 467 | if form.is_valid(): |
468 | new_password = form.cleaned_data['new_password'] | 468 | new_password = form.cleaned_data['new_password'] |
469 | - | 469 | + |
470 | user.set_password(new_password) | 470 | user.set_password(new_password) |
471 | user.save() | 471 | user.save() |
472 | - | 472 | + |
473 | messages.success(request, _('Password reset successfully.')) | 473 | messages.success(request, _('Password reset successfully.')) |
474 | - | 474 | + |
475 | return self.form_valid(form) | 475 | return self.form_valid(form) |
476 | else: | 476 | else: |
477 | messages.error(request, _('We were not able to reset your password.')) | 477 | messages.error(request, _('We were not able to reset your password.')) |
@@ -504,7 +504,7 @@ def login(request): | @@ -504,7 +504,7 @@ def login(request): | ||
504 | 504 | ||
505 | return redirect(reverse("home")) | 505 | return redirect(reverse("home")) |
506 | else: | 506 | else: |
507 | - messages.error(request, _('System under maintenance. Try again later')) | 507 | + messages.error(request, _('System under maintenance. Try again later')) |
508 | else: | 508 | else: |
509 | messages.error(request, _('E-mail or password are incorrect.')) | 509 | messages.error(request, _('E-mail or password are incorrect.')) |
510 | context["username"] = username | 510 | context["username"] = username |