View
632
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
Python Meta classes and how Django uses them
Lakshman Prasad
Meta Classes
A Design pattern
Dynamically create classes
Enables Flexibility, Good API
Used by Frameworks
Perform “Magic”
Where Meta Classes?
Frameworks, frameworks, frameworks.
Django uses them extensively.
Scrappy, a web scrapping framework.
Flexible Django apps. Eg: Django-registration
Executes the code when encountered
Creates namespace and stores all variables in it
`type` is an inbuilt MetaClass
Dynamic class = Static classes
`__metaclass__` defines metaclases
Meta Class Magic
Define a class extending object
Examined type is string, Magic!
Enables Declarative Syntax
MetaClasses, not always
Simple function decorators
Unintuitive to end developers, unless explained
Python 2.6+ has Class Decorators
But being powerful, where they are needed, indespesible
Django Models
Django Models Creation
Declarative Syntax, No `__metaclass__`
New model created in place
Options into `Options` object
Register in registry called `AppCache`
Add attributes to new model
Inside Django Models
Return the same registered Model from AppCache
Original options and Meta options stored in `_meta`
Add more useful attributes/classes like `DoesnotExist`, `module_name` and `class_name`
Django Forms
Rendering in html
Validation for right data
Displaying errors
Customization options
Provided model, storing to the database
Dynamic Django forms - 1
Forms API is flexible, but often needs Meta Classes
`base_fields` and `fields` list store all fields
Change field attributes while initialization
Dynamic Django Forms - 2
When high complexity, instantiate a form, dynamically
Resources
Python, Django Documentation, Source.
Pro Django, by Marty Alchin
Django-registration v0.7 by James Bennett
Thank You!
: Build Cutting Edge Web Apps.
Small Team of expert Django Developers.
Exclusively develop in Django, Python stack.
@becomingGuru, @uswaretech