Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django Carrots

Django Carrots

On Django Carrots, or the issues we've faced when teaching non-programmers how to develop sites in Python and Django (and how to solve them).

4885da39b4bc6628c5599eb9253dcf32?s=128

Marek Stępniowski

December 17, 2012
Tweet

Transcript

  1. None
  2. None
  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. Learn Python The Hard Way

  10. •Instalacja Pythona i pierwsze kroki •Wprowadzenie do Pythona •Rysowanie choinek!

    •Wprowadzenie do Djan o •Inte racja z Facebookiem •Wdrożenie serwisu na Me iTeam
  11. None
  12. virtualenv ipython

  13. Choinka z wiazdek Choinka z kresek Podstawy Djan o Modele

    i ORM Widoki i wzorce URL Obsłu a formularzy Inte racja z Facebookiem Wdrożenie na Me iTeam
  14. Instalacja Pythona Listy i pętle Definiowanie funkcji Obiekty i klasy

    Modele Djan o i ORM Importowanie modułów Wzorce URL Szablony HTML
  15. None
  16. Windows Linux OS X

  17. OS X

  18. libedit

  19. Just install XCode

  20. export LANG="en_US.UTF-8" export LC_COLLATE="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" export LC_MESSAGES="en_US.UTF-8" export LC_MONETARY="en_US.UTF-8"

    export LC_NUMERIC="en_US.UTF-8" export LC_TIME="en_US.UTF-8" export LC_ALL=
  21. Pliki ⌘S

  22. Pliki

  23. None
  24. I � Unicode

  25. >>> u"Łabędź" u'\u0141ab\u0119d\u017a' >>> print u"Łabędź" Łabędź

  26. # -*- coding: utf-8 -*-

  27. None
  28. x = 1 if x > 0: print "x =",

    x print "x > 0" $ cat cond.py $ python cond.py File "test.py", line 4 print "x > 0" ^ IndentationError: unexpected indent
  29. x = 1 if x > 0: ɾɾɾɾprint "x =",

    x ‣ print "x > 0"
  30. x = 1 if x > 0: ɾɾɾɾprint "x =",

    x ‣ print "x > 0" Problem?
  31. None
  32. x = 1 if x > 0 print "x =",

    x print "x > 0" $ cat cond.py $ python cond.py File "test.py", line 2 if x > 0 ^ SyntaxError: invalid syntax
  33. :

  34. Funkcje i pętle

  35. for i in range(n): for j in range(n): print "*"

    * j * ** * ** *** * ** *** **** * ** *** ****
  36. for i in range(n): for j in range(i): print "*"

    * j * ** * ** *** * ** *** **** * ** *** ****
  37. None
  38. for i in range(n): for j in range(i): print "*"

    * j def triangle(k): for j in range(k): print "*" * j for i in range(n): triangle(i) * ** * ** *** * ** *** **** * ** *** ****
  39. * /|\ /_|_\ /|\ / | \ /__|__\ /|\ /

    | \ / | \ /___|___\ |
  40. None
  41. Instalacja Pythona Listy i pętle Definiowanie funkcji Obiekty i klasy

    Modele Djan o i ORM Importowanie modułów Wzorce URL Szablony HTML
  42. $ tree . . ├── carrots │ ├── __init__.py │

    ├── settings.py │ ├── urls.py │ ├── wsgi.py ├── carrots.db ├── manage.py └── polls ├── __init__.py ├── models.py ├── tests.py └── views.py 2 directories, 14 files
  43. $ tree . . ├── carrots │ ├── __init__.py │

    ├── settings.py │ ├── urls.py │ ├── wsgi.py ├── carrots.db ├── manage.py └── polls ├── __init__.py ├── models.py ├── tests.py └── views.py 2 directories, 14 files from polls.models import Poll from django.template import \ Context, Loader from django.http import \ HttpResponse from django.core.urlresolvers \ import reverse
  44. None
  45. urlpatterns = patterns('', url(r'^polls/$', 'polls.views.index'), url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'), url(r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'), url(r'^polls/(?P<poll_id>\d+)/vote/$',

    'polls.views.vote'), url(r'^admin/', include(admin.site.urls)), )
  46. None
  47. Jeśli nie Python, to co?

  48. Assembly Python C Java Lisp Scheme Smalltalk Ruby PHP JavaScript

  49. Python Assembly Lisp Scheme Smalltalk Java C JavaScript PHP Ruby

  50. 28% 19% 18,9% 8,9% 8,2% 4% 3,1% 2,4% 0,7% 0,7%

    Python C++ C Java Perl Ruby JavaScript C# Erlan Haskell
  51. Python or Ruby?: 6 Months on Hacker News http://peak5390.wordpress.com/2012/12/14/python-or-ruby-6-months-on-hacker-news/

  52. Python PHP Smalltalk Assembly Lisp Scheme C Java JavaScript Ruby

  53. None
  54. None
  55. Co dalej?

  56. ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒

    ˒ ˒ ˒ ˒ ˒
  57. ˒ ˒ ˒ ˒ ˒ ˑ

  58. ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺

    ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺
  59. None
  60. Python HTML/CSS Wordpress Desi n JavaScript Java Android Robotyka Blo

    er Flask
  61. ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒ ˒

    ˒ ˒ ˒ ˒ ˒
  62. None
  63. — Unicode (od wersji 3.0)

  64. None
  65. for i in range(n): for j in range(i): print "*"

    * j
  66. for i in range(n): print i for j in range(i):

    print i, j print "*" * j
  67. import pdb pdb.set_trace() for i in range(n): for j in

    range(i): print "*" * j
  68. LEARNABLE PROGRAMMING Bret Victor Learnable Pro rammin http://worrydream.com/LeanablePro rammin /

  69. None
  70. Problem? Opportunity!

  71. •Przyjazne komunikaty o błędach •Paczka z readline dla OS X

    •Wizualny debu er
  72. •Przyjazne ustawienia domyślne •Podpowiadanie importów •Prostsze urlpatterns

  73. None
  74. None
  75. None
  76. Marek Stępniowski http://stepniowski.com @mstepniowski Zdjęcia © Kuba Bożanowski

  77. Geek Girls Carrots http:// eek irlscarrots.pl kamila@stepniowski.com