PYLADIES PRESENTS:
Build your own blog
   with Django!


                      1
{{ GOALS }}
         Have fun
Learn about web development
     Create something



                              2
{{ LAYOUT }}

Overview of Django Framework
       Code together




                               3
{{ DJANGO }}

Django is to Python
        as
  Rails is to Ruby

                      4
{{ LET’S GET STARTED }}
            Quick note:
         do NOT copy text
on these slides into your text editor.
        Write it out yourself.

                                         5
{{ LET’S GET STARTED }}
   Activate your virtualenv
    $ workon MyBlog
           or
C:UserDesktopProjects
 MyBlogToolsScripts
       activate
                              6
{{ LET’S GET STARTED }}
     Start a Python shell

   (MyBlog)$ python
   And type ‘import django’

   >>> import django
                              7
{{ LET’S GET STARTED }}
Back in the terminal (NOT in the
 python shell), type (one line):

   (MyBlog)$ django-admin.py
  startproject ZagrebWorkshop



                                   8
{{ RUNSERVER }}
  On the terminal/console:
(MyBlog)$ python manage.py runserver


   In a web browser, go to:
        http://localhost:8000


         BAM it works.
                                       9
{{ SETTINGS.PY }}
 Open up settings.py
 DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': 'MyBlog.db',
         'USER': '',
         'PASSWORD': '',
         'HOST': '',
         'PORT': '',
     }
 }
                                                   10
{{ SYNCDB }}
  Back on the terminal/console:
(MyBlog)$ python manage.py syncdb


      and follow prompts.
     BAM your DB is set up.

                                    11
{{ STARTAPP }}
  Back on the terminal/console:
(MyBlog)$ python manage.py startapp MyBlog

(MyBlog)$ cd MyBlog

(MyBlog)$ ls
     OR
(MyBlog)C:UserDesktop> dir

           BAM more files!
                                             12
{{ MODELS.PY }}
            Open up models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=60)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.title


                                                        13
{{ SETTINGS.PY }}
     Return to settings.py file.
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'MyBlog',
)
                                                               14
{{ SYNCDB }}
Back on the terminal/console:
 (MyBlog)$ python manage.py syncdb

        again. Then do:
  (MyBlog)$ python manage.py shell


  Let’s play around a little.
                                     15
{{ SETTINGS.PY }}
     Return to settings.py file.
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'MyBlog',
)
                                                               16
{{ ADMIN }}
   Something is missing.
Create MyBlog/admin.py
from django.contrib import admin

from MyBlog.models import Post

class PostAdmin(admin.ModelAdmin):
    search_fields = ['title']

admin.site.register(Post, PostAdmin)

                                       17
{{ ADMIN }}
Back on the terminal/console:
(MyBlog)$ python manage.py runserver


   In a web browser, go to:
     http://localhost:8000/admin


              woah.
                                       18
{{ URLS }}
             Open urls.py
       And edit for the following:
from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
)

                                                      19
{{ ADMIN }}
Back on the terminal/console:
(MyBlog)$ python manage.py runserver


   In a web browser, go to:
     http://localhost:8000/admin


              woah.
                                       20
{{ URLS }}
    Now go to:

 http://localhost:8000


Missing something...


                         21
{{ URLS }}
            Reopen urls.py
       And edit for the following:
from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', ‘MyBlog.views.home’, name='home'),
    url(r'^(d+)/$', ‘MyBlog.views.post’, name='post'),
    url(r'^admin/', include(admin.site.urls)),
)

                                                          22
{{ ADMIN }}
Back on the terminal/console:
(MyBlog)$ python manage.py runserver


   In a web browser, go to:
       http://localhost:8000/

       Hrmph. No Views.
                                       23
{{ VIEWS }}
Open views.py...

And let’s write two
 views together.


                      24
{{ TEMPLATES }}
Download http://l.ynn.me/SVaCxp &
       unzip/open the file.


      Move the “templates”
     folder to under the main
   “ZagrebWorkshop” directory.
                                    25
{{ TEMPLATES }}

  Move the “static” folder
   to under the second
“ZagrebWorkshop” directory.


                              26
{{ TEMPLATES }}
           Optional: open
 “ZagrebWorkshop/templates/blog/
base.html” and edit for Author, Email,
           and/or Site Title

                                     27
{{ TEMPLATES }}
Optional: If you created a Disqus
 account, copy and paste your
       JavaScript code in:
“ZagrebWorkshop/templates/blog/
           post.html”
                                    28
{{ DIRECTORIES }}
   !"" ZagrebWorkshop/
       #"" MyBlog/
       $   #"" __init__.py
       $   #"" admin.py
       $   #"" models.py
       $   #"" tests.py
       $   #"" views.py
       #"" ZagrebWorkshop/
       $   #"" __init__.py
       $   #"" settings.py
       |   !"" static/
       $   #"" urls.py
       $   #"" wsgi.py
       #"" manage.py
       #"" MyBlog.db
       !"" templates/
           !"" blog/
                             29
{{ SETTINGS.PY }}
      Reopen settings.py
   and add these few bits.
Refer to notes for specific line
          numbers.
https://gist.github.com/4144268
                                  30
{{ COLLECTSTATIC }}

(MyBlog)$ python manage.py collectstatic




                                       31
{{ TA-DA }}
          One last time
(MyBlog)$ python manage.py runserver


    You should see your blog!


                                       32
{{ SETUP HEROKU }}

     Make a venv snapshot
(MyBlog)$ pip freeze > requirements.txt




                                          33
{{ SETUP HEROKU }}
  Make a new file called “Procfile”
       and save it in your main
     “ZagrebWorkshop” directory
web: python manage.py runserver 0.0.0.0:$PORT
                 --noreload


                                                34
{{ SETUP HEROKU }}
 $ git config --global user.name “Your Name”
$ git config --global user.email “Your Email”
                  $ git init
                 $ git add .
   $ git commit -m “My Django Application”




                                            35
{{ SETUP HEROKU }}
       (MyBlog) $ heroku login
       (MyBlog) $ heroku create

Follow the steps for ‘heroku create’.
 Take note of the URL that Heroku
    gives you on your terminal
  (MyBlog) $ git push heroku master
                                        36
{{ DEPLOY }}
 (MyBlog) $ git push heroku master

It may take a couple of minutes.
  Then, navigate to that URL
       from previous step

                                     37

Zagreb workshop

  • 1.
    PYLADIES PRESENTS: Build yourown blog with Django! 1
  • 2.
    {{ GOALS }} Have fun Learn about web development Create something 2
  • 3.
    {{ LAYOUT }} Overviewof Django Framework Code together 3
  • 4.
    {{ DJANGO }} Djangois to Python as Rails is to Ruby 4
  • 5.
    {{ LET’S GETSTARTED }} Quick note: do NOT copy text on these slides into your text editor. Write it out yourself. 5
  • 6.
    {{ LET’S GETSTARTED }} Activate your virtualenv $ workon MyBlog or C:UserDesktopProjects MyBlogToolsScripts activate 6
  • 7.
    {{ LET’S GETSTARTED }} Start a Python shell (MyBlog)$ python And type ‘import django’ >>> import django 7
  • 8.
    {{ LET’S GETSTARTED }} Back in the terminal (NOT in the python shell), type (one line): (MyBlog)$ django-admin.py startproject ZagrebWorkshop 8
  • 9.
    {{ RUNSERVER }} On the terminal/console: (MyBlog)$ python manage.py runserver In a web browser, go to: http://localhost:8000 BAM it works. 9
  • 10.
    {{ SETTINGS.PY }} Open up settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'MyBlog.db', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } 10
  • 11.
    {{ SYNCDB }} Back on the terminal/console: (MyBlog)$ python manage.py syncdb and follow prompts. BAM your DB is set up. 11
  • 12.
    {{ STARTAPP }} Back on the terminal/console: (MyBlog)$ python manage.py startapp MyBlog (MyBlog)$ cd MyBlog (MyBlog)$ ls OR (MyBlog)C:UserDesktop> dir BAM more files! 12
  • 13.
    {{ MODELS.PY }} Open up models.py from django.db import models class Post(models.Model): title = models.CharField(max_length=60) body = models.TextField() created = models.DateTimeField(auto_now_add=True) def __unicode__(self): return self.title 13
  • 14.
    {{ SETTINGS.PY }} Return to settings.py file. INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'MyBlog', ) 14
  • 15.
    {{ SYNCDB }} Backon the terminal/console: (MyBlog)$ python manage.py syncdb again. Then do: (MyBlog)$ python manage.py shell Let’s play around a little. 15
  • 16.
    {{ SETTINGS.PY }} Return to settings.py file. INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'MyBlog', ) 16
  • 17.
    {{ ADMIN }} Something is missing. Create MyBlog/admin.py from django.contrib import admin from MyBlog.models import Post class PostAdmin(admin.ModelAdmin): search_fields = ['title'] admin.site.register(Post, PostAdmin) 17
  • 18.
    {{ ADMIN }} Backon the terminal/console: (MyBlog)$ python manage.py runserver In a web browser, go to: http://localhost:8000/admin woah. 18
  • 19.
    {{ URLS }} Open urls.py And edit for the following: from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), ) 19
  • 20.
    {{ ADMIN }} Backon the terminal/console: (MyBlog)$ python manage.py runserver In a web browser, go to: http://localhost:8000/admin woah. 20
  • 21.
    {{ URLS }} Now go to: http://localhost:8000 Missing something... 21
  • 22.
    {{ URLS }} Reopen urls.py And edit for the following: from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', ‘MyBlog.views.home’, name='home'), url(r'^(d+)/$', ‘MyBlog.views.post’, name='post'), url(r'^admin/', include(admin.site.urls)), ) 22
  • 23.
    {{ ADMIN }} Backon the terminal/console: (MyBlog)$ python manage.py runserver In a web browser, go to: http://localhost:8000/ Hrmph. No Views. 23
  • 24.
    {{ VIEWS }} Openviews.py... And let’s write two views together. 24
  • 25.
    {{ TEMPLATES }} Downloadhttp://l.ynn.me/SVaCxp & unzip/open the file. Move the “templates” folder to under the main “ZagrebWorkshop” directory. 25
  • 26.
    {{ TEMPLATES }} Move the “static” folder to under the second “ZagrebWorkshop” directory. 26
  • 27.
    {{ TEMPLATES }} Optional: open “ZagrebWorkshop/templates/blog/ base.html” and edit for Author, Email, and/or Site Title 27
  • 28.
    {{ TEMPLATES }} Optional:If you created a Disqus account, copy and paste your JavaScript code in: “ZagrebWorkshop/templates/blog/ post.html” 28
  • 29.
    {{ DIRECTORIES }} !"" ZagrebWorkshop/ #"" MyBlog/ $   #"" __init__.py $   #"" admin.py $   #"" models.py $   #"" tests.py $   #"" views.py #"" ZagrebWorkshop/ $   #"" __init__.py $   #"" settings.py | !"" static/ $   #"" urls.py $   #"" wsgi.py #"" manage.py #"" MyBlog.db !"" templates/ !"" blog/ 29
  • 30.
    {{ SETTINGS.PY }} Reopen settings.py and add these few bits. Refer to notes for specific line numbers. https://gist.github.com/4144268 30
  • 31.
    {{ COLLECTSTATIC }} (MyBlog)$python manage.py collectstatic 31
  • 32.
    {{ TA-DA }} One last time (MyBlog)$ python manage.py runserver You should see your blog! 32
  • 33.
    {{ SETUP HEROKU}} Make a venv snapshot (MyBlog)$ pip freeze > requirements.txt 33
  • 34.
    {{ SETUP HEROKU}} Make a new file called “Procfile” and save it in your main “ZagrebWorkshop” directory web: python manage.py runserver 0.0.0.0:$PORT --noreload 34
  • 35.
    {{ SETUP HEROKU}} $ git config --global user.name “Your Name” $ git config --global user.email “Your Email” $ git init $ git add . $ git commit -m “My Django Application” 35
  • 36.
    {{ SETUP HEROKU}} (MyBlog) $ heroku login (MyBlog) $ heroku create Follow the steps for ‘heroku create’. Take note of the URL that Heroku gives you on your terminal (MyBlog) $ git push heroku master 36
  • 37.
    {{ DEPLOY }} (MyBlog) $ git push heroku master It may take a couple of minutes. Then, navigate to that URL from previous step 37