def cadastrarprofessor(request): if 'terminarcadastroprofessor' in request.POST: # if this is a POST request we need to process the form data if request.method == 'POST': nomeusuario = request.POST['usuario'] nomesenha = request.POST['senha'] nomeemail = request.POST['email'] print("nomeusuario:") print(nomeusuario) 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}) elif User.objects.filter(username=nomeusuario).exists(): return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': False, 'error_message': "nome de usuário já existe", 'nomesenhacadastro':nomesenha, 'nomeusuariocadastro':nomeusuario, 'nomeemailcadastro':nomeemail}) else: usuarionovo = User.objects.create_user(nomeusuario, nomeemail, nomesenha) novoprofessor = Professor(user=usuarionovo,nome=nomeusuario) novoprofessor.save() return render(request,'cadastro.html',{'cadastrorealizadocomsucesso': True}) else: return render(request,'index.html') else: #vou para tela do inicio do cadastro. Era um link entao nao tem POST return render(request, 'cadastro.html',{'cadastrorealizadocomsucesso':False})
On Tuesday, October 31, 2017 at 1:47:31 PM UTC-3, Matthew Pava wrote:
> to do this, i just have to put the @never_cache on my View's method, right?
Yes.
Upon further investigation of your code, I suggest looking into Django forms and utilizing them. Also, you shouldn't need to use two forms on your log-in view. The submit button should go inside the log-in form.
To get back to fixing your current code, do you have an else condition that always returns a render? And, yes, you need to return an HttpResponse object in all of your view functions, which is returned by the render function. It looks like you are always populating 'error_message,' which is why there is always an error_message rendered.
From: django...@googlegroups.com [mailto:django...@
googlegroups.com ] On Behalf Of fábio andrews rocha marques
Sent: Tuesday, October 31, 2017 11:06 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
to do this, i just have to put the @never_cache on my View's method, right? (after importing 'from django.views.decorators.cache import never_cache'). For some reason, when i did this, the page started and i already got the message "usuário já existe"(username already exists) and still the problem i stated occurred. Is it something i am doing wrong? Like, i should remover the return renders from my function after putting @never_cache?
On Tuesday, October 31, 2017 at 11:25:28 AM UTC-3, Matthew Pava wrote:Try using the @never_cache decorator on your login view.
From: django...@googlegroups.com [mailto:django...@
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- <https://9edc-4272-a27e-534ee7f1e1a2% 40googlegroups.com 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...@googlegroups.com .
To post to this group, send email to djang...@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 .--
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 .
To post to this group, send email to djang...@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/ad9b6c53- .88be-4825-98de-e9d1088fb4fe% 40googlegroups.com
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/87265145-9162-4276-bffb-40fd7c4b8710%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment