SlideShare a Scribd company logo
DJANGO#101WHAT YOU NEED TO KNOW FOR GETTING STARTED
10th July 2018
@Code Mania 111, Bangkok, Thailand
PANKAMOL SRIKAEW
Aime
AimeTPGM
AimeTPGM.github.io
aim.ske09@gmail.com
fb.com/aimetpgm
FullStack	Developer@Allianz	Technology	Thailand
source	code	for	this	slide
https://github.com/AimeTPGM/wanneeginnai
https://github.com/AimeTPGM/candyfactory
source	code	for	Live	Demo
https://aimetpgm.pythonanywhere.com
Live	Demo
slideshare
https://www.slideshare.net/PankamolSrikaew	
or	search	for	Django#101
GETTING STARTEDDJANGO#101
INSTALLATIONDJANGO#101
INITIALIZE PROJECTDJANGO#101
VIRTUAL ENVIRONMENT
~$ cd path/to/your/folder
folder User$ python3 -m venv myvenv
folder User$ source myvenv/bin/activate
(myvenv) folder User$
INSTALLING DJANGO
(myvenv) folder User$ pip install --upgrade pip
(myvenv) folder User$ pip install django~=1.11.0
Collecting django~=1.11.0

Downloading Django-1.11.3-py2.py3-none-any.whl (6.8MB)

Installing collected packages: django

Successfully installed django-1.11.3
STARTING PROJECT
(myvenv) folder User$ django-admin startproject mysite .
(myvenv) folder User$ python manage.py runserver
INITIALIZE PROJECTDJANGO#101
RUNNING SERVER
(myvenv) folder User$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
June 01, 2018 - 10:07:22
Django version 1.11.13, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
PROJECT STRUCTUREDJANGO#101
yourproject
mysite
manage.py
__init__.py
settings.py
urls.py
wsgi.py
PROJECT STRUCTUREDJANGO#101
yourproject
mysite
manage.py
__init__.py
settings.py
urls.py
wsgi.py
PROJECT STRUCTUREDJANGO#101
...
DEBUG = True
# use [‘127.0.0.1’, ‘.pythonanywhere.com’] for deployment
ALLOWED_HOST = []
...
INSTALLED_APPS = […]
...
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘UTC’
...
STATIC_URL = ‘/static/‘
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
mystite/settings.py
...
DEBUG = True
# use [‘127.0.0.1’, ‘.pythonanywhere.com’] for deployment
ALLOWED_HOST = []
...
INSTALLED_APPS = […, ‘webapp’]
...
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘UTC’
...
STATIC_URL = ‘/static/‘
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
mystite/settings.py
PROJECT STRUCTUREDJANGO#101
(myvenv) folder User$ python manage.py startapp webapp
PROJECT STRUCTUREDJANGO#101
yourproject
mysite
manage.py
__init__.py
settings.py
urls.py
wsgi.py
PROJECT STRUCTUREDJANGO#101
yourproject
mysite
manage.py
__init__.py
settings.py
urls.py
wsgi.py
webapp
__init__.py
admin.py
apps.py
model.py
views.py
tests.py
DATABASE, MODEL 

AND ADMINDJANGO#101
Django#101 – All You Need to Know for Getting Started
THE BASIS – ADDING NEW MODELDJANGO#101
from django.db import models

from django.utils import timezone
class Candy(models.Model):

flavor = models.CharField(max_length=100)

description = models.TextField()

manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())

bestBefore = models.DateTimeField('BB', blank=True, null=True)
def produce(self):

self.bestBefore = timezone.now() + timezone.timedelta(days=30)
def __str__(self):

return self.flavor
webapp/models.py
THE BASIS – ADDING NEW MODELDJANGO#101
from django.db import models

from django.utils import timezone
class Candy(models.Model):

flavor = models.CharField(max_length=100)

description = models.TextField()

manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())

bestBefore = models.DateTimeField('BB', blank=True, null=True)
def produce(self):

self.bestBefore = timezone.now() + timezone.timedelta(days=30)
def __str__(self):

return self.flavor
from django.contrib import admin

from .models import Candy
admin.site.register(Candy)
webapp/admin.py
webapp/models.py
THE BASIS – ADDING NEW MODELDJANGO#101
from django.db import models

from django.utils import timezone
class Candy(models.Model):

flavor = models.CharField(max_length=100)

description = models.TextField()

manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())

bestBefore = models.DateTimeField('BB', blank=True, null=True)
def produce(self):

self.bestBefore = timezone.now() + timezone.timedelta(days=30)
def __str__(self):

return self.flavor
from django.contrib import admin

from .models import Candy
admin.site.register(Candy)
(myvenv) folder User$ python manage.py makemigrations

(myvenv) folder User$ python manage.py migrate
webapp/admin.py
webapp/models.py
THE BASIS – DJANGO ADMINDJANGO#101
(myvenv) folder User$ python manage.py createsuperuser









THE BASIS – DJANGO ADMINDJANGO#101
(myvenv) folder User$ python manage.py createsuperuser

Username: admin

Email address: 

Password: ThisIsPassword123

Password (again): ThisIsPassword123

Superuser created successfully.
THE BASIS – DJANGO ADMINDJANGO#101
(myvenv) folder User$ python manage.py createsuperuser

Username: admin

Email address: 

Password: ThisIsPassword123

Password (again): ThisIsPassword123

Superuser created successfully.
http://127.0.0.1:8000/admin
THE BASIS – DJANGO ADMINDJANGO#101
http://127.0.0.1:8000/admin
THE BASIS – DJANGO ADMINDJANGO#101
http://127.0.0.1:8000/admin/webapp/candy/add/
THE BASIS – DJANGO ADMINDJANGO#101
http://127.0.0.1:8000/admin/webapp/candy/
THE BASIS – DJANGO ADMINDJANGO#101
http://127.0.0.1:8000/admin/webapp/candy/
ROUTES AND VIEWSDJANGO#101
THE BASIS – ROUTES AND VIEWSDJANGO#101
http://127.0.0.1:8000/list/
http://127.0.0.1:8000/list/1
http://127.0.0.1:8000/list/1/edit
http://127.0.0.1:8000/list/1/delete
mysite/urls.py
webapp/urls.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(‘webapp.urls')),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
ROUTES
mysite/urls.py
webapp/urls.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(‘webapp.urls')),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
REGEX CHEATSHEET
^ the beginning
$ the end
d number
+ should have the previous

char at least one
ROUTES
mysite/urls.py
webapp/urls.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(‘webapp.urls')),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
REGEX CHEATSHEET
^ the beginning
$ the end
d number
+ should have the previous

char at least one
something.com/list/
^list/$
ROUTES
mysite/urls.py
webapp/urls.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(‘webapp.urls')),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
REGEX CHEATSHEET
^ the beginning
$ the end
d number
+ should have the previous

char at least one
something.com/list/
^list/$
something.com/list/123/edit/
^list/(d+)/edit/$
ROUTES
mysite/urls.py
webapp/urls.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include(‘webapp.urls')),
]
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
REGEX CHEATSHEET
^ the beginning
$ the end
d number
+ should have the previous

char at least one
something.com/list/
^list/$
something.com/list/123/edit/
^list/(d+)/edit/$
something.com/list/{candyId}/edit/
^list/(?P<candyId>d+)/edit/$
ROUTES
THE BASIS – ROUTES AND VIEWSDJANGO#101
VIEWS
THE BASIS – ROUTES AND VIEWSDJANGO#101
VIEWS
webapp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
webapp/views.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
VIEWS
from django.shortcuts import render
from .models import Candy
def mainpage(request):
candies = Candy.object.all()
return render(request, ‘index.html’, { ‘candyList’: candies })
webapp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
webapp/templates/index.html
webapp/views.py
THE BASIS – ROUTES AND VIEWSDJANGO#101
VIEWS
from django.shortcuts import render
from .models import Candy
def mainpage(request):
candies = Candy.object.all()
return render(request, ‘index.html’, { ‘candyList’: candies })
<div>{{candyList}}</div>
webapp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name=‘main_page’),
]
TEMPLATESDJANGO#101
THE BASIS – {% %} AND {{ }}DJANGO#101
{% for candy in candyList %}
<div>
<div>
{{candy.flavor}}
</div>
<div>
{{candy.description}}
</div>
</div>
{% endfor %}
webapp/templates/index.html
webapp/static/style.css
THE BASIS – CSS STYLESHEETDJANGO#101
webapp/templates/index.html
<html>
<head>


</head>
<body>
{% for candy in candyList %}
<div>
<div>
{{candy.flavor}}
</div>
<div>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
webapp/static/style.css
THE BASIS – CSS STYLESHEETDJANGO#101
webapp/templates/index.html
<html>
<head>


</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
webapp/static/style.css
THE BASIS – CSS STYLESHEETDJANGO#101
.candy-list {
display: flex;
padding: 10px;
}
.candy-list .flavor {
font-weight: bold;
width: 20%;
}
.candy-list .desc {
width: 80%;
}
webapp/templates/index.html
<html>
<head>


</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
webapp/static/style.css
THE BASIS – CSS STYLESHEETDJANGO#101
.candy-list {
display: flex;
padding: 10px;
}
.candy-list .flavor {
font-weight: bold;
width: 20%;
}
.candy-list .desc {
width: 80%;
}
webapp/templates/index.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” 

href=“{% static ‘css/style.css’ %}”>
</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
webapp/static/style.css
THE BASIS – CSS STYLESHEETDJANGO#101
.candy-list {
display: flex;
padding: 10px;
}
.candy-list .flavor {
font-weight: bold;
width: 20%;
}
.candy-list .desc {
width: 80%;
}
webapp/templates/index.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” 

href=“{% static ‘css/style.css’ %}”>
</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
THE BASIS – TEMPLATE BLOCKDJANGO#101
webapp/templates/index.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
THE BASIS – TEMPLATE BLOCKDJANGO#101
webapp/templates/index.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
THE BASIS – TEMPLATE BLOCKDJANGO#101
C
webapp/templates/base.html
C
webapp/templates/list.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body>
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
</body>
</html>
THE BASIS – TEMPLATE BLOCKDJANGO#101
C
webapp/templates/base.html
C
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body> {% block content %}
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
{% endblock %} </body>
</html>
webapp/templates/list.html
THE BASIS – TEMPLATE BLOCKDJANGO#101
C
webapp/templates/base.html
C
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body> {% block content %}
{% block content %}
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
{% endblock %}
{% endblock %} </body>
</html>
webapp/templates/list.html
THE BASIS – TEMPLATE BLOCKDJANGO#101
C
webapp/templates/base.html
C
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”>
</head>
<body> {% block content %}
{% extends ‘base.html’ %}
{% block content %}
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
{% endblock %}
{% endblock %} </body>
</html>
webapp/templates/list.html
THE BASIS – TEMPLATE BLOCKDJANGO#101
webapp/templates/base.html
{% load staticfiles %}
<html>
<head>
<link rel=“stylesheet” 

href=“{% static ‘css/style.css’ %}”>
<body>
{% block content %}
{% endblock %}
</body>
</html>
webapp/templates/index.html
{% extends ‘base.html’ %}
{% block content %}
{% for candy in candyList %}
<div class=“candy-list”>
<div class=“flavor”>
{{candy.flavor}}
</div>
<div class=“desc”>
{{candy.description}}
</div>
</div>
{% endfor %}
{% endblock %}
FORMDJANGO#101
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.db import models

from django.utils import timezone
class Candy(models.Model):

flavor = models.CharField(max_length=100)

description = models.TextField()

manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())

bestBefore = models.DateTimeField('BB', blank=True, null=True)
def produce(self):

self.bestBefore = timezone.now() + timezone.timedelta(days=30)
def __str__(self):

return self.flavor
webapp/models.py
FROM THE EXISTING MODEL
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django import forms
from .models import Candy
class CandyForm(forms.ModelForm):
class Meta:
model = Candy
field = (‘flavor’, ‘description’,)
webapp/forms.py
CREATING A FORM
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django import forms
from .models import Candy
class CandyForm(forms.ModelForm):
class Meta:
model = Candy
field = (‘flavor’, ‘description’,)
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.mainpage, name='main_page'),
url(r’^add/$’, views.add, name=‘add’),
]
webapp/forms.py
webapp/urls.py
CREATING A FORM
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
form = CandyForm(request.POST)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
form = CandyForm(request.POST)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
webapp/views.py
{% extends ‘base.html’ %}
{% block content %}
{% endblock %}
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
form = CandyForm(request.POST)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
webapp/views.py
{% extends ‘base.html’ %}
{% block content %}
<form method=“POST”> {% csrf_token %}
{{candyForm}}
<button type=“submit”>Add</button>
</form>
{% endblock %}
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
form = CandyForm(request.POST)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
webapp/views.py
{% extends ‘base.html’ %}
{% block content %}
<form method=“POST”> {% csrf_token %}
{{candyForm}}
<button type=“submit”>Add</button>
</form>
{% endblock %}
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
webapp/views.py
{% extends ‘base.html’ %}
{% block content %}
<form method=“POST”> {% csrf_token %}
{{candyForm}}
<button type=“submit”>Add</button>
</form>
{% endblock %}
THE BASIS – MAKING FORM (ADDING)DJANGO#101
from django.shortcuts import render, redirect
from .models import Candy
from .forms import CandyForm
...
def add(request):
if request.method == “POST”:
form = CandyForm(request.POST)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm()
return render(request, ‘add.html’, { ‘candyForm’: form })
webapp/views.py
webapp/views.py
{% extends ‘base.html’ %}
{% block content %}
<form method=“POST”> {% csrf_token %}
{{candyForm}}
<button type=“submit”>Add</button>
</form>
{% endblock %}
THE BASIS – MAKING FORM (EDITING)DJANGO#101
webapp/urls.py
...
url(r’^(?P<pk>d+)/edit/$’, views.edit, name=‘edit’),
...
webapp/views.py
from django.shortcuts import render, redirect, get_object_or_404
from .models import Candy
from .forms import CandyForm
def edit(request, pk):
candy = get_object_or_404(Candy, pk=pk)
if request.method == “POST”:
form = CandyForm(request.POST, instance=candy)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm(instance=candy)
return render(request, ‘add.html’, ‘candyForm’: form)
webapp/templates/index.html
<a href=“{% url ‘edit’ pk=candy.pk %}”>{{candy.flavor}}</a>
THE BASIS – MAKING FORM (EDITING)DJANGO#101
webapp/urls.py
...
url(r’^(?P<pk>d+)/edit/$’, views.edit, name=‘edit’),
...
webapp/views.py
from django.shortcuts import render, redirect, get_object_or_404
from .models import Candy
from .forms import CandyForm
def edit(request, pk):
candy = get_object_or_404(Candy, pk=pk)
if request.method == “POST”:
form = CandyForm(request.POST, instance=candy)
candy = form.save(commit=False)
candy.produce()
candy.save()
return redirect(‘main_page’)
else:
form = CandyForm(instance=candy)
return render(request, ‘add.html’, ‘candyForm’: form)
webapp/templates/index.html
<a href=“{% url ‘edit’ pk=candy.pk %}”>{{candy.flavor}}</a>
AUTHENTICATIONDJANGO#101
THE BASIS – AUTHENTICATIONDJANGO#101
webapp/views.py
if request.user.is_authenticated:
# do something if user is already logged in
else:
# redirect to main page
webapp/templates/some_page.html
{% if user.is_authenticated %}
<!--HTML CODE-->
{% endif %}
DJANGO
WEBAPP 

DEVELOPMENT
CHEATSHEET
DJANGO#101
1. create virtual environment
2. activate virtual environment
3. upgrade pip
4. install django
5. start django project
6. run server
1. start new app
2. install app in manage.py
3. include route in project/urls.py
4. add route in app/urls.py
1. create a model in app/models.py
2. register model in app/admin.py
3. migrate model
4. makemigration
5. create superuser
6. login
1. create a route in app/urls.py binding with views
2. create or reuse a new method in app/views.py return render html
3. create or reuse a html in app/templates/some_page.html
4. (Optional) css, images, font and other static file have to be located in app/static/
5. refresh page
CREATING PROJECT
INSTALLING AN APP TO DJANGO PROJECT
ADDING A DATABASE MODEL
MAKING A NEW PAGE TO THE APP
BONUS!
DEPLOY YOUR APP TO 

PYTHONANYWHERE.COM
DJANGO#101
1. register
2. create a pythonanywhere API token
3. go to dashboard -> open a bash
4. install pip
5. install your django project from GitHub
6. create a superuser on pythonanywhere
7. collect static file
8. refresh the apps
9. your app is ready on 

username.pythonanywhere.com
P.S. you can use ‘git pull’ for the latest

version of your django project and repeat

number 7 - 9
https://aimetpgm.pythonanywhere.com
https://github.com/AimeTPGM/wanneeginnai

More Related Content

KEY
Unit testing with zend framework PHPBenelux
PDF
Тестирование и Django
PPTX
Web осень 2012 лекция 7
PPTX
Web весна 2013 лекция 7
PDF
Crafting Custom Interfaces with Sub::Exporter
PDF
Unit testing with zend framework tek11
KEY
Django quickstart
PDF
Advanced modulinos trial
Unit testing with zend framework PHPBenelux
Тестирование и Django
Web осень 2012 лекция 7
Web весна 2013 лекция 7
Crafting Custom Interfaces with Sub::Exporter
Unit testing with zend framework tek11
Django quickstart
Advanced modulinos trial

What's hot (20)

PDF
Advanced modulinos
PDF
Symfony2 - extending the console component
KEY
Refactor like a boss
PDF
Phoenix for laravel developers
PDF
Refactoring using Codeception
PPTX
Redes sociais usando python
PDF
PHP for Python Developers
PDF
WP_Query, pre_get_posts, and eliminating query_posts()
ODP
Scala 2 + 2 > 4
PDF
Bag of tricks
PDF
Learning Perl 6 (NPW 2007)
KEY
Unit testing zend framework apps
PDF
TestFest - Respect\Validation 1.0
PDF
Developing applications for performance
PDF
Learning Perl 6
PPTX
Database performance 101
PDF
The state of Symfony2 - SymfonyDay 2010
PPTX
PHP performance 101: so you need to use a database
PDF
The Magic Of Tie
PDF
PhpBB meets Symfony2
Advanced modulinos
Symfony2 - extending the console component
Refactor like a boss
Phoenix for laravel developers
Refactoring using Codeception
Redes sociais usando python
PHP for Python Developers
WP_Query, pre_get_posts, and eliminating query_posts()
Scala 2 + 2 > 4
Bag of tricks
Learning Perl 6 (NPW 2007)
Unit testing zend framework apps
TestFest - Respect\Validation 1.0
Developing applications for performance
Learning Perl 6
Database performance 101
The state of Symfony2 - SymfonyDay 2010
PHP performance 101: so you need to use a database
The Magic Of Tie
PhpBB meets Symfony2
Ad

Similar to Django#101 – All You Need to Know for Getting Started (20)

PDF
Django
PDF
Django for mobile applications
PPTX
Hands on django part 1
ODP
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
PPTX
Django crush course
PPTX
Desenvolvimento web usando django
PPT
Mini Curso Django Ii Congresso Academico Ces
PDF
Django tutorial 2009
PDF
Nativescript angular
PDF
Django (Web Konferencia 2009)
ODP
Software Project Management
PDF
Virtual Environment and Web development using Django
PDF
Django cms best practices
ODP
Django for Beginners
PDF
Google App Engine in 40 minutes (the absolute essentials)
ODP
Easy Web Project Development & Management with Django & Mercurial
PDF
Gae Meets Django
PDF
Configuring Django projects for multiple environments
PDF
Django tricks (2)
PPT
Django
Django
Django for mobile applications
Hands on django part 1
Django Introduction Osscamp Delhi September 08 09 2007 Mir Nazim
Django crush course
Desenvolvimento web usando django
Mini Curso Django Ii Congresso Academico Ces
Django tutorial 2009
Nativescript angular
Django (Web Konferencia 2009)
Software Project Management
Virtual Environment and Web development using Django
Django cms best practices
Django for Beginners
Google App Engine in 40 minutes (the absolute essentials)
Easy Web Project Development & Management with Django & Mercurial
Gae Meets Django
Configuring Django projects for multiple environments
Django tricks (2)
Django
Ad

Recently uploaded (20)

PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
A Presentation on Artificial Intelligence
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
MYSQL Presentation for SQL database connectivity
Programs and apps: productivity, graphics, security and other tools
Network Security Unit 5.pdf for BCA BBA.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
Review of recent advances in non-invasive hemoglobin estimation
Digital-Transformation-Roadmap-for-Companies.pptx
Empathic Computing: Creating Shared Understanding
Dropbox Q2 2025 Financial Results & Investor Presentation
Diabetes mellitus diagnosis method based random forest with bat algorithm
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
A Presentation on Artificial Intelligence
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
cuic standard and advanced reporting.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Spectroscopy.pptx food analysis technology
Spectral efficient network and resource selection model in 5G networks
The Rise and Fall of 3GPP – Time for a Sabbatical?

Django#101 – All You Need to Know for Getting Started

  • 1. DJANGO#101WHAT YOU NEED TO KNOW FOR GETTING STARTED 10th July 2018 @Code Mania 111, Bangkok, Thailand
  • 6. INITIALIZE PROJECTDJANGO#101 VIRTUAL ENVIRONMENT ~$ cd path/to/your/folder folder User$ python3 -m venv myvenv folder User$ source myvenv/bin/activate (myvenv) folder User$ INSTALLING DJANGO (myvenv) folder User$ pip install --upgrade pip (myvenv) folder User$ pip install django~=1.11.0 Collecting django~=1.11.0
 Downloading Django-1.11.3-py2.py3-none-any.whl (6.8MB)
 Installing collected packages: django
 Successfully installed django-1.11.3 STARTING PROJECT (myvenv) folder User$ django-admin startproject mysite . (myvenv) folder User$ python manage.py runserver
  • 7. INITIALIZE PROJECTDJANGO#101 RUNNING SERVER (myvenv) folder User$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). June 01, 2018 - 10:07:22 Django version 1.11.13, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
  • 10. PROJECT STRUCTUREDJANGO#101 ... DEBUG = True # use [‘127.0.0.1’, ‘.pythonanywhere.com’] for deployment ALLOWED_HOST = [] ... INSTALLED_APPS = […] ... LANGUAGE_CODE = ‘en-us’ TIME_ZONE = ‘UTC’ ... STATIC_URL = ‘/static/‘ STATIC_ROOT = os.path.join(BASE_DIR, ‘static’) mystite/settings.py
  • 11. ... DEBUG = True # use [‘127.0.0.1’, ‘.pythonanywhere.com’] for deployment ALLOWED_HOST = [] ... INSTALLED_APPS = […, ‘webapp’] ... LANGUAGE_CODE = ‘en-us’ TIME_ZONE = ‘UTC’ ... STATIC_URL = ‘/static/‘ STATIC_ROOT = os.path.join(BASE_DIR, ‘static’) mystite/settings.py PROJECT STRUCTUREDJANGO#101 (myvenv) folder User$ python manage.py startapp webapp
  • 14. DATABASE, MODEL 
 AND ADMINDJANGO#101
  • 16. THE BASIS – ADDING NEW MODELDJANGO#101 from django.db import models
 from django.utils import timezone class Candy(models.Model):
 flavor = models.CharField(max_length=100)
 description = models.TextField()
 manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())
 bestBefore = models.DateTimeField('BB', blank=True, null=True) def produce(self):
 self.bestBefore = timezone.now() + timezone.timedelta(days=30) def __str__(self):
 return self.flavor webapp/models.py
  • 17. THE BASIS – ADDING NEW MODELDJANGO#101 from django.db import models
 from django.utils import timezone class Candy(models.Model):
 flavor = models.CharField(max_length=100)
 description = models.TextField()
 manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())
 bestBefore = models.DateTimeField('BB', blank=True, null=True) def produce(self):
 self.bestBefore = timezone.now() + timezone.timedelta(days=30) def __str__(self):
 return self.flavor from django.contrib import admin
 from .models import Candy admin.site.register(Candy) webapp/admin.py webapp/models.py
  • 18. THE BASIS – ADDING NEW MODELDJANGO#101 from django.db import models
 from django.utils import timezone class Candy(models.Model):
 flavor = models.CharField(max_length=100)
 description = models.TextField()
 manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())
 bestBefore = models.DateTimeField('BB', blank=True, null=True) def produce(self):
 self.bestBefore = timezone.now() + timezone.timedelta(days=30) def __str__(self):
 return self.flavor from django.contrib import admin
 from .models import Candy admin.site.register(Candy) (myvenv) folder User$ python manage.py makemigrations
 (myvenv) folder User$ python manage.py migrate webapp/admin.py webapp/models.py
  • 19. THE BASIS – DJANGO ADMINDJANGO#101 (myvenv) folder User$ python manage.py createsuperuser
 
 
 
 

  • 20. THE BASIS – DJANGO ADMINDJANGO#101 (myvenv) folder User$ python manage.py createsuperuser
 Username: admin
 Email address: 
 Password: ThisIsPassword123
 Password (again): ThisIsPassword123
 Superuser created successfully.
  • 21. THE BASIS – DJANGO ADMINDJANGO#101 (myvenv) folder User$ python manage.py createsuperuser
 Username: admin
 Email address: 
 Password: ThisIsPassword123
 Password (again): ThisIsPassword123
 Superuser created successfully. http://127.0.0.1:8000/admin
  • 22. THE BASIS – DJANGO ADMINDJANGO#101 http://127.0.0.1:8000/admin
  • 23. THE BASIS – DJANGO ADMINDJANGO#101 http://127.0.0.1:8000/admin/webapp/candy/add/
  • 24. THE BASIS – DJANGO ADMINDJANGO#101 http://127.0.0.1:8000/admin/webapp/candy/
  • 25. THE BASIS – DJANGO ADMINDJANGO#101 http://127.0.0.1:8000/admin/webapp/candy/
  • 27. THE BASIS – ROUTES AND VIEWSDJANGO#101 http://127.0.0.1:8000/list/ http://127.0.0.1:8000/list/1 http://127.0.0.1:8000/list/1/edit http://127.0.0.1:8000/list/1/delete
  • 28. mysite/urls.py webapp/urls.py THE BASIS – ROUTES AND VIEWSDJANGO#101 from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include(‘webapp.urls')), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ] ROUTES
  • 29. mysite/urls.py webapp/urls.py THE BASIS – ROUTES AND VIEWSDJANGO#101 from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include(‘webapp.urls')), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ] REGEX CHEATSHEET ^ the beginning $ the end d number + should have the previous
 char at least one ROUTES
  • 30. mysite/urls.py webapp/urls.py THE BASIS – ROUTES AND VIEWSDJANGO#101 from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include(‘webapp.urls')), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ] REGEX CHEATSHEET ^ the beginning $ the end d number + should have the previous
 char at least one something.com/list/ ^list/$ ROUTES
  • 31. mysite/urls.py webapp/urls.py THE BASIS – ROUTES AND VIEWSDJANGO#101 from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include(‘webapp.urls')), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ] REGEX CHEATSHEET ^ the beginning $ the end d number + should have the previous
 char at least one something.com/list/ ^list/$ something.com/list/123/edit/ ^list/(d+)/edit/$ ROUTES
  • 32. mysite/urls.py webapp/urls.py THE BASIS – ROUTES AND VIEWSDJANGO#101 from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'', include(‘webapp.urls')), ] from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ] REGEX CHEATSHEET ^ the beginning $ the end d number + should have the previous
 char at least one something.com/list/ ^list/$ something.com/list/123/edit/ ^list/(d+)/edit/$ something.com/list/{candyId}/edit/ ^list/(?P<candyId>d+)/edit/$ ROUTES
  • 33. THE BASIS – ROUTES AND VIEWSDJANGO#101 VIEWS
  • 34. THE BASIS – ROUTES AND VIEWSDJANGO#101 VIEWS webapp/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ]
  • 35. webapp/views.py THE BASIS – ROUTES AND VIEWSDJANGO#101 VIEWS from django.shortcuts import render from .models import Candy def mainpage(request): candies = Candy.object.all() return render(request, ‘index.html’, { ‘candyList’: candies }) webapp/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ]
  • 36. webapp/templates/index.html webapp/views.py THE BASIS – ROUTES AND VIEWSDJANGO#101 VIEWS from django.shortcuts import render from .models import Candy def mainpage(request): candies = Candy.object.all() return render(request, ‘index.html’, { ‘candyList’: candies }) <div>{{candyList}}</div> webapp/urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name=‘main_page’), ]
  • 38. THE BASIS – {% %} AND {{ }}DJANGO#101 {% for candy in candyList %} <div> <div> {{candy.flavor}} </div> <div> {{candy.description}} </div> </div> {% endfor %} webapp/templates/index.html
  • 39. webapp/static/style.css THE BASIS – CSS STYLESHEETDJANGO#101 webapp/templates/index.html <html> <head> 
 </head> <body> {% for candy in candyList %} <div> <div> {{candy.flavor}} </div> <div> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 40. webapp/static/style.css THE BASIS – CSS STYLESHEETDJANGO#101 webapp/templates/index.html <html> <head> 
 </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 41. webapp/static/style.css THE BASIS – CSS STYLESHEETDJANGO#101 .candy-list { display: flex; padding: 10px; } .candy-list .flavor { font-weight: bold; width: 20%; } .candy-list .desc { width: 80%; } webapp/templates/index.html <html> <head> 
 </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 42. webapp/static/style.css THE BASIS – CSS STYLESHEETDJANGO#101 .candy-list { display: flex; padding: 10px; } .candy-list .flavor { font-weight: bold; width: 20%; } .candy-list .desc { width: 80%; } webapp/templates/index.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” 
 href=“{% static ‘css/style.css’ %}”> </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 43. webapp/static/style.css THE BASIS – CSS STYLESHEETDJANGO#101 .candy-list { display: flex; padding: 10px; } .candy-list .flavor { font-weight: bold; width: 20%; } .candy-list .desc { width: 80%; } webapp/templates/index.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” 
 href=“{% static ‘css/style.css’ %}”> </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 44. THE BASIS – TEMPLATE BLOCKDJANGO#101 webapp/templates/index.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 45. THE BASIS – TEMPLATE BLOCKDJANGO#101 webapp/templates/index.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 46. THE BASIS – TEMPLATE BLOCKDJANGO#101 C webapp/templates/base.html C webapp/templates/list.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} </body> </html>
  • 47. THE BASIS – TEMPLATE BLOCKDJANGO#101 C webapp/templates/base.html C {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% block content %} {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} {% endblock %} </body> </html> webapp/templates/list.html
  • 48. THE BASIS – TEMPLATE BLOCKDJANGO#101 C webapp/templates/base.html C {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% block content %} {% block content %} {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} {% endblock %} {% endblock %} </body> </html> webapp/templates/list.html
  • 49. THE BASIS – TEMPLATE BLOCKDJANGO#101 C webapp/templates/base.html C {% load staticfiles %} <html> <head> <link rel=“stylesheet” href=“{% static ‘css/style.css’ %}”> </head> <body> {% block content %} {% extends ‘base.html’ %} {% block content %} {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} {% endblock %} {% endblock %} </body> </html> webapp/templates/list.html
  • 50. THE BASIS – TEMPLATE BLOCKDJANGO#101 webapp/templates/base.html {% load staticfiles %} <html> <head> <link rel=“stylesheet” 
 href=“{% static ‘css/style.css’ %}”> <body> {% block content %} {% endblock %} </body> </html> webapp/templates/index.html {% extends ‘base.html’ %} {% block content %} {% for candy in candyList %} <div class=“candy-list”> <div class=“flavor”> {{candy.flavor}} </div> <div class=“desc”> {{candy.description}} </div> </div> {% endfor %} {% endblock %}
  • 52. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.db import models
 from django.utils import timezone class Candy(models.Model):
 flavor = models.CharField(max_length=100)
 description = models.TextField()
 manufacturedDate = models.DateTimeField(‘MFD', default=timezone.now())
 bestBefore = models.DateTimeField('BB', blank=True, null=True) def produce(self):
 self.bestBefore = timezone.now() + timezone.timedelta(days=30) def __str__(self):
 return self.flavor webapp/models.py FROM THE EXISTING MODEL
  • 53. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django import forms from .models import Candy class CandyForm(forms.ModelForm): class Meta: model = Candy field = (‘flavor’, ‘description’,) webapp/forms.py CREATING A FORM
  • 54. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django import forms from .models import Candy class CandyForm(forms.ModelForm): class Meta: model = Candy field = (‘flavor’, ‘description’,) from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.mainpage, name='main_page'), url(r’^add/$’, views.add, name=‘add’), ] webapp/forms.py webapp/urls.py CREATING A FORM
  • 55. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: form = CandyForm(request.POST) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py
  • 56. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: form = CandyForm(request.POST) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py webapp/views.py {% extends ‘base.html’ %} {% block content %} {% endblock %}
  • 57. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: form = CandyForm(request.POST) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py webapp/views.py {% extends ‘base.html’ %} {% block content %} <form method=“POST”> {% csrf_token %} {{candyForm}} <button type=“submit”>Add</button> </form> {% endblock %}
  • 58. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: form = CandyForm(request.POST) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py webapp/views.py {% extends ‘base.html’ %} {% block content %} <form method=“POST”> {% csrf_token %} {{candyForm}} <button type=“submit”>Add</button> </form> {% endblock %}
  • 59. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py webapp/views.py {% extends ‘base.html’ %} {% block content %} <form method=“POST”> {% csrf_token %} {{candyForm}} <button type=“submit”>Add</button> </form> {% endblock %}
  • 60. THE BASIS – MAKING FORM (ADDING)DJANGO#101 from django.shortcuts import render, redirect from .models import Candy from .forms import CandyForm ... def add(request): if request.method == “POST”: form = CandyForm(request.POST) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm() return render(request, ‘add.html’, { ‘candyForm’: form }) webapp/views.py webapp/views.py {% extends ‘base.html’ %} {% block content %} <form method=“POST”> {% csrf_token %} {{candyForm}} <button type=“submit”>Add</button> </form> {% endblock %}
  • 61. THE BASIS – MAKING FORM (EDITING)DJANGO#101 webapp/urls.py ... url(r’^(?P<pk>d+)/edit/$’, views.edit, name=‘edit’), ... webapp/views.py from django.shortcuts import render, redirect, get_object_or_404 from .models import Candy from .forms import CandyForm def edit(request, pk): candy = get_object_or_404(Candy, pk=pk) if request.method == “POST”: form = CandyForm(request.POST, instance=candy) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm(instance=candy) return render(request, ‘add.html’, ‘candyForm’: form) webapp/templates/index.html <a href=“{% url ‘edit’ pk=candy.pk %}”>{{candy.flavor}}</a>
  • 62. THE BASIS – MAKING FORM (EDITING)DJANGO#101 webapp/urls.py ... url(r’^(?P<pk>d+)/edit/$’, views.edit, name=‘edit’), ... webapp/views.py from django.shortcuts import render, redirect, get_object_or_404 from .models import Candy from .forms import CandyForm def edit(request, pk): candy = get_object_or_404(Candy, pk=pk) if request.method == “POST”: form = CandyForm(request.POST, instance=candy) candy = form.save(commit=False) candy.produce() candy.save() return redirect(‘main_page’) else: form = CandyForm(instance=candy) return render(request, ‘add.html’, ‘candyForm’: form) webapp/templates/index.html <a href=“{% url ‘edit’ pk=candy.pk %}”>{{candy.flavor}}</a>
  • 64. THE BASIS – AUTHENTICATIONDJANGO#101 webapp/views.py if request.user.is_authenticated: # do something if user is already logged in else: # redirect to main page webapp/templates/some_page.html {% if user.is_authenticated %} <!--HTML CODE--> {% endif %}
  • 65. DJANGO WEBAPP 
 DEVELOPMENT CHEATSHEET DJANGO#101 1. create virtual environment 2. activate virtual environment 3. upgrade pip 4. install django 5. start django project 6. run server 1. start new app 2. install app in manage.py 3. include route in project/urls.py 4. add route in app/urls.py 1. create a model in app/models.py 2. register model in app/admin.py 3. migrate model 4. makemigration 5. create superuser 6. login 1. create a route in app/urls.py binding with views 2. create or reuse a new method in app/views.py return render html 3. create or reuse a html in app/templates/some_page.html 4. (Optional) css, images, font and other static file have to be located in app/static/ 5. refresh page CREATING PROJECT INSTALLING AN APP TO DJANGO PROJECT ADDING A DATABASE MODEL MAKING A NEW PAGE TO THE APP
  • 66. BONUS! DEPLOY YOUR APP TO 
 PYTHONANYWHERE.COM DJANGO#101 1. register 2. create a pythonanywhere API token 3. go to dashboard -> open a bash 4. install pip 5. install your django project from GitHub 6. create a superuser on pythonanywhere 7. collect static file 8. refresh the apps 9. your app is ready on 
 username.pythonanywhere.com P.S. you can use ‘git pull’ for the latest
 version of your django project and repeat
 number 7 - 9