Slide 1

Slide 1 text

The Web framework for perfectionists with deadlines

Slide 2

Slide 2 text

The " " is silent.

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

The Web framework for perfectionists with deadlines

Slide 5

Slide 5 text

frame·work n. 1. A structure for supporting or enclosing something else. 2. A set of assumptions, concepts, values, and practices that constitutes a way of viewing reality. The American Heritage® Dictionary of the English Language, Fourth Edition copyright ©2000 by Houghton Mifflin Company.

Slide 6

Slide 6 text

frame·work n. 1. A structure for supporting or enclosing something else. 2. A set of conventions that constitutes a way of doing something. The American Heritage® Dictionary of the English Language, Fourth Edition copyright ©2000 by Houghton Mifflin Company.

Slide 7

Slide 7 text

provides a structure and a set of conventions for developing web applications.

Slide 8

Slide 8 text

In the beginning...

Slide 9

Slide 9 text

CGI

Slide 10

Slide 10 text

#!/usr/bin/perl print  "Content-­‐type:  text/html\n\n"; print  <            

Hello!

    HTML exit;

Slide 11

Slide 11 text

You're on your own. http://ra3ndy.deviantart.com/art/Sad-Panda-69204875

Slide 12

Slide 12 text

framework

Slide 13

Slide 13 text

structure + convention convenience elegance security framework

Slide 14

Slide 14 text

structure + convention convenience elegance security framework

Slide 15

Slide 15 text

structure + convention convenience elegance security framework

Slide 16

Slide 16 text

structure + convention convenience elegance security framework

Slide 17

Slide 17 text

Tagxedo (http://www.tagxedo.com)

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

MVC

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Model Template View persistence presentation personality

Slide 23

Slide 23 text

Model Template View data

Slide 24

Slide 24 text

Model Template View data presentation

Slide 25

Slide 25 text

Model Template View data presentation control

Slide 26

Slide 26 text

Models are Python classes with state and behavior

Slide 27

Slide 27 text

from  django.db  import  models class  Band(models.Model):        name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField()        def  make_musical_awesome(self):                #  TODO:  discover  secret  to  success

Slide 28

Slide 28 text

       name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField() from  django.db  import  models class  Band(models.Model):        name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField()        def  make_musical_awesome(self):                #  TODO:  discover  secret  to  success state

Slide 29

Slide 29 text

       def  make_musical_awesome(self):                #  TODO:  discover  secret  to  success from  django.db  import  models class  Band(models.Model):        name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField()        def  make_musical_awesome(self):                #  TODO:  discover  secret  to  success behavior

Slide 30

Slide 30 text

mysql>  DESCRIBE  music_band; +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+ |  Field              |  Type            |  Null  |  Key  |  Default  |  Extra                    | +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+ |  id                    |  int(11)      |  NO      |  PRI  |  NULL        |  auto_increment  | |  name                |  char(100)  |  NO      |          |                  |                                | |  year_formed  |  int(11)      |  NO      |          |                  |                                | +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+

Slide 31

Slide 31 text

field types AutoField BigIntegerField BinaryField BooleanField CharField DateField DateTimeField DecimalField EmailField FileField FilePathField FloatField ImageField IntegerField IPAddressField NullBooleanField PositiveIntegerField SlugField SmallIntegerField TextField TimeField URLField ForeignKey ManyToManyField OneToOneField

Slide 32

Slide 32 text

Model instances can be created, read, updated, and destroyed. CRUD

Slide 33

Slide 33 text

Band.objects.create(        name="The  Detours",        year_formed=1961) Create

Slide 34

Slide 34 text

band  =  Band.objects.get(name="The  Detours") print  band.name The  Detours print  band.year_formed 1961 Read

Slide 35

Slide 35 text

band.name  =  "The  Who" band.year_formed  =  1964 band.save() Update

Slide 36

Slide 36 text

band.delete() Delete

Slide 37

Slide 37 text

INSERT  INTO  music_band  VALUES  ... SELECT  *  FROM  music_band  WHERE  ... UPDATE  music_band  SET  ... DELETE  FROM  music_band  WHERE  ...

Slide 38

Slide 38 text

INSERT  INTO  music_band  VALUES  ... SELECT  *  FROM  music_band  WHERE  ... UPDATE  music_band  SET  ... DELETE  FROM  music_band  WHERE  ...

Slide 39

Slide 39 text

Find just the instances you're looking for...

Slide 40

Slide 40 text

Band.objects.create(        name="RUSH",        year_formed=1968) Band.objects.create(        name="Led  Zeppelin",        year_formed=1968) Band.objects.create(        name="The  Police",        year_formed=1977)

Slide 41

Slide 41 text

bands  =  Band.objects.filter(year_formed=1968) for  band  in  bands:        print  band.name RUSH Led  Zeppelin

Slide 42

Slide 42 text

relationships

Slide 43

Slide 43 text

from  django.db  import  models class  Band(models.Model):        name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField()        members  =  models.ManyToManyField("Musician") class  Musician(models.Model):        name  =  models.CharField(max_length=100)

Slide 44

Slide 44 text

band.members.create(name="Pete  Townshend") band.members.create(name="John  Entwistle") band.members.create(name="Roger  Daltrey") band.members.create(name="Doug  Sandom")

Slide 45

Slide 45 text

doug  =  Musician.objects.get(name="Doug  Sandom") band.members.remove(doug) keith  =  Musician.objects.create(name="Keith  Moon") band.members.add(keith) band.members.clear()

Slide 46

Slide 46 text

managers & querysets

Slide 47

Slide 47 text

Band.objects.filter(year_formed=1968) Model – instances become database rows Manager – methods for managing model instances returns a QuerySet

Slide 48

Slide 48 text

bands  =  Band.objects.filter(year_formed=1968) QuerySet

Slide 49

Slide 49 text

bands  =  Band.objects.filter(year_formed=1968) Iterate for  band  in  bands:        print  band.name

Slide 50

Slide 50 text

bands  =  Band.objects.filter(year_formed=1968)\                                        .exclude(name="RUSH")\                                        .order_by("name") Chain

Slide 51

Slide 51 text

chainable methods filter exclude annotate order_by reverse distinct values values_list dates datetimes none all select_related prefetch_related extra defer only using select_for_update

Slide 52

Slide 52 text

terminal methods get create get_or_create bulk_create count in_bulk iterator latest earliest aggregate exists update delete

Slide 53

Slide 53 text

if  Band.objects.filter(year_formed=1968)\                              .exclude(name="RUSH")\                              .exists():        #  do  something num  =  Band.objects.filter(year_formed=1968)\                                    .exclude(name="RUSH")\                                    .count() print  num

Slide 54

Slide 54 text

field lookups

Slide 55

Slide 55 text

Band.objects.filter(year_formed=1968) field lookups {

Slide 56

Slide 56 text

Band.objects.filter(year_formed=1968,                                        name="RUSH") field lookups {

Slide 57

Slide 57 text

__ mifflin __

Slide 58

Slide 58 text

__ mifflin __ DUNDER

Slide 59

Slide 59 text

Band.objects.filter(name__startswith="R") DUNDER Band.objects.filter(        year_formed__range=[1960,1970])

Slide 60

Slide 60 text

field lookups exact iexact contains icontains in gt gte lt lte startswith istartswith endswith iendswith range year month day week_day hour minute second isnull search regex iregex

Slide 61

Slide 61 text

span relationships

Slide 62

Slide 62 text

class  Band(models.Model):        name  =  models.CharField(max_length=100)        year_formed  =  models.IntegerField()        members  =  models.ManyToManyField("Musician") class  Musician(models.Model):        name  =  models.CharField(max_length=100) Band.objects.filter(members__name="Keith  Moon")

Slide 63

Slide 63 text

Model Template View data presentation control

Slide 64

Slide 64 text

mustache mustache {{ }}

Slide 65

Slide 65 text

           

{{  band.name  }}  rocks!

   

Slide 66

Slide 66 text

           
               {%  for  band  in  bands  %}                
  •                    {{  band.name  }}                    has  been  rocking  since                    {{  band.year_formed  }}.                
  •            {%  endfor  %}        
   

Slide 67

Slide 67 text

{% for %} loops {% if %} conditionals {% include %} fragments Template Tags

Slide 68

Slide 68 text

{{ name|title }} {{ names|pluralize }} {{ name|truncatechars:9 }} Template FILTERS

Slide 69

Slide 69 text

Django's template language is intentionally simple.

Slide 70

Slide 70 text

TAG Business logic doesn't belong in templates.

Slide 71

Slide 71 text

If you need more power, write your own tags...

Slide 72

Slide 72 text

Model Template View data presentation control

Slide 73

Slide 73 text

Views are functions that take a request and return a response.

Slide 74

Slide 74 text

def  hello(request):        return  HttpResponse('Hello!')

Slide 75

Slide 75 text

def  hello(request):        return  HttpResponse('Hello!') request

Slide 76

Slide 76 text

response def  hello(request):        return  HttpResponse('Hello!')

Slide 77

Slide 77 text

What's in a Request?

Slide 78

Slide 78 text

URL path request.path /say/hello HTTP method request.method GET Query string request.GET foo=bar&blee=baz Form data request.POST Cookies request.COOKIES key=value HTTP headers request.META Content-type: text/html Logged-in user request.user.name Keyser Söze

Slide 79

Slide 79 text

What's in a RESPONSE?

Slide 80

Slide 80 text

Content response.content Hello! Status code response.status_code 200 HTTP headers response['Content-Type'] text/html Cookies response.set_cookie('foo', 'bar')

Slide 81

Slide 81 text

shortcuts

Slide 82

Slide 82 text

from  django.shortcuts  import  render_to_response def  hello(request):        context  =  {                "name":  "Pete",        }        template  =  "hello.html"        return  render_to_response(template,  context)

Slide 83

Slide 83 text

from  django.shortcuts  import  get_object_or_404 from  django.shortcuts  import  render_to_response def  hello(request):        band  =  get_object_or_404(Band,  name="RUSH")        context  =  {                "band":  band,        }        template  =  "hello.html"        return  render_to_response(template,  context)

Slide 84

Slide 84 text

Your app needs a roadmap

Slide 85

Slide 85 text

from  django.conf.urls  import  patterns from  views  import  hello urlpatterns  =  patterns(        ("hello",  hello), )

Slide 86

Slide 86 text

def  hello(request):        return  HttpResponse('Hello!') http://example.com/hello

Slide 87

Slide 87 text

from  django.conf.urls  import  patterns from  views  import  hello urlpatterns  =  patterns(        ("hello/(.+)",  hello), ) regex

Slide 88

Slide 88 text

def  hello(request,  name):        band  =  get_object_or_404(Band,  name=name)        ... http://example.com/hello/The+Who

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

Model Template View data presentation control

Slide 91

Slide 91 text

but that's not all... forms middleware context processors signals migrations admin site authentication messages redirects site maps sessions static assets

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

Why ?

Slide 96

Slide 96 text

Why ? Python

Slide 97

Slide 97 text

Why ? Python Philosophy

Slide 98

Slide 98 text

Why ? Python Philosophy Ecosystem

Slide 99

Slide 99 text

Tagxedo (http://www.tagxedo.com)

Slide 100

Slide 100 text

n @claymcclure / daemons.net