Tuesday, October 31, 2017

RE: do i always have to reload/return render a page to show the errors? if i press go back on browser, i see screens with the error message

Try using the @never_cache decorator on your login view.

https://docs.djangoproject.com/en/1.11/topics/http/decorators/#django.views.decorators.cache.never_cache

 

 

From: django-users@googlegroups.com [mailto:django-users@googlegroups.com] On Behalf Of fábio andrews rocha marques
Sent: Tuesday, October 31, 2017 9:15 AM
To: Django users
Subject: Re: do i always have to reload/return render a page to show the errors? if i press go back on browser, i see screens with the error message

 

That's a great suggestion. Sure, it will help on situations where i just want the fields to be completed. But there are some fields that require a little more feedback than that. Like, if a username already exists... I check if it already exists using a View and checking on the database. So, after the View checks if the user already exists, i have to render the page again to show the error. 

On Tuesday, October 31, 2017 at 8:37:05 AM UTC-3, Eric Pascual wrote:

Hello
Sorry or I misunderstood your problem but what about using the required field attribute ? It will make such controls and messages be handled directly on the client side.
Best regards.

Eric PASCUAL

Centre Scientifique et Technique du Bâtiment
290 route des Lucioles
06560 SOPHIA ANTIPOLIS
http://www.cstb.fr


________________________________________
From: django...@googlegroups.com [django...@googlegroups.com] on behalf of fábio andrews rocha marques [fabioandrews...@gmail.com]
Sent: Tuesday, October 31, 2017 00:46
To: Django users
Subject: do i always have to reload/return render a page to show the errors? if i press go back on browser, i see screens with the error message

Let's say i have a "register a new user" View and on this page, when the user forgets to inform a password or a username, i show a message to him on the same page saying "you forgot the password". The way i do this is by doing this(on my View.py in a function called cadastrarprofessor):

nomeusuario = request.POST['usuario'] #username
nomesenha = request.POST['senha'] #password
nomeemail = request.POST['email'] #email

if not nomeusuario:
return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': False, 'error_message': "informe um usuário", 'nomeemailcadastro':nomeemail, 'nomesenhacadastro':nomesenha})
elif not nomesenha:
return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': False, 'error_message': "informe uma senha", 'nomeemailcadastro':nomeemail, 'nomeusuariocadastro':nomeusuario})
elif not nomeemail:
return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': False, 'error_message': "informe um email", 'nomesenhacadastro':nomesenha,

'nomeusuariocadastro':nomeusuario})

And my template for this page(cadastro.html) is like this:
<meta charset="utf-8"/>
<h1>Cadastro</h1>
<form action="{% url 'cadastrarprofessor' %}" method="post">
{% csrf_token %}
<label for="usuario">Usuário: </label>
{% if nomeusuariocadastro %}
<input id="usuario" type="text" name="usuario" value={{ nomeusuariocadastro }}>
{% else %}
<input id="usuario" type="text" name="usuario" value=""/>
{% endif %}


... (DO THE SAME TO SENHA/PASSWORD AND EMAIL)

<input type="submit" value="Cadastrar"/>
</form>
<form action="{% url 'index' %}" method="post">
<input type="submit" value="Voltar"/>
{% csrf_token %}
</form>
{% if cadastrorealizadocomsucesso is True %}<b>cadastro realizado com sucesso!</b>{% endif %}
{% if error_message %}<p><strong>{{ error_message }}</p></strong>{% endif %}

So, every time the user forgets to mention a username or email or password in this screen, i use render to redirect the user to the same page but this time displaying a error_message. Let's say he did forget to fill the textfield with a username... he goes back to the same page and sees the error message. After that, let's say everything is right and he finally registers a new user, he sees "cadastro realizado com sucesso"(sucessfully registered new user) and stays on the same page. But when he goes back a page(pressing "back" on the browser), instead of going back to the page before the cadastro.html, he goes back to the same page cadastro.html but displaying the error message for the "you forgot to mention your username". I don't want him to go back to the same page with error message, i want to make him go back to my main menu.
Is there a better approach to display error messages on the same page instead of using return render like this:
return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': False, 'error_message': "informe um usuário", 'nomeemailcadastro':nomeemail,'nomesenhacadastro':nomesenha})
?


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com<mailto:django-users+unsubscribe@googlegroups.com>.
To post to this group, send email to django...@googlegroups.com<mailto:django...@googlegroups.com>.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3f70cd29-9edc-4272-a27e-534ee7f1e1a2%40googlegroups.com<https://groups.google.com/d/msgid/django-users/3f70cd29-9edc-4272-a27e-534ee7f1e1a2%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/f73d478e-44ee-40dd-ba61-851f0e0ec5af%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment