Django
by Kevin Wu 2014/10/30
1
0
Agenda
2
 Django
 Framework
 Starting a project / app
 Practice
 Appendix
Django
•Free and open source web application framework, written in Python
•A high-level Python web framework
•Encourages rapid development and clean, pragmatic design
•Follows the model–view–controller architectural pattern
•DRY principles ( vsWET)
Django Reinhardt
Python
Django
Django Reinhardt
•ORM
•Automatic admin interface
•Regex-based URL design
•Templating system
•Cache infrastructure
•Internationalization
•Command-line job framework
Perhaps You’ve Heard Of...
•Disqus
•Instagram
•Mozilla
•OpenStack
•Pinterest
•PolitiFact.com
•Rdio
•TheWashingtonTimes
Framework
The core Django MVC framework consists of an object-relational mapper which mediates
between data models (defined as Python classes) and a relational database ("Model"); a system
for processing requests with a web templating system ("View") and a regular-expression-
based URL dispatcher ("Controller").
•A lightweight and standalone web server for development and testing.
•A form serialization and validation system which can translate between HTML forms and values suitable for storage in the database.
•A template system that utilizes the concept of inheritance borrowed from object-oriented programming.
•A caching framework which can use any of several cache methods.
•Support for middleware classes which can intervene at various stages of request processing and carry out custom functions.
•An internal dispatcher system which allows components of an application to communicate events to each other via pre-defined signals.
•An internationalization system, including translations of Django's own components into a variety of languages.
•A serialization system which can produce and read XML and/or JSON representations of Django model instances.
•A system for extending the capabilities of the template engine.
•An interface to Python's built in unit test framework.
http://en.wikipedia.org/wiki/Django_(web_framework)
Framework
Python Web Code 1
•Simple
•Easy
•Issue ?
Python Web Code 2
MVC
(separation of concerns)
•model s: data, db
•urls : rounting control
•views: business logic
M
C
V
Django Template Language
• Call a function or do logic:
{% ... %}
•Variable substitution:
{{ bar }}
•Filters:
{{ foo|bar }}
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe
Starting a Project
# Mac/Linux/etc.
$ django-admin.py startproject codesmash ./
$ python manage.py runserver
#Windows
> python Scripts/django-admin.py startproject codesmash
> python manage.py runserver
src/
codesmash/
__init__.py
settings.py
urls.py
wsgi.py
manage.py
URLs
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'codesmash.views.home', name='home'),
)
https://docs.djangoproject.com/en/1.7/intro/tutorial03/
Views
from django.shortcuts import render
def my_view(request):
return render(request, 'template.html', {...})
https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django.shortcuts.render
Starting an App
• Django believes strongly in separating chunks of a site into apps that
can be reused
•Ecosystem of reusable apps available
•Create an app; from the src directory:
$ django-admin.py startapp myapp
> python Scripts/django-admin.py startapp myapp
•Add it to INSTALLED_APPS in settings.py
New App Content
•Create a template for the homepage
•Create a view that will respond with the rendered template
•Connect the / URL to the view Framework
src/
codesmash/
__init__.py
settings.py
urls.py
wsgi.py
manage.py
src/
myapp/
__init__.py
admin.py
models.py
tests.py
views.py
urls.py
templates/
URLs
from django.conf.urls import patterns, include, url
urlpatterns = patterns('myapp.views',
url(r'^$', 'my_view', name='my_form'),
...
)
# Use include to connect a regex to an app's urls.py
# Use namespace to keep app URL names nicely isolated
urlpatterns = patterns('',
(r'^myapp/',
include('myapp.urls', namespace='myapp')),
...
)
Forms
from django import forms
class MyForm(forms.Form):
name = forms.CharField(max_length=30)
email = forms.EmailField()
Views
from myapp.forms import MyForm
def my_view(request):
form = MyForm(request.POST or None)
if request.method == "POST" and form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
# do something great with that data
return render(request, 'myapp/myform.html', {
'form': form
})
Templates
<html>
...
<body>
<form action="{% url 'myapp:my_form' %}"
method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Go!</button>
</form>
</body>
</html>
Practice
20
Practice
•create your app
•Show “Hello world.” on yourapp/index.html
•useTemplae Page withTemplate Language
•port ( 8000~8005)
Answer
21
src/
kevin/
__init__.py
settings.py
urls.py
wsgi.py
manage.py
login/
__init__.py
admin.py
models.py
tests.py
views.py
urls.py
templates/foo.html
project
app
Answer – project/settings.py
22
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
)
app
Answer – project/urls.py
23
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^login/', include('login.urls'))
]
app
Answer – app/urls.py
24
from django.conf.urls import patterns, include, url
from login import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^index2$', views.index2, name='index2'),
]
app
Answer – app/views.py
25
from django.http import HttpResponse
from django.shortcuts import render
from django.template import RequestContext, loader
# Create your views here.
def index(request):
return HttpResponse("Hello, world.")
def index2(request):
return render(request, 'foo.html', {'name':'Kevin'}, content_type="application/json")
template file
template input
Answer – app/templates/foo.html
26
{{ name }}:
hi~
template language
Appendix
27
 Models
 Sending Mail
 Mongodb
Models
https://docs.djangoproject.com/en/dev/ref/models/fields/
from django.db import models
# Create your models here.
classAccount(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField(max_length=100)
reg_date = models.DateTimeField('date published')
def __str__(self):
return self.name
class Login(models.Model):
account = models.ForeignKey(Account)
login_date = models.DateTimeField('date login')
def __str__(self):
return self.account
Sending Mail
•Add an EMAIL_BACKEND in settings.py
EMAIL_BACKEND = 
'django.core.mail.backends.console.EmailBackend‘
•Import and use
from django.core.mail import send_mail
send_mail('subject', 'message', 'sender',
['recipient', ...])
Mongodb Package
30
https://www.djangopackages.com/grids/g/mongodb/
PACKAGE
MONGOENGINE
DJANGO-NONREL MONGODB ENGINE
DJANGO-MUMBLR
FANG-OF-MONGO
DJANGO-MONGONAUT
DJANGO-MONGOKIT
DJANGO-MONGOFORMS
DJANMON
MANGO
DJANGO-MONGOADMIN
DJANGO-TASTYPIE-MONGOENGINE
DJANGO-DEBUG-TOOLBAR-MONGO
DJANGO-DOCKIT
MOMA-DJANGO: DJANGO ORM FOR
MONGODB.
DJANGO-MONGO-AUTH
DJMONGO
DJANGO-MONGODB-CASH-BACKEND
Restful API
https://docs.djangoproject.com/en/dev/ref/models/fields/
from django.conf.urls import patterns, url
from athena import views
urlpatterns = patterns('',
# ex: /athena/
url(r'^$', views.index, name='index'),
# ex: /athena /5/
url(r'^(?P<word_count>d+)/$', views.word_count, name='detail'),
# ex: / athena /5/results/
url(r'^(?P<question_id>d+)/results/$', views.results, name='results'),
# ex: /athena /5/vote/
url(r'^(?P<question_id>d+)/vote/$', views.vote, name='vote'),
)
Thank you
32

django_introduction20141030

  • 1.
    Django by Kevin Wu2014/10/30 1 0
  • 2.
    Agenda 2  Django  Framework Starting a project / app  Practice  Appendix
  • 3.
    Django •Free and opensource web application framework, written in Python •A high-level Python web framework •Encourages rapid development and clean, pragmatic design •Follows the model–view–controller architectural pattern •DRY principles ( vsWET) Django Reinhardt Python
  • 4.
    Django Django Reinhardt •ORM •Automatic admininterface •Regex-based URL design •Templating system •Cache infrastructure •Internationalization •Command-line job framework
  • 5.
    Perhaps You’ve HeardOf... •Disqus •Instagram •Mozilla •OpenStack •Pinterest •PolitiFact.com •Rdio •TheWashingtonTimes
  • 6.
    Framework The core DjangoMVC framework consists of an object-relational mapper which mediates between data models (defined as Python classes) and a relational database ("Model"); a system for processing requests with a web templating system ("View") and a regular-expression- based URL dispatcher ("Controller"). •A lightweight and standalone web server for development and testing. •A form serialization and validation system which can translate between HTML forms and values suitable for storage in the database. •A template system that utilizes the concept of inheritance borrowed from object-oriented programming. •A caching framework which can use any of several cache methods. •Support for middleware classes which can intervene at various stages of request processing and carry out custom functions. •An internal dispatcher system which allows components of an application to communicate events to each other via pre-defined signals. •An internationalization system, including translations of Django's own components into a variety of languages. •A serialization system which can produce and read XML and/or JSON representations of Django model instances. •A system for extending the capabilities of the template engine. •An interface to Python's built in unit test framework. http://en.wikipedia.org/wiki/Django_(web_framework)
  • 7.
  • 8.
    Python Web Code1 •Simple •Easy •Issue ?
  • 9.
    Python Web Code2 MVC (separation of concerns) •model s: data, db •urls : rounting control •views: business logic M C V
  • 10.
    Django Template Language •Call a function or do logic: {% ... %} •Variable substitution: {{ bar }} •Filters: {{ foo|bar }} https://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe
  • 11.
    Starting a Project #Mac/Linux/etc. $ django-admin.py startproject codesmash ./ $ python manage.py runserver #Windows > python Scripts/django-admin.py startproject codesmash > python manage.py runserver src/ codesmash/ __init__.py settings.py urls.py wsgi.py manage.py
  • 12.
    URLs from django.conf.urls importpatterns, include, url urlpatterns = patterns('', url(r'^$', 'codesmash.views.home', name='home'), ) https://docs.djangoproject.com/en/1.7/intro/tutorial03/
  • 13.
    Views from django.shortcuts importrender def my_view(request): return render(request, 'template.html', {...}) https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django.shortcuts.render
  • 14.
    Starting an App •Django believes strongly in separating chunks of a site into apps that can be reused •Ecosystem of reusable apps available •Create an app; from the src directory: $ django-admin.py startapp myapp > python Scripts/django-admin.py startapp myapp •Add it to INSTALLED_APPS in settings.py
  • 15.
    New App Content •Createa template for the homepage •Create a view that will respond with the rendered template •Connect the / URL to the view Framework src/ codesmash/ __init__.py settings.py urls.py wsgi.py manage.py src/ myapp/ __init__.py admin.py models.py tests.py views.py urls.py templates/
  • 16.
    URLs from django.conf.urls importpatterns, include, url urlpatterns = patterns('myapp.views', url(r'^$', 'my_view', name='my_form'), ... ) # Use include to connect a regex to an app's urls.py # Use namespace to keep app URL names nicely isolated urlpatterns = patterns('', (r'^myapp/', include('myapp.urls', namespace='myapp')), ... )
  • 17.
    Forms from django importforms class MyForm(forms.Form): name = forms.CharField(max_length=30) email = forms.EmailField()
  • 18.
    Views from myapp.forms importMyForm def my_view(request): form = MyForm(request.POST or None) if request.method == "POST" and form.is_valid(): name = form.cleaned_data['name'] email = form.cleaned_data['email'] # do something great with that data return render(request, 'myapp/myform.html', { 'form': form })
  • 19.
    Templates <html> ... <body> <form action="{% url'myapp:my_form' %}" method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Go!</button> </form> </body> </html>
  • 20.
    Practice 20 Practice •create your app •Show“Hello world.” on yourapp/index.html •useTemplae Page withTemplate Language •port ( 8000~8005)
  • 21.
  • 22.
    Answer – project/settings.py 22 INSTALLED_APPS= ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'login', ) app
  • 23.
    Answer – project/urls.py 23 fromdjango.conf.urls import patterns, include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^login/', include('login.urls')) ] app
  • 24.
    Answer – app/urls.py 24 fromdjango.conf.urls import patterns, include, url from login import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^index2$', views.index2, name='index2'), ] app
  • 25.
    Answer – app/views.py 25 fromdjango.http import HttpResponse from django.shortcuts import render from django.template import RequestContext, loader # Create your views here. def index(request): return HttpResponse("Hello, world.") def index2(request): return render(request, 'foo.html', {'name':'Kevin'}, content_type="application/json") template file template input
  • 26.
    Answer – app/templates/foo.html 26 {{name }}: hi~ template language
  • 27.
  • 28.
    Models https://docs.djangoproject.com/en/dev/ref/models/fields/ from django.db importmodels # Create your models here. classAccount(models.Model): name = models.CharField(max_length=30) email = models.EmailField(max_length=100) reg_date = models.DateTimeField('date published') def __str__(self): return self.name class Login(models.Model): account = models.ForeignKey(Account) login_date = models.DateTimeField('date login') def __str__(self): return self.account
  • 29.
    Sending Mail •Add anEMAIL_BACKEND in settings.py EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend‘ •Import and use from django.core.mail import send_mail send_mail('subject', 'message', 'sender', ['recipient', ...])
  • 30.
    Mongodb Package 30 https://www.djangopackages.com/grids/g/mongodb/ PACKAGE MONGOENGINE DJANGO-NONREL MONGODBENGINE DJANGO-MUMBLR FANG-OF-MONGO DJANGO-MONGONAUT DJANGO-MONGOKIT DJANGO-MONGOFORMS DJANMON MANGO DJANGO-MONGOADMIN DJANGO-TASTYPIE-MONGOENGINE DJANGO-DEBUG-TOOLBAR-MONGO DJANGO-DOCKIT MOMA-DJANGO: DJANGO ORM FOR MONGODB. DJANGO-MONGO-AUTH DJMONGO DJANGO-MONGODB-CASH-BACKEND
  • 31.
    Restful API https://docs.djangoproject.com/en/dev/ref/models/fields/ from django.conf.urlsimport patterns, url from athena import views urlpatterns = patterns('', # ex: /athena/ url(r'^$', views.index, name='index'), # ex: /athena /5/ url(r'^(?P<word_count>d+)/$', views.word_count, name='detail'), # ex: / athena /5/results/ url(r'^(?P<question_id>d+)/results/$', views.results, name='results'), # ex: /athena /5/vote/ url(r'^(?P<question_id>d+)/vote/$', views.vote, name='vote'), )
  • 32.