Python :
Django
(Jerry Wu)
dsjerry2017@gmail.com 1
•
•
•
• Founder
•
• MIT edX/MandarinX
•
• /
• DSP
• Teradata
•
• R
•
•
• https://www.ap-mic.com
• http://dataology.blogspot.tw
• https://www.linkedin.com/in/jerry2012/
(Jerry)
dsjerry2017@gmail.com 2
Top 5 Python Web Framework
• Django
• Python
•
• Instagram edx Pinterest
• Flask
•
•
• Tornado
•
•
• Bottle
•
• Web2py
• google web.py
dsjerry2017@gmail.com 4
Joomla VS WP = Django VS Flask
Vitrualenv
dsjerry2017@gmail.com
Vitrualenv
dsjerry2017@gmail.com
• pip install virtualenv
• pip3 install virtualenv
• easy_install virtualenv
• virtualenv
• virtualenv project
• WIN Scriptsactivate.bat
• MAC
• source ./bin/activate
• Deactivate
Vitrualenv
pip install django==1.11rc1
Install Django
dsjerry2017@gmail.com
python -m django --version
Install Django - Verifying
dsjerry2017@gmail.com
Part 1: Requests and
responses
• django-admin startproject mysite
• python manage.py runserver
Creating a project
dsjerry2017@gmail.com
• manage.py: A command-line utility that lets you interact
with this Django project in various ways.
• mysite/__init__.py: An empty file that tells Python that this
directory should be considered a Python package.
• mysite/settings.py: Settings/configuration for this Django
project.
• mysite/urls.py: The URL declarations for this Django project.
• mysite/wsgi.py: An entry-point for WSGI-compatible web
servers to serve your project.
Creating a project
dsjerry2017@gmail.com
• What’s the difference between a project and an app
• An app is a Web application that does something – e.g., a
Weblog system, a database of public records or a simple
poll app.
• A project is a collection of configuration and apps for a
particular website. A project can contain multiple apps.
An app can be in multiple projects.
Creating app
dsjerry2017@gmail.com
• python manage.py startapp jerry
Creating app
dsjerry2017@gmail.com
Write your first view
dsjerry2017@gmail.com
Write your first view
dsjerry2017@gmail.com
Write your first view
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Part 2: Models and the admin site
• The migrate command looks at
the INSTALLED_APPS setting and creates any necessary
database tables according to the database settings in
your mysite/settings.py file and the database migrations
shipped with the app.
Part 2: Models and the admin site
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
ForeignKey
dsjerry2017@gmail.com
• python manage.py makemigrations polls
• python manage.py sqlmigrate polls 0001
• python manage.py migrate
dsjerry2017@gmail.com
• python manage.py shell
• from polls.models import Question, Choice
• Question.objects.all()
• from django.utils import timezone
• q = Question(question_text=“What‘s new",
pub_date=timezone.now())
• q.save()
• q.id
• q.question_text
• q.pub_date
Playing with the API
dsjerry2017@gmail.com
• q.question_text = "What's up?“
• q.save()
• Question.objects.all()
Playing with the API
dsjerry2017@gmail.com
Playing with the API
dsjerry2017@gmail.com
• python manage.py makemigrations polls
• python manage.py migrate
• python manage.py shell
• from polls.models import Question, Choice
• Question.objects.all()
Playing with the API
dsjerry2017@gmail.com
• python manage.py createsuperuser
• Username: admin
• Email address: admin@example.com
• Password: &1234567
• python manage.py runserver
Creating an admin user
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Make the poll app modifiable in the
admin
dsjerry2017@gmail.com
dsjerry2017@gmail.com
z
dsjerry2017@gmail.com
Part 3: Views and templates
dsjerry2017@gmail.com
• Question “index” page – displays the latest few questions.
• Question “detail” page – displays a question text, with no
results but with a form to vote.
• Question “results” page – displays results for a particular
question.
• Vote action – handles voting for a particular choice in a
particular question.
Functions
dsjerry2017@gmail.com
polls/urls.py
^	
$	
+	
()	
?P
dsjerry2017@gmail.com
polls/views.py
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
http://127.0.0.1:8000/polls/22/
dsjerry2017@gmail.com
http://127.0.0.1:8000/polls/1/results/
dsjerry2017@gmail.com
http://127.0.0.1:8000/polls/1/results/
dsjerry2017@gmail.com
• Each view is responsible for doing one of two things:
returning an HttpResponse object containing the content
for the requested page, or raising an exception such
as Http404.
Write views that actually do
something
dsjerry2017@gmail.com
polls/views.py
dsjerry2017@gmail.com
http://127.0.0.1:8000/jerry/5/vote/
dsjerry2017@gmail.com 46
Python Shell
dsjerry2017@gmail.com
Python Shell
dsjerry2017@gmail.com
Python Shell
dsjerry2017@gmail.com
Python Shell
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Templates
Render
dsjerry2017@gmail.com
dsjerry2017@gmail.com
polls/templates/polls/index.html
dsjerry2017@gmail.com
polls/views.py
dsjerry2017@gmail.com
dsjerry2017@gmail.com
A shortcut: render()
Templates
dsjerry2017@gmail.com
A shortcut: render()
dsjerry2017@gmail.com
A shortcut: get_object_or_404()
dsjerry2017@gmail.com
detail.html
dsjerry2017@gmail.com
dsjerry2017@gmail.com
• How does one make it so that Django knows which app
view to create for a url when using the {% url %} template
tag ( APP)
Namespacing URL names
dsjerry2017@gmail.com
Part 4: Forms and generic views
dsjerry2017@gmail.com
• action :The action attribute defines the action to be
performed when the form is submitted.
Normally, the form data is sent to a web page on the
server when the user clicks on the submit button.
HTML Forms
dsjerry2017@gmail.com
• The method attribute specifies the HTTP method
(GET or POST) to be used when submitting the form data
HTML Forms
dsjerry2017@gmail.com
dsjerry2017@gmail.com
• <input type="radio"> defines a radio button.
• Radio buttons let a user select ONLY ONE of
a limited number of choices:
HTML Forms (detail.html)
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Add Options
dsjerry2017@gmail.com 70
dsjerry2017@gmail.com
Add Results
dsjerry2017@gmail.com 72
Results.html
dsjerry2017@gmail.com 73
Views.py Check
dsjerry2017@gmail.com 74
75
dsjerry2017@gmail.com
CMS APP - Initial
dsjerry2017@gmail.com
• mysite
• settings.py
• urls.py
• cms
• urls.py
• views.py
First Step
dsjerry2017@gmail.com
mysite/settings.py
dsjerry2017@gmail.com
mysite/urls.py
dsjerry2017@gmail.com
cms/urls.py
dsjerry2017@gmail.com
cms/views.py
dsjerry2017@gmail.com
CMS APP - Model
• python manage.py migrate
0
dsjerry2017@gmail.com
• python manage.py makemigrations cms
• python manage.py migrate
Activating models
dsjerry2017@gmail.com
admin.py
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
CMS APP - Shell
dsjerry2017@gmail.com
• python manage.py shell
• from cms.models import Restaurant, Food
• restaurants=Restaurant.objects.all()
• restaurants
Display
dsjerry2017@gmail.com
• from cms.models import Restaurant, Food
• r1 = Restaurant.objects.create(name=' ',
phone_number ='02-88888', address=' ')
• r1.save()
• Restaurant.objects.all()
Create
dsjerry2017@gmail.com
• from cms.models import Restaurant, Food
• Food.objects.all()[0].price
• Food.objects.filter(name=' ').update(price=200)
Update
dsjerry2017@gmail.com
• from cms.models import Restaurant, Food
• Restaurant.objects.all()
• f = Restaurant.objects.get(name=' ')
• f.delete()
Delete
dsjerry2017@gmail.com
CMS APP - Views
dsjerry2017@gmail.com
Templates
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Blog APP
dsjerry2017@gmail.com
APP
dsjerry2017@gmail.com
Model
dsjerry2017@gmail.com
dsjerry2017@gmail.com
Project urls
dsjerry2017@gmail.com
APP urls, views
urls
views
dsjerry2017@gmail.com
Templates
dsjerry2017@gmail.com
Blog APP
dsjerry2017@gmail.com
Album APP
dsjerry2017@gmail.com
APP
dsjerry2017@gmail.com
Model
dsjerry2017@gmail.com
dsjerry2017@gmail.com
• pip3 install Pillow
Python
dsjerry2017@gmail.com
Project urls
dsjerry2017@gmail.com
APP urls, views
urls
views
dsjerry2017@gmail.com
Templates
dsjerry2017@gmail.com
dsjerry2017@gmail.com
dsjerry2017@gmail.com
jerry@mail.ntust.edu.tw
dsjerry2017@gmail.com 116

Python網站框架絕技: Django 完全攻略班