dominik.wronski@gmail.com

agenda


  • Co to jest Django

  • Jak działa

  • Dlaczego jest fajny

  • Do czego się nadaje

Co udalo nam sie do tej pory zrobic


   1. Zainstalowac Vagrant
   2. Zainstalowac pip i Django

   3. /manage.py runserver 0.0.0.0:8000



    Django - wysokopoziomowy,
                         opensource'owy framework,                
                         przeznaczony do tworzenia aplikacji internetowych, 
                         napisany w Pythonie.

        


2005


Lawrence Journal-World



<div></div>



<div>
<div></div>
</div>
<div></div> 
                                                






Model - View - Template

WSGI



NASZA APLIKACJA

-----------------

SERVER




---------------------

  



  <---->      

     <!DOCTYPE=html>
     <html>
    <head>
             <!-- tutaj ładujemu css  -->
    </head>
     <body>
      
        <ul>
           <li>Ula </li>
           <li>Ala </li>
           <li> Ola </li>
         </ul>

       <!-- tutaj ładujemy .js -->
      </body>
     </html>

     <!DOCTYPE=html>
     <html>
         <head>
              <!-- tutaj ładujemu css i .js -->
          </head>
          <body>

             

             <ul>

                   {% for athlete in athlete_list %}
                       <li>{{athlete.name}}</li>
                   {% endfor %}
              </ul>
         
        </body>

     </html>

{% %}

         {% if athlete_list %}

              Number of athletes:  {{ athlete_list|length }}

         {% elif athlete_in_locker_room_list %}

              Athletes should be out of the locker room soon!

         {% else %}

              No athletes.

         {% endif %}


        
       
{%
extends "base.html" %}

FORMS
from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
from django.shortcuts import render
from django.http import HttpResponseRedirect

def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        # ContactForm was defined in the the previous section
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render(request, 'contact.html', {
        'form': form,
    })

URL

http://blog.com/blogpost/default.asp?
sid=9DF4BC0580DF11D3ACB60090271E26A8
&command=freelist.


http://blog.com/blog/1

# URLconf
from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^blog/$', 'blog.views.page'),
    url(r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
)

# View (in blog/views.py)
def page(request, num="1"):
    # Output the appropriate page of blog entries, according to num.
    ...
Web development

                      1. Próbujemy zrozumieć process
                      2. Projektujemy strukturę bazy danych
                      3. Projektujemy panel admina
                      4. Piszemy <clue> naszej aplikacji
                      5. Frontend


from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

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

Person.objects.filter(
...     first_name='The Beatles',
...     last_name=''

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase',
    }
}
DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}


Co omowilismy


   1. html
   2. client side vs server side
   3.  MVC
 


Prosta Apka

1. Tworzenie modeli 
2. Migracje
3. urls 
4. widoki

Jak radzic sobie z bledami


    1. Zobacz jaki blad jest w terminalu
    2. Wyszukaj go na stackoverflow
    3. W prawie 50% musisz cos dociagnac przez pip albo apt-get
    4. W pozostalych prawie 50% zaponialas przecinka
    5. W pozostalych przypadkach to jest trudniejsze 

Regex


Some people, when confronted with a problem, think "I know, I'll use regular expressions."        Now they have two problems.

https://github.com/Chive/django-poll-app

Czy sie skaluje




A o co dokładnie pytasz?






link

Kto uzywa Django


   

   





DATABASES = {
    'auth_db': {
        'NAME': 'auth_db',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'swordfish',
    },
    'master': {
        'NAME': 'master',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'spam',
    },
    'slave1': {
        'NAME': 'slave1',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'eggs',
    },
    'slave2': {
        'NAME': 'slave2',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'bacon',
    },
}

import random

class MasterSlaveRouter(object):
    def db_for_read(self, model, **hints):
        """
        Reads go to a randomly-chosen slave.
        """
        return random.choice(['slave1', 'slave2'])

    def db_for_write(self, model, **hints):
        """
        Writes always go to master.
        """
        return 'master'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Relations between objects are allowed if both objects are
        in the master/slave pool.
        """
        db_list = ('master', 'slave1', 'slave2')
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return None

    def allow_syncdb(self, db, model):
        """
        All non-auth models end up in this pool.
        """
        return True

Pomysly

  • czytnik RSS blogow z Wroclawia
  • Ogame / Mafia Wars / SchemeVerse

  • strona podająca odległość (w kliknięciach) pomiędzy dwoma haslami na wikipedii

  • Flatmate$ aplikacja do balansowania wydatkow miedzyuzytkownikami

  • aplikacja do oceniania mieszkań

  • aplikacja rozpoznaje co jest na zdjeciu, np czerwona sukienka i przeszukje pinterest zeby zarekomendowac pasujace buty.

  • w której knajpie jest teraz fajnie

Linki


Django tutorial

Django book


WiT - Ep2 - Django Introduction

By Dominik Wronski

WiT - Ep2 - Django Introduction

  • 2,523