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 | ... | ... |