<form action="" method="GET">
Name: <input type="text" name="name" placeholder="name">
Email: <input type="text" name="email" placeholder="email">
Message: <textarea name="message" placeholder="Some space for your request"></textarea>
<input type="submit">
</form>
from django.http import HttpResponse
from django.template import RequestContext, loader
# Create your views here.
def my_view(request):
template = loader.get_template('my_faulty_template.html')
if request.GET.get('name'):
context = {
'name': request.GET.get('name'),
'email': request.GET.get('email'),
'message': request.GET.get('message'),
}
else:
context={}
return HttpResponse(template.render(context))
<p>Name: {{ name }}</p>
<p>Email: {{ email }}</p>
<p>Message: {{ message }}</p>
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=50)
email = forms.EmailField()
message = forms.CharField(max_length=200, widget=forms.Textarea)
from django.http import HttpResponse
from django.template import RequestContext, loader
from .forms import ContactForm
def my_better_view(request):
template = loader.get_template('my_slightly_better_template.html')
context = {}
if request.method == 'GET':
form = ContactForm(request.GET)
if form.is_valid():
context = {
'name': form.cleaned_data['name'],
'email': form.cleaned_data['email'],
'message': form.cleaned_data['message'],
}
context['form'] = form
return HttpResponse(template.render(context))
<form action="" method="GET">
{{ form }}
<input type="submit">
</form>
<p>Name: {{ name }}</p>
<p>Email: {{ email }}</p>
<p>Message: {{ message }}</p>
form.is_valid()
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=50)
email = forms.EmailField()
message = forms.CharField(max_length=200, widget=forms.Textarea)
def clean_message(self):
message = self.cleaned_data['message']
if 'I Love DjangoCali' not in message:
raise forms.ValidationError("What's wrong with you!!!")
return message
def clean_name(self):
name = self.cleaned_data['name']
if len(name.split()) > 2:
raise forms.ValidationError("Your name is weird!!!")
return name
def clean(self):
cleaned_data = super(ContactForm, self).clean()
name = cleaned_data.get("name", '')
message = cleaned_data.get("message", '')
if len(name.split())==1 and 'i got 2 names' in message:
# Only do something if both fields are valid so far.
raise forms.ValidationError(
"I know you are lying!!!"
)
Suppose we have a CSV file and we want to show it to our users or save it to the database. We need to make sure that every set of data is valid according to our rules. In this case you are not going to display the form, but you can use it to validate it.
my name is cristian,now i try breaking your csv,with dumb random text
three names yay,my@email.com,What should i do?
Two names,valid@email.com,I Love DjangoCali
def my_csv_display(request):
template = loader.get_template('my_csv_data_display.html')
context = {}
my_valid_contacts = []
import csv
with open('my_app/csv_file.csv', 'rb') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
for row in reader:
data={
'name': row[0],
'email': row[1],
'message': row[2],
}
form = ContactForm(data=data)
if form.is_valid():
my_valid_contacts.append(
[form.cleaned_data.get('name'),\
form.cleaned_data.get('email'),\
form.cleaned_data.get('message')]
)
context['contact_list'] = my_valid_contacts
return HttpResponse(template.render(context))
PD: The functionality is there, but there is absolutely nothing helping with aesthetics, just the absolutely required bits to make it work.