Introduction to django

29
Welcome to Django The Web framework for Perfectionists with deadlines Vlad Voskoboynik November 2012

description

 

Transcript of Introduction to django

Page 1: Introduction to django

Welcome to DjangoThe Web framework for Perfectionists with deadlines

Vlad VoskoboynikNovember 2012

Page 2: Introduction to django

Introduction to Django

• Leading Python Web Framework

• Good for any service, not just Web apps

Page 3: Introduction to django

Why for Perfectionists?

• Emphasizing clean MVC design

• Django apps are reusable by design – DRY Principle

• Extremely easy to unit-test

Page 4: Introduction to django

Key Features

•ORM

• Admin

•URL’s design

• Authentication

• Template engine

• Reusable apps

• Caching

• I18N

•Middleware

•Unit testing

• Integrated GIS

Page 5: Introduction to django

Lots of reusable apps

Hundreds of pluggable apps/components exists for almost any

purpose

Page 6: Introduction to django

How do you develop/run?

• Any IDE (vim, Eclipse, PyCharm etc.)

• Django runs on Linux, Apache/NGINX, MySQL/Postgress,

Python

Page 7: Introduction to django

Design philosophies

• Loose couplingA fundamental goal of Django’s stack is loose coupling. The various layers of the framework shouldn’t “know” about each other unless absolutely necessary.For example, the template system knows nothing about Web requests, the database layer knows nothing about data display and the view system doesn’t care which template system a programmer uses.Although Django comes with a full stack for convenience, the pieces of the stack are independent of another wherever possible.

Page 8: Introduction to django

• Less codeDjango apps should use as little code as possible; they should lack boilerplate. Django should take full advantage of Python’s dynamic capabilities, such as introspection.

• Don’t repeat yourself (DRY)Every distinct concept and/or piece of data should live in one, and only one, place. Redundancy is bad. Normalization is good.The framework, within reason, should deduce as much as possible from as little as possible.

• Explicit is better than implicitThis is a core Python principle listed in PEP 20, and it means Django shouldn’t do too much “magic.” Magic shouldn’t happen unless there’s a really good reason for it.

Page 9: Introduction to django

• ModelModels should encapsulate every aspect of an “object,” following Martin Fowler’s Active Record design pattern.This is why both the data represented by a model and information about it (its human-readable name, options like default ordering, etc.) are defined in the model class; all the information needed to understand a given model should be stored in the model.

Page 10: Introduction to django

• The core goals of the database API are:The database API should allow rich, expressive statements in as little syntax as possible. It should not rely on importing other modules or helper objects.Joins should be performed automatically, behind the scenes, when necessary.Every object should be able to access every related object, systemwide. This access should work both ways. The framework should make it easy to write custom SQL – entire statements, or just custom WHERE clauses as custom parameters to API calls.

Page 11: Introduction to django

• URL design• Loose coupling• URLs in a Django app should not be coupled to the underlying

Python code. Tying URLs to Python function names is a Bad And Ugly Thing.

• Along these lines, the Django URL system should allow URLs for the same app to be different in different contexts. For example, one site may put stories at /stories/, while another may use /news/.

• Infinite flexibilityURLs should be as flexible as possible. Any conceivable URL design should be allowed.

Page 12: Introduction to django

• Don’t invent a programming languageThe template system intentionally doesn’t allow the following:Assignment to variablesAdvanced logicThe goal is not to invent a programming language. The goal is to offer just enough programming-esque functionality, such as branching and looping, that is essential for making presentation-related decisions.The Django template system recognizes that templates are most often written by designers, not programmers, and therefore should not assume Python knowledge.• Safety and securityThe template system, out of the box, should forbid the inclusion of malicious code – such as commands that delete database records.This is another reason the template system doesn’t allow arbitrary Python code.• ExtensibilityThe template system should recognize that advanced template authors may want to extend its technology.This is the philosophy behind custom template tags and filters.

Page 13: Introduction to django

• TemplatesA template is simply a text file. It can generate any text-based format (HTML, XML, CSV, etc.).A template contains variables, which get replaced with values when the template is evaluated, and tags, which control the logic of the template.Below is a minimal template that illustrates a few basics. Each element will be explained later in this document.:{% extends "base_generic.html" %} {% block title %}{{ section.title }}{% endblock %} {% block content %} <h1>{{ section.title }}</h1> {% for story in story_list %} <h2> <a href="{{ story.get_absolute_url }}"> {{ story.headline|upper }} </a> </h2> <p>{{ story.tease|truncatewords:"100" }}</p> {% endfor %} {% endblock %}

Page 14: Introduction to django

Template system• Separate logic from presentationWe see a template system as a tool that controls presentation and presentation-related logic – and that’s it. The template system shouldn’t support functionality that goes beyond this basic goal.• Discourage redundancyThe majority of dynamic Web sites use some sort of common sitewide design – a common header, footer, navigation bar, etc. The Django template system should make it easy to store those elements in a single place, eliminating duplicate code.This is the philosophy behind template inheritance.• Be decoupled from HTMLThe template system shouldn’t be designed so that it only outputs HTML. It should be equally good at generating other text-based formats, or just plain text.

Page 15: Introduction to django

Views• Simplicity• Writing a view should be as simple as writing a Python function.

Developers shouldn’t have to instantiate a class when a function will do.

• Use request objectsViews should have access to a request object – an object that stores metadata about the current request. The object should be passed directly to a view function, rather than the view function having to access the request data from a global variable. This makes it light, clean and easy to test views by passing in “fake” request objects.• Loose coupling• A view shouldn’t care about which template system the developer

uses – or even whether a template system is used at all.• Differentiate between GET and POSTGET and POST are distinct; developers should explicitly use one or the other. The framework should make it easy to distinguish between GET and POST data.

Page 16: Introduction to django

• MiddlewareMiddleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level “plugin” system for globally altering Django’s input or output.Each middleware component is responsible for doing some specific function. For example, Django includes a middleware component, TransactionMiddleware, that wraps the processing of each HTTP request in a database transaction.Django ships with some built-in middleware you can use right out of the box. • Activating middlewareTo activate a middleware component, add it to the MIDDLEWARE_CLASSES tuple in your Django settings.In MIDDLEWARE_CLASSES, each middleware component is represented by a string: the full Python path to the middleware’s class name. For example, here’s the default value created by django-admin.py startproject:

MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', )

Page 17: Introduction to django

Creating a project

What startproject created ?

Development server:Python manage.py runserver

Page 18: Introduction to django
Page 19: Introduction to django

settings.py

Page 20: Introduction to django

Creating APP

Page 21: Introduction to django

Model

Page 22: Introduction to django

Playing with the API

Page 23: Introduction to django
Page 24: Introduction to django

Activating the admin site

settings.py

Page 25: Introduction to django

Activating the admin siteurls.py

Page 26: Introduction to django

Start developer server

Page 27: Introduction to django
Page 28: Introduction to django
Page 29: Introduction to django