hello readers,
today i will share my idea on django form validation. In a normal way @ something that you learn
from django docs maybe you will do like this
from django.shortcuts import render_to_response
from django import forms
class BiodataForm(forms.Form):
firstname = forms.CharField(widget = forms.TextInput(), required = True)
lastname = forms.CharField(widget = forms.TextInput(), required = True)
dob = forms.DateField(required = True)
def biodataHandler(request):
if request.method == 'POST':
form = BiodataForm(request.POST)
if form.is_valid():
# do something, submit to db,etc..
else:
# display errors
else:
form = BiodataForm()
# display back the form in template
that is a static way on form validation handling..you will repeat it on the other function,right?
remember the DRY(Don’t Repeat Yourself) principle..
my idea is i will create a shortcut function to dynamically handle any form validation,ok lets begin
let say i have a biodata model (note that i use separate model in models folder)
myproject/models/biodata.py
from django.db import models
class Biodata(models.Model):
firstname = models.CharField(max_length = 32, null = False, blank = False)
lastname = models.CharField(max_length = 32, null = False, blank = False)
dob = models.DateField(null = False, blank = False)
and the shortcuts function
myproject/lib/shortcuts.py
def validateform(form, request):
if request.method.lower() == 'post':
f = form(request.POST)
if not f.is_valid() and f.errors:
return (f, f.errors)
elif f.is_valid():
return (f, None)
else:
f = form()
return (f, None)
the controller (note that i put all controllers in controllers folder)
myproject/controllers/biodata.py
from django.shortcuts import render_to_response
from django.views.decorators.http import require_http_methods
from django import forms
from myproject.models.biodata import Biodata
from myproject.lib.shortcuts import validateform
class BiodataForm(forms.ModelForm):
class Meta:
model = Biodata
@require_http_methods(["GET", "POST"])
def biodataHandler(request):
form, errors = validateform(BiodataForm, request)
data = {}
if errors:
data.update({
'errors': errors
})
# display errors
elif not errors and form.data:
# do something, submit to db,etc..
data.update({'form': form})
return render_to_response('biodata.html', data, mimetype='text/html')
that’s it..