English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tratamento de Formulários Django

Criar formulários no Django, semelhante a criar um modelo. Aqui, precisamos apenas herdar os campos de propriedade da classe Django. Vamos adicionar um arquivo forms.py na pasta myapp que contém os formulários do nosso aplicativo. Vamos criar um formulário de login.

myapp/forms.py

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())

Como pode ser visto acima, o tipo de campo pode usar o parâmetro 'widget' para renderizar em HTML; Nossa instância, ocultamos a senha, não mostramos. Nossa instância, queremos ocultar a senha sem mostrar. O entrada de data é DateInput, CheckboxInput é a caixa de seleção etc.

Usar formulários nas vistas

Existem dois tipos de solicitações HTTP, GET e POST. No Django, como parâmetro passado para o objeto da solicitação da vista, há uma propriedade chamada "método", onde o tipo da solicitação é configurado e todos os dados passados por POST podem ser acessados através do dicionário request.POST.

Vamos em "myapp/views.py criar uma vista de login -

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
#-*- coding: utf-8 -*-
 from myapp.forms import LoginForm
 def login(request):
    username = "not logged in"
    if request.method == "POST":
       #Get the posted form
       MyLoginForm = LoginForm(request.POST)
       if MyLoginForm.is_valid():
          username = MyLoginForm.cleaned_data['username']
    else:
       MyLoginForm = Loginform()
 
    return render(request, 'loggedin.html', {"username" : username})

Esta vista exibirá o resultado do formulário de login em "loggedin.html". Para testá-la, precisamos primeiro do template do formulário de login. Vamos chamá-lo de: login.html。

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
<html>
    <body>
       <form name="form" action="{% url "myapp.views.login" %}" 
          method="POST">{% csrf_token %}
          <div style="max-width:470px;">
             <center> 
                <input type="text" style="margin-left: 0%; margin20%;" 
                   placeholder="Identifiant" name="username" />
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center>
                <input type="password" style="margin-left: 0%; margin20%;" 
                   placeholder="password" name="password" />
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center> 
                <button style="border:0px; background-color:#4285F4color:#-F8top: ; margin
                   %;35height:8px; width:-left: 0%; margin19; type = "submit" 
                   value = "Login" >
                   <strong>Login</strong>
                </button>
             </center>
          </div>
       </form>
    </body>
 </html>

O template exibirá um formulário de login e publicará o resultado que vimos acima no login. Você pode ter notado que o template, isso é apenas para evitar ataques de falsificação de solicitações cruzadas (CSRF) em seu site.

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
{% csrf_token %}

Depois de ter o template de login, precisamos processar o formulário e exibir o template loggedin.html.

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
<html>
    <body>
       Você está: <strong>{{username}}</strong>
    </body>
 </html>

Agora, precisamos apenas das URLs para começar: myapp/urls.py

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns('myapp.views',
    url(r'^connection/', TemplateView.as_view(template_name = 'login.html')),
    url(r'^login/', 'login', name = 'login'))

ao acessar "/myapp/"conexão", obteremos o template login.html exibido da seguinte forma -

Após o envio do formulário acima, o formato é válido. Em nosso exemplo, certifique-se de preencher dois campos, e obteremos o seguinte resultado -

Se seu nome de usuário for polo e se você esquecer a senha, receberá a seguinte mensagem -

usando nossa própria validação de formulário

No exemplo acima, validamos o formulário -

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
MyLoginForm.is_valid()

Usamos apenas o motor de validação de formulários do Django, garantindo apenas que este campo é obrigatório na instância. Agora vamos tentar garantir que o usuário que tenta fazer login exista em nosso banco de dados como item Dreamreal. Para isso, alterar myapp/forms.py é -

# Nome do Arquivo : example.py
# Copyright: 2020 By w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 from myapp.models import Dreamreal
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())
    def clean_message(self):
       username = self.cleaned_data.get("username")
       dbuser = Dreamreal.objects.filter(name = username)
       if not dbuser:
          raise forms.ValidationError("O usuário não existe em nosso db!")
       return username

Agora, após a chamada do método 'is_valid', obteremos a saída correta, apenas quando o usuário estiver em nosso banco de dados. Se quiser consultar os campos do formulário, é necessário adicionar um método começando com 'clean_' e o nome do campo correspondente ao campo da classe do formulário. É importante levantar um erro forms.ValidationError.