Commit 1fa1cff5df72005fbc81eed701e39cc58fb30eeb

Authored by Jailson Dias
1 parent d3c77ab1

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