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 | 1 | # coding=utf-8 |
| 2 | +import re | |
| 2 | 3 | from django import forms |
| 3 | 4 | from django.utils.translation import ugettext_lazy as _ |
| 4 | 5 | from rolepermissions.shortcuts import assign_role |
| ... | ... | @@ -19,6 +20,11 @@ class Validation(forms.ModelForm): |
| 19 | 20 | |
| 20 | 21 | try: |
| 21 | 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 | 28 | return email |
| 23 | 29 | except ValidationError: |
| 24 | 30 | self._errors['email'] = [_('You must insert an email address')] |
| ... | ... | @@ -67,7 +73,7 @@ class RegisterUserForm(Validation): |
| 67 | 73 | model = User |
| 68 | 74 | fields = ['email', 'username', 'last_name', 'social_name', 'image', 'show_email', ] |
| 69 | 75 | widgets = { |
| 70 | - 'email': forms.TextInput(attrs = {'placeholder': _('Email') + ' *'}), | |
| 76 | + 'email': forms.EmailInput(attrs = {'placeholder': _('Email') + ' *'}), | |
| 71 | 77 | 'username': forms.TextInput(attrs = {'placeholder': _('Name') + ' *'}), |
| 72 | 78 | 'last_name': forms.TextInput(attrs = {'placeholder': _('Last Name') + ' *'}), |
| 73 | 79 | 'social_name': forms.TextInput(attrs = {'placeholder': _('Social Name')}), |
| ... | ... | @@ -88,6 +94,7 @@ class ProfileForm(Validation): |
| 88 | 94 | model = User |
| 89 | 95 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image'] |
| 90 | 96 | widgets = { |
| 97 | + 'email': forms.EmailInput, | |
| 91 | 98 | 'description': forms.Textarea, |
| 92 | 99 | 'username': forms.TextInput(attrs = {'readonly': 'readonly'}), |
| 93 | 100 | 'last_name': forms.TextInput(attrs = {'readonly': 'readonly'}), |
| ... | ... | @@ -122,6 +129,7 @@ class UserForm(Validation): |
| 122 | 129 | model = User |
| 123 | 130 | fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image', 'is_staff', 'is_active',] |
| 124 | 131 | widgets = { |
| 132 | + 'email': forms.EmailInput, | |
| 125 | 133 | 'description': forms.Textarea, |
| 126 | 134 | 'image': ResubmitFileWidget(attrs={'accept':'image/*'}), |
| 127 | 135 | } |
| ... | ... | @@ -169,13 +177,18 @@ class ChangePassForm(Validation): |
| 169 | 177 | } |
| 170 | 178 | |
| 171 | 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 | 182 | def clean_email(self): |
| 175 | 183 | email = self.cleaned_data.get('email', '') |
| 176 | 184 | |
| 177 | 185 | try: |
| 178 | 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 | 192 | return email |
| 180 | 193 | except ValidationError: |
| 181 | 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 | 47 | |
| 48 | 48 | def get_queryset(self): |
| 49 | 49 | users = User.objects.all().order_by('social_name','username').exclude(email = self.request.user.email) |
| 50 | - | |
| 50 | + | |
| 51 | 51 | return users |
| 52 | 52 | |
| 53 | 53 | def get_context_data (self, **kwargs): |
| ... | ... | @@ -70,14 +70,14 @@ class SearchView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir |
| 70 | 70 | |
| 71 | 71 | if search == '': |
| 72 | 72 | return redirect(reverse_lazy('users:manage')) |
| 73 | - | |
| 73 | + | |
| 74 | 74 | return super(SearchView, self).dispatch(request, *args, **kwargs) |
| 75 | 75 | |
| 76 | 76 | def get_queryset(self): |
| 77 | 77 | search = self.request.GET.get('search', '') |
| 78 | 78 | |
| 79 | 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 | 81 | return users |
| 82 | 82 | |
| 83 | 83 | def get_context_data (self, **kwargs): |
| ... | ... | @@ -143,9 +143,9 @@ class UpdateView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir |
| 143 | 143 | |
| 144 | 144 | def get_form_kwargs(self): |
| 145 | 145 | kwargs = super(UpdateView, self).get_form_kwargs() |
| 146 | - | |
| 146 | + | |
| 147 | 147 | kwargs.update({'is_edit': True}) |
| 148 | - | |
| 148 | + | |
| 149 | 149 | return kwargs |
| 150 | 150 | |
| 151 | 151 | def form_valid(self, form): |
| ... | ... | @@ -235,7 +235,7 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView) |
| 235 | 235 | self.log_context['dependencies'] = False |
| 236 | 236 | |
| 237 | 237 | user.delete() |
| 238 | - | |
| 238 | + | |
| 239 | 239 | messages.success(self.request, success_msg) |
| 240 | 240 | |
| 241 | 241 | redirect_url = redirect(success_url) |
| ... | ... | @@ -275,10 +275,10 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): |
| 275 | 275 | |
| 276 | 276 | def get_form_kwargs(self): |
| 277 | 277 | kwargs = super(ChangePassView, self).get_form_kwargs() |
| 278 | - | |
| 278 | + | |
| 279 | 279 | kwargs.update({'user': self.request.user}) |
| 280 | 280 | kwargs.update({'request': self.request}) |
| 281 | - | |
| 281 | + | |
| 282 | 282 | return kwargs |
| 283 | 283 | |
| 284 | 284 | def get_object(self): |
| ... | ... | @@ -297,7 +297,7 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView): |
| 297 | 297 | context = super(ChangePassView, self).get_context_data(**kwargs) |
| 298 | 298 | context['title'] = _("Change Password") |
| 299 | 299 | |
| 300 | - return context | |
| 300 | + return context | |
| 301 | 301 | |
| 302 | 302 | class Profile(LoginRequiredMixin, generic.DetailView): |
| 303 | 303 | login_url = reverse_lazy("users:login") |
| ... | ... | @@ -333,7 +333,7 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView): |
| 333 | 333 | def get_context_data(self, **kwargs): |
| 334 | 334 | context = super(UpdateProfile, self).get_context_data(**kwargs) |
| 335 | 335 | context['title'] = _('Update Profile') |
| 336 | - | |
| 336 | + | |
| 337 | 337 | return context |
| 338 | 338 | |
| 339 | 339 | def form_valid(self, form): |
| ... | ... | @@ -406,7 +406,7 @@ class ForgotPassword(generic.FormView): |
| 406 | 406 | |
| 407 | 407 | subject_template_name = 'registration/password_reset_subject.txt' |
| 408 | 408 | email_template_name = 'recover_pass_email_template.html' |
| 409 | - | |
| 409 | + | |
| 410 | 410 | subject = loader.render_to_string(subject_template_name, c) |
| 411 | 411 | # Email subject *must not* contain newlines |
| 412 | 412 | subject = ''.join(subject.splitlines()) |
| ... | ... | @@ -423,7 +423,7 @@ class ForgotPassword(generic.FormView): |
| 423 | 423 | tls = False |
| 424 | 424 | |
| 425 | 425 | backend = EmailBackend( |
| 426 | - host = mailsender.hostname, port = mailsender.port, username = mailsender.username, | |
| 426 | + host = mailsender.hostname, port = mailsender.port, username = mailsender.username, | |
| 427 | 427 | password = mailsender.password, use_tls = tls, fail_silently = False |
| 428 | 428 | ) |
| 429 | 429 | |
| ... | ... | @@ -433,12 +433,12 @@ class ForgotPassword(generic.FormView): |
| 433 | 433 | |
| 434 | 434 | result = self.form_valid(form) |
| 435 | 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 | 437 | return result |
| 438 | - | |
| 438 | + messages.error(request, _('No user is associated with this email address')) | |
| 439 | + | |
| 439 | 440 | result = self.form_invalid(form) |
| 440 | - messages.error(request, _('No user is associated with this email address')) | |
| 441 | - | |
| 441 | + | |
| 442 | 442 | return result |
| 443 | 443 | |
| 444 | 444 | class PasswordResetConfirmView(generic.FormView): |
| ... | ... | @@ -456,7 +456,7 @@ class PasswordResetConfirmView(generic.FormView): |
| 456 | 456 | form = self.get_form() |
| 457 | 457 | |
| 458 | 458 | assert uidb64 is not None and token is not None |
| 459 | - | |
| 459 | + | |
| 460 | 460 | try: |
| 461 | 461 | uid = urlsafe_base64_decode(uidb64) |
| 462 | 462 | user = User._default_manager.get(pk=uid) |
| ... | ... | @@ -466,12 +466,12 @@ class PasswordResetConfirmView(generic.FormView): |
| 466 | 466 | if user is not None and default_token_generator.check_token(user, token): |
| 467 | 467 | if form.is_valid(): |
| 468 | 468 | new_password = form.cleaned_data['new_password'] |
| 469 | - | |
| 469 | + | |
| 470 | 470 | user.set_password(new_password) |
| 471 | 471 | user.save() |
| 472 | - | |
| 472 | + | |
| 473 | 473 | messages.success(request, _('Password reset successfully.')) |
| 474 | - | |
| 474 | + | |
| 475 | 475 | return self.form_valid(form) |
| 476 | 476 | else: |
| 477 | 477 | messages.error(request, _('We were not able to reset your password.')) |
| ... | ... | @@ -504,7 +504,7 @@ def login(request): |
| 504 | 504 | |
| 505 | 505 | return redirect(reverse("home")) |
| 506 | 506 | else: |
| 507 | - messages.error(request, _('System under maintenance. Try again later')) | |
| 507 | + messages.error(request, _('System under maintenance. Try again later')) | |
| 508 | 508 | else: |
| 509 | 509 | messages.error(request, _('E-mail or password are incorrect.')) |
| 510 | 510 | context["username"] = username | ... | ... |