rs rts r - - PowerPoint PPT Presentation

rs
SMART_READER_LITE
LIVE PREVIEW

rs rts r - - PowerPoint PPT Presentation

ts strt q rs rts r t rs r


slide-1
SLIDE 1

❘❡♠✐♥❞❡rs

❋✉❧❧ ❉❥❛♥❣♦ ♣r♦❞✉❝ts ❛r❡ ❞✉❡ ♥❡①t ❚❤✉rs❞❛②✦ ▲❡t✬s st❛rt ❜② q✉✐③③✐♥❣ ②♦✉✳

❈❙✸✼✵✱ ●ü♥❛② ✭❊♠♦r②✮ ❙♣r✐♥❣ ✷✵✶✺ ✶ ✴ ✻

slide-2
SLIDE 2

❘❡♠✐♥❞❡rs

❋✉❧❧ ❉❥❛♥❣♦ ♣r♦❞✉❝ts ❛r❡ ❞✉❡ ♥❡①t ❚❤✉rs❞❛②✦ ▲❡t✬s st❛rt ❜② q✉✐③③✐♥❣ ②♦✉✳

❈❙✸✼✵✱ ●ü♥❛② ✭❊♠♦r②✮ ❙♣r✐♥❣ ✷✵✶✺ ✶ ✴ ✻

slide-3
SLIDE 3

❊①✐t q✉✐③✿ P❡rs✐st❡♥t ❉❛t❛ ❛♥❞ ❉❛t❛❜❛s❡s ✐♥ ❲❡❜ ❉❡✈❡❧♦♣♠❡♥t

❚♦ ♠❛✐♥t❛✐♥ ✉s❡r s❡ss✐♦♥s✱ ✇❤❛t ♣✐❡❝❡s ♦❢ ♣❡rs✐st❡♥t ✐♥❢♦r♠❛t✐♦♥ ♠✉st ❜❡ st♦r❡❞ ♦♥ t❤❡ ❝❧✐❡♥t ❛♥❞ t❤❡ s❡r✈❡r s✐❞❡❄ ❲❤❛t ✐s ❙◗▲ ✐♥❥❡❝t✐♦♥ ❛tt❛❝❦ ❛♥❞ ❤♦✇ ❞♦ ②♦✉ ♣r♦t❡❝t ❛❣❛✐♥st ✐t ✐♥ ②♦✉r ✇❡❜❛♣♣❄

❊♥tr② s✉r✈❡②✿ ❉❥❛♥❣♦ ▼♦❞❡❧✲❱✐❡✇✲❈♦♥tr♦❧❧❡r ✭♦r ❚❡♠♣❧❛t❡✮ ❆r❝❤✐t❡❝t✉r❡

❲❤❛t✬s t❤❡ ♣♦✐♥t ♦❢ ❉❥❛♥❣♦✬s ✉r❧s✳♣② ✜❧❡❄ ❲❤❡r❡✬s t❤❡ ❞❛t❛❜❛s❡ ✐♥ ❛ ❉❥❛♥❣♦ ❛♣♣ ❛♥❞ ❤♦✇ ❞♦ ②♦ ♠❛♥✐♣✉❧❛t❡ ✐t❄

slide-4
SLIDE 4

❲❡❜ Pr♦❣r❛♠♠✐♥❣ ✐♥ ❉❥❛♥❣♦

■♥tr♦❞✉❝t✐♦♥ t♦ ✐ts ▼♦❞❡❧✲❱✐❡✇✲❈♦♥tr♦❧❧❡r ✭♦r ❚❡♠♣❧❛t❡✮ ❆r❝❤✐t❡❝t✉r❡ ❈❙✸✼✵ ❙❊ Pr❛❝t✐❝❡ ✫ ❙t❛rt✉♣✱ ❈❡♥❣✐③ ●ü♥❛② ✭❙♦♠❡ s❧✐❞❡s ❝♦✉rt❡s② ♦❢ ❊✉❣❡♥❡ ❆❣✐❝❤st❡✐♥ ❛♥❞ t❤❡ ■♥t❡r♥❡ts✮ ❙♥♦✇♣❛❝♦❧②♣s❡ ❆❚▲ ✷✵✶✹

❈❙✸✼✵✱ ●ü♥❛② ✭❊♠♦r②✮ ❉❥❛♥❣♦ ▼❱❈ ✐♥tr♦ ❙♣r✐♥❣ ✷✵✶✺ ✸ ✴ ✻

slide-5
SLIDE 5
slide-6
SLIDE 6
  • high-level Python Web framework

that encourages rapid development and clean, pragmatic design.

  • Django was designed to handle two challenges:

– intensive deadlines – stringent requirements of the experienced Web developers who wrote it.

  • It lets you build high-performing, elegant Web

applications quickly.

  • Focuses on automating as much as possible

1/24/2013 CS 370, Spring 2012 18

slide-7
SLIDE 7

Approach: Model-View-Controller

  • Model: maintain state of
  • application. Typically

done with a database

  • View: output to client,

usually as HTML code, rendered by a web browser.

  • Controller: interaction

with user. handles user input, processes data and communicates with Model to save state.

1/29/2013 CS 370, Spring 2012 2

Formalized in 1979

slide-8
SLIDE 8

MVC

1/29/2013 CS 370, Spring 2012 3

slide-9
SLIDE 9

✶ ❱✐s✐t♦r✬s ❜r♦✇s❡r ❛s❦s ❢♦r ❛ ❯❘▲✳ ✷ ❉❥❛♥❣♦ ♠❛t❝❤❡s t❤❡ r❡q✉❡st ❛❣❛✐♥st ✐ts ✉r❧s✳♣② ✜❧❡s✳ ✸ ■❢ ❛ ♠❛t❝❤ ✐s ❢♦✉♥❞✱ ❉❥❛♥❣♦ ♠♦✈❡s ♦♥ t♦ t❤❡ ✈✐❡✇

t❤❛t✬s ❛ss♦❝✐❛t❡❞ ✇✐t❤ t❤❡ ❯❘▲✳ ❱✐❡✇s ❛r❡ ❣❡♥❡r❛❧❧② ❢♦✉♥❞ ✐♥s✐❞❡ ❡❛❝❤ ❛♣♣ ✐♥ t❤❡ ✈✐❡✇s✳♣② ✜❧❡✳

✹ ❚❤❡ ✈✐❡✇ ❣❡♥❡r❛❧❧② ❤❛♥❞❧❡s ❛❧❧ t❤❡ ❞❛t❛❜❛s❡

♠❛♥✐♣✉❧❛t✐♦♥✳ ■t ❣r❛❜s ❞❛t❛ ❛♥❞ ♣❛ss❡s ✐t ♦♥✳

✺ ❆ t❡♠♣❧❛t❡ ✭s♣❡❝✐✜❡❞ ✐♥ t❤❡ ✈✐❡✇✮ t❤❡♥ ❞✐s♣❧❛②s t❤❛t

❞❛t❛✳

slide-10
SLIDE 10

Site design in Django: review

  • Goal: make common Web-development tasks fast
  • Step 1: Design your model: model.py (M)

– Automatically create DB, APIs, admin interface

  • Step 2: Design your views: views.py (V)
  • Step 3: Design application logic: urls.py (C)
  • Step 4: Design your templates:
  • Step 5: Enjoy free bells & whistles (caching,

syndication, …)

1/29/2013 CS 370, Spring 2012 5

slide-11
SLIDE 11

Who cares?

  • Spotify uses Django for some of their web sites.
  • Instagram uses Django for their web application [10]
  • Yandex uses Django for their weather forecast site, OpenID provider, blog

hosting service, internal Wiki and internal Mail Archives.

  • Transifex – an open source platform for localization.
  • Bucketlist – uses Django to let users store life goals.
  • The Public Broadcasting Service
  • The Berkeley Graduate School of Journalism
  • Universal Subtitles uses Django for its free and open source collaborative

subtitling site.

  • FreeNAS uses Django for its web interface in its 8.0 major release.
  • PBS's Merlin, a platform for managing member stations' video metadata
  • Google internal stuff (details unknown).
  • ….

1/24/2013 CS 370, Spring 2012 20

slide-12
SLIDE 12

Example Django Project

  • Tutorial: https://docs.djangoproject.com/en/dev/intro/tutorial01/

– https://docs.djangoproject.com/en/dev/intro/tutorial03/

1/29/2013 CS 370, Spring 2012 6

slide-13
SLIDE 13

Django Models

  • A model is the single, definitive source of data

about your data.

  • Each model is a Python class that subclasses

django.db.models.Model.

  • Each attribute of the model represents a database

field.

  • Django gives you an automatically-generated

database-access API

1/29/2013 CS 370, Spring 2012 7

slide-14
SLIDE 14

Example: Person (first_name, last_name)

  • Define Person:

from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)

  • What happens automatically

CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );

1/29/2013 CS 370, Spring 2012 8

slide-15
SLIDE 15

Example: Person (first_name, last_name): 2

  • Each field should be an instance of the Field class

– The database column type (e.g. INTEGER, VARCHAR) – The widget to use in Django's admin interface, if you care to use it (e.g. <input type="text">, <select>). – The minimal validation requirements, used in Django's automatically-generated forms.

  • Field reference:

https://docs.djangoproject.com/en/1.3/ref/models/fields/#model-field-types

  • More details:

https://docs.djangoproject.com/en/1.3/topics/db/models/

1/29/2013 CS 370, Spring 2012 9

slide-16
SLIDE 16

Django Models

  • https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs

1/29/2013 CS 370, Spring 2012 10

slide-17
SLIDE 17

Recap: Django project pieces

  • django-admin.py startproject blog

– blog/

__init__.py: A file required for Python to treat the mysite directory as a package manage.py: A command-line utility that lets you interact with this project. Try: python manage.py help settings.py: Settings/configuration for this project. urls.py: The URLs for this project (“table of contents”)

1/29/2013 CS 370, Spring 2012 12

slide-18
SLIDE 18

Django Project vs. App

1/29/2013 CS 370, Spring 2012 13

slide-19
SLIDE 19

Django architecture encourages this

1/29/2013 CS 370, Spring 2012 14

slide-20
SLIDE 20

Example:

1/29/2013 CS 370, Spring 2012 15

slide-21
SLIDE 21

URL dispatcher

  • A clean, elegant URL scheme is an important detail

in a high-quality Web application.

  • Django lets you design URLs however you want

– There’s no .php or .cgi required

  • Cool URIs don't change:

– http://www.w3.org/Provider/Style/URI

1/29/2013 CS 370, Spring 2012 16

slide-22
SLIDE 22

How Django processes a request

  • 1. Determine the root URLconf module to use. Ordinarily, this

is the value of the ROOT_URLCONF setting, can be changed.

  • 2. Load URLconf and looks for variable urlpatterns. This should

be a Python list, in the format returned by the function django.conf.urls.patterns().

  • 3. Iterate through each URL pattern, in order, and stop at the

first one that matches the requested URL. (REGEX)

  • 4. If one of the regexes matches, import and call the given

view, which is a Python function. The view gets passed an HttpRequest as its first argument and any values captured in the regex as remaining arguments.

  • 5. If no regex matches, or if an exception is raised during any

point in this process, invoke an appropriate error-handling view.

1/29/2013 CS 370, Spring 2012 17

slide-23
SLIDE 23

2-minute REGEX review

1/29/2013 CS 370, Spring 2012 18

Symbol Matches . (dot)

Any single character

\d

Any single digit

[A-Z]

Any character between A and Z (uppercase)

[a-z]

Any character between a and z (lowercase)

[A-Za-z]

Any character between a and z (case-insensitive)

+

One or more of the previous expression (e.g., \d+ matches one or more digits)

[^/]+

One or more characters until (and not including) a forward slash

?

Zero or one of the previous expression (e.g., \d? matches zero or one digits)

*

Zero or more of the previous expression (e.g., \d* matches zero, one or more than one digit)

{1,3}

Between one and three (inclusive) of the previous expression (e.g., \d{1,3} matches one, two or three digits) http://www.djangoproject.com/r/python/re-module/

slide-24
SLIDE 24

Python Regexes, cont’d

  • To capture a value from the URL, just put

parenthesis around it.

  • There's no need to add a leading slash, because

every URL has that.

  • For example, it's ^wiki, not ^/wiki. The 'r' is optional

but recommended.

  • Named regular-expressions: (?P<name>pattern)

– (?P<page_name>[^/]+)/$',

1/29/2013 CS 370, Spring 2012 19

slide-25
SLIDE 25

Example URLconf

from django.conf.urls.defaults import * #http://cs370.mathcs.emory.edu:8100/wiki/CSRF

urlpatterns = patterns('', (r'^wiki/(?P<page_name>[^/]+)/$', 'blog.wiki.views.view_page'), (r'^wiki/(?P<page_name>[^/]+)/edit/$', 'blog.wiki.views.edit_page'), (r'^wiki/(?P<page_name>[^/]+)/save/$', 'blog.wiki.views.save_page'), )

1/29/2013 CS 370, Spring 2012 20

slide-26
SLIDE 26

P❛ss✐♥❣ P❛r❛♠❡t❡rs t♦ ❱✐❡✇s

slide-27
SLIDE 27

Good Design: Including other URLConfs

  • Your urlpatterns can "include" other URLconf

modules.

– Allows modular sites (good design)

  • urlpatterns = patterns('',

(r'^wiki/', include('blog.wiki.urls')) )

– Note But: (wiki/urls.py):

  • (r'^(?P<page_name>[^/]+)/$', 'blog.wiki.views.view_page')
  • More details:

– https://docs.djangoproject.com/en/dev/topics/http/urls/

1/29/2013 CS 370, Spring 2012 21

slide-28
SLIDE 28

Design Pattern: Include URLs

  • There should be one urls.py at the project level, and
  • ne urls.py at each app level. The project level

urls.py should include each of the urls.py under a prefix.:

  • http://agiliq.com/books/djangodesignpatterns/urls.html

1/29/2013 CS 370, Spring 2012 22

slide-29
SLIDE 29

Onwards and upwords…

  • Django book:

– http://www.djangobook.com/en/2.0/

  • Common mistakes/gotchas:

– https://code.djangoproject.com/wiki/NewbieMistakes

  • To be continued…

1/29/2013 CS 370, Spring 2012 29