Slide bài giảng môn Lập trình với Python nội dung bằng tiếng Anh | Học viện Công nghệ Bưu chính Viễn thông

Slide bài giảng môn Lập trình với Python nội dung bằng tiếng Anh của Học viện Công nghệ Bưu chính Viễn thông với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36067889
Web Frameworks
for Python
lOMoARcPSD|36067889
Web Framework
Tp hp các gói/mô-đun
để viết các ng dng hoc dch v Web
quy trình / lung.
Các nn tng ph biến (
https://wiki.python.org/moin/WebFrameworks/
)
Django
Flask
web2py
Chai
CherryPy
Raspbian bao gm Flask, không cần cài đặt.
lOMoARcPSD|36067889
Django
MVC
Ngôn ng mu linh hot có th đưc s dng đ to HTML, CSV, Email
hoc bt k định dng nào khác
H tr nhiều cơ sở d liu -Postgresql , MySQL, Oracle, SQLite
Nhiều tính năng bổ sung: phn mm trung gian, qun lý phiên, b nh đm,
xác thc
Cài đặt
pip install Django
lOMoARcPSD|36067889
B cc 1 project Django
lOMoARcPSD|36067889
Template
Biumuhinthdliu
HTML (hoặctươngđương) vớicácbiến
lOMoARcPSD|36067889
Model
Cấutrúcđểtruycpdliu
Cho phéptruycpdliudễdànghơn
Cácmôhìnhđượcliênkết
HôtrợcơchếOOP Object Relation Mapping (ORM)
lOMoARcPSD|36067889
View
Tươngtácvớingưidùng
Thưcthicácthaotácđểnhpthôngtin vàomodel
Sinhcácbiumuvàtrlạingườidùng
lOMoARcPSD|36067889
Database (RDBMS)
Dùngđểlưutrữ, truycpdliu
HtrnhiuAPIs
Django HtrnhiuhquntrCSDL khácnhau
lOMoARcPSD|36067889
Migrations
Cho phépsicutrúcdliu
Htrợthayđổi, di chuyncode ddàng
ĐịnhnghĩaCSDL bằngcode
lOMoARcPSD|36067889
Buthiếtlp
$ python -V
$ pip install django
$ django-admin startprojectmysite
$ django-admin startappproduct
lOMoARcPSD|36067889
settings.py
Xác định cài đặt được ng dng Django s dng
Tham chiếu bi wsgi.py
khởi động quá trình ti d án
Phiên bn dev và prod:
Thiết lp thông qua settings.py
To settings-dev.py và settings-prod.py
liên kết settings.py
Cài đặt chung base-settings.py và import.
lOMoARcPSD|36067889
Ví d
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
lOMoARcPSD|36067889
ng dng Django
Các mô-đun có thể tái s dng
django-admin.pystartapp < app_name >
To b cục sơ khai:
<
APP_ROOT
>
admin.py
models.py
templates (directory)
tests.py
views.py
urls.py
lOMoARcPSD|36067889
Model
Được xác định trong models.py
Thường kế tha t django.db.models.Model
Ví d:
from django.dbimport models
class TestModel(models.Model):
name = models.CharField(max_length= 20)
age = models.IntegerField()
lOMoARcPSD|36067889
Model (tiếp)
Mặc định NOT NULL cho tt c các trường. Ghi đè bng cách thêm null
=
TRUE cho trường cn thay đổi
:
name = models.CharField ( max_length = 20, null = True)
Các mi quan h được xác định thông qua các loại trường đặc bit:
models.OneToOneField(model)
models.ForeignKey(model)
models.ManyToManyField(model)
lOMoARcPSD|36067889
Model (tiếp)
Nếu cần Null trong Trường Boolean
S dng models.NullBooleanField()
Đặt giá tr Mặc định bằng “default”:
count = models.IntegerField(default = 0)
S dng mt lớp Meta bên trong để xác định các tùy chn b sung, đặc bit
hu ích cho các lp trừu tượng:
class TestModel(models.Model):
class Meta:
abstract = True
lOMoARcPSD|36067889
Mt s phương thức ca Model
model.save(self, *args, **kwargs)
model.delete(self, *args, **kwargs)
model.get_absolute_url(self)
model.__str__(self) [Python 3]
model.__unicode__(self) [Python 2]
Ghi đè bằng super (MODEL, self) .save (* args , ** kwargs )
lOMoARcPSD|36067889
Template
Cú pháp đơn giản:
variables = {{variable_name}}
template tags = {%tag%}
Linh hot -có th đưc s dụng để tạo html, text, csv , email …!
lOMoARcPSD|36067889
Víd
<!
doctype html
>
<
html lang=en
>
<
head
>
<
meta charset=utf
-8>
<
title>List of Questions</title
>
<
/head
>
<
body
>
{
%if questions%
}
<
ul
>
{
%for q in questions%
}
<
li>{{q.question_text}}</li
>
{
%endfor%
}
<
/ul
>
{
%else%
}
>
<
p>No questions have been defined</p
{
%endif%
}
<
/body
>
/html
>
<
lOMoARcPSD|36067889
urls.py
Định tuyến request ti view
Có th s dng biu thc chính quy
Trích xut các tham s t mt url và chuyn đến view vi các tham s nếu có:
r(‘^question/(?P<question_id>\d+)/$’,’views.question_detail’)
M rng -urls.py có th bao gm các tp url b sung t các app:
r ('^ question /', include ( question.urls ))
lOMoARcPSD|36067889
Ví d
from django.conf.urlsimport patterns, url, include
urlpatterns= patterns(‘’,
(
r’^questions/$’,’views.QuestionList’
)
)
OR:
from django.conf.urlsimport patterns
from views import QuestionListView
urlpatterns= patterns(‘’,
(
r’^questions/$’,’views.QuestionList.as_view
())
)
lOMoARcPSD|36067889
Biu mu trong Django
django.forms cung cp mt lớp để xây dng các biu mu HTML và xác
thc. Ví d:
from djangoimport forms
class EditQuestionForm(forms.Form):
question_text= forms.CharField(max_length= 200)
lOMoARcPSD|36067889
Flask
Flask: micro-framework choPython
Dễdàngvàđơngiả
Lptrình
Cuhình
Htrnhiutàiliu
RESTful
Cóthkimth
lOMoARcPSD|36067889
Flask
DatrênWerkzeugvàJinja 2
WSGI
Template Engine
lOMoARcPSD|36067889
Flask
Flask-Admin
Flask-Cache
Flask-OpendID
Flask-Mail
Flask-
MongoAlchemy
Dmrngvinhiềucore đơngiản
Flask-Restless
Flask-
SQLAlchemy
Flask-Testing
Flask-WTF
Flask-Uploads
lOMoARcPSD|36067889
First Flask app
pip install Flask
Coding
# Import Flask library
from
flask
import
Flask
# Initialize the app from Flask
app = Flask(__name__)
# Define a route to hello_world function
@app.route
'/'
(
)
def
hello_world
():
return
'Hello World!'
# Run the app on
http://localhost:8085
app.run(
debug
=
True
,
port
=
8085
)
Running
python hello.py
Installing
lOMoARcPSD|36067889
Flask
pi@raspberrypi:~ $
cathello.py
fromflaskimportFlask
app= Flask(__name__)
@app.route('/')
defhello_world():
return'Hello, World!'
if__name__ == '__main__':
app.run(host='0.0.0.0
)
pi@raspberrypi:~ $
python3 hello.py
* Runningonhttp://0.0.0.0:5000/ (PressCTRL+C toquit)
192.168.0.129 --[02/Nov/2017 10:52:38]
"GET / HTTP/1.1" 200
-
192.168.0.129 --[02/Nov/2017 10:52:38]
"GET /favicon.icoHTTP/1.1" 404
-
lOMoARcPSD|36067889
Route () Decorator
route () được s dụng để liên kết mt hàm vi mt URL
fromflaskimportFlask
app= Flask(__name__)
@app.route('/')
defindex():
return'IndexPage'
@app.route('/hello')
defhello():
return'HelloWorld'
if__name__ == '__main__':
app.run(host='0.0.0.0')
lOMoARcPSD|36067889
Biến thành URL
fromflaskimportFlask
app= Flask(__name__)
@app.route('/user/<username>')
defshow_user_profile(username):
# showtheuserprofileforthatuser
return'User %s' % username
@app.route('/post/<int:post_id>')
defshow_post(post_id):
# showthepostwiththegivenid, theidisaninteger
return'Post %d' % post_id
if__name__ == '__main__':
app.run(host='0.0.0.0')
lOMoARcPSD|36067889
Mu
fromflaskimportFlask
fromflaskimportrender_template
app= Flask(__name__)
@app.route('/greeting')
@app.route('/greeting/<name>')
def hello(name=None):
return render_template('greeting.html', name=name)
if __name__ == '__main__':
app.run(host='0.0.0.0')
lOMoARcPSD|36067889
Templates
render_template ('welcome.html', name = name)
greenting.html phải đưc lưu trữ trong các templates/
$ cat Template / welcome.html
<!
>
doctype html
<
>
title>Hello from Flask</title
{
}
% if name %
<
1>
h1>Hello {{ name }}!</h
{
}
% else %
<
1>
h1>Hello World!</h
{
}
% endif %
lOMoARcPSD|36067889
Form & Request Object
from flask import Flask, request
@app.route('/formtest', methods=['POST', 'GET'])
def form_test():
if request.method== 'POST':
return 'Username: %s' % (request.form['username'])
else:
return ''' <form action="/formtest" method="post">
Name: <input name="username" type="text" /> <br/>
<
input value="Send" type="submit" /
>
<
/form> '''
lOMoARcPSD|36067889
Phiên hp
http://127.0.0.1:5000/logout
| 1/33

Preview text:

lOMoARcPSD| 36067889 Web Frameworks for Python lOMoARcPSD| 36067889 Web Framework
 Tập hợp các gói/mô-đun
 để viết các ứng dụng hoặc dịch vụ Web
 không cần phải xử lý các chi tiết cấp thấp như giao thức, socket hoặc quản lý quy trình / luồng.
 Các nền tảng phổ biến ( https://wiki.python.org/moin/WebFrameworks/ )  DjangoFlask  web2py  Chai  CherryPy
 Raspbian bao gồm Flask, không cần cài đặt. lOMoARcPSD| 36067889 Django  MVC
 Ngôn ngữ mẫu linh hoạt có thể được sử dụng để tạo HTML, CSV, Email
hoặc bất kỳ định dạng nào khác
 Hỗ trợ nhiều cơ sở dữ liệu -Postgresql , MySQL, Oracle, SQLite …
 Nhiều tính năng bổ sung: phần mềm trung gian, quản lý phiên, bộ nhớ đệm, xác thực  Cài đặt pip install Django lOMoARcPSD| 36067889
Bố cục 1 project Django lOMoARcPSD| 36067889 Template
 Biểumẫuhiễnthịdữliệu
 HTML (hoặctươngđương) vớicácbiến lOMoARcPSD| 36067889 Model
 Cấutrúcđểtruycậpdữliệu
 Cho phéptruycậpdữliệudễdànghơn
 Cácmôhìnhđượcliênkết
 HôtrợcơchếOOP –Object Relation Mapping (ORM) lOMoARcPSD| 36067889 View
 Tươngtácvớingườidùng
 Thưcthicácthaotácđểnhậpthôngtin vàomodel
 Sinhcácbiểumẫuvàtrảlạingườidùng lOMoARcPSD| 36067889 Database (RDBMS)
 Dùngđểlưutrữ, truycậpdữliệu  HỗtrợnhiềuAPIs
 Django –HỗtrợnhiềuhệquảntrịCSDL khácnhau lOMoARcPSD| 36067889 Migrations
 Cho phépsửađổicấutrúcdữliệu
 Hỗtrợthayđổi, di chuyểncode dễdàng
 ĐịnhnghĩaCSDL bằngcode lOMoARcPSD| 36067889
Bắtđầuthiếtlập $ python -V $ pip install django
$ django-admin startprojectmysite
$ django-admin startappproduct lOMoARcPSD| 36067889 settings.py
 Xác định cài đặt được ứng dụng Django sử dụng
 Tham chiếu bởi wsgi.py  khởi động quá trình tải dự án
 Phiên bản dev và prod:
 Thiết lập thông qua settings.py
 Tạo settings-dev.py và settings-prod.py  liên kết settings.py
 Cài đặt chung base-settings.py và import. lOMoARcPSD| 36067889 Ví dụ DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ) lOMoARcPSD| 36067889 Ứng dụng Django
 Các mô-đun có thể tái sử dụng
 django-admin.pystartapp < app_name >
 Tạo bố cục sơ khai: < APP_ROOT > admin.py models.py templates (directory) tests.py views.py urls.py lOMoARcPSD| 36067889 Model
 Được xác định trong models.py
 Thường kế thừa từ django.db.models.Model Ví dụ: from django.dbimport models
class TestModel(models.Model):
name = models.CharField(max_length= 20) age = models.IntegerField() lOMoARcPSD| 36067889 Model (tiếp)
 Mặc định NOT NULL cho tất cả các trường. Ghi đè bằng cách thêm null
= TRUE cho trường cần thay đổi :
name = models.CharField ( max_length = 20, null = True)
 Các mối quan hệ được xác định thông qua các loại trường đặc biệt: models.OneToOneField(model) models.ForeignKey(model) models.ManyToManyField(model) lOMoARcPSD| 36067889 Model (tiếp)
 Nếu cần Null trong Trường Boolean  Sử dụng models.NullBooleanField()
 Đặt giá trị Mặc định bằng “default”:
count = models.IntegerField(default = 0)
 Sử dụng một lớp Meta bên trong để xác định các tùy chọn bổ sung, đặc biệt
hữu ích cho các lớp trừu tượng:
class TestModel(models.Model): class Meta: abstract = True lOMoARcPSD| 36067889
Một số phương thức của Model
 model.save(self, *args, **kwargs)
 model.delete(self, *args, **kwargs)
 model.get_absolute_url(self)
 model.__str__(self) [Python 3]
model.__unicode__(self) [Python 2]
 Ghi đè bằng super (MODEL, self) .save (* args , ** kwargs ) lOMoARcPSD| 36067889 Template  Cú pháp đơn giản: variables = {{variable_name}} template tags = {%tag%}
 Linh hoạt -có thể được sử dụng để tạo html, text, csv , email …! lOMoARcPSD| 36067889 Vídụ <! doctype html > < html lang=en > < head > < meta charset=utf -8>
< title>List of Questions < /head > < body > { %if questions% } < ul > { %for q in questions% }
< li>{{q.question_text}} { %endfor% } < /ul > { %else% }
< p>No questions have been defined { %endif% } < /body > l > lOMoARcPSD| 36067889 urls.py
 Định tuyến request tới view
 Có thể sử dụng biểu thức chính quy
 Trích xuất các tham số từ một url và chuyển đến view với các tham số nếu có:
r(‘^question/(?P\d+)/$’,’views.question_detail’)
 Mở rộng -urls.py có thể bao gồm các tệp url bổ sung từ các app:
r ('^ question /', include ( question.urls )) lOMoARcPSD| 36067889 Ví dụ
from django.conf.urlsimport patterns, url, include urlpatterns= patterns(‘’,
( r’^questions/$’,’views.QuestionList’ ) ) OR:
from django.conf.urlsimport patterns
from views import QuestionListView urlpatterns= patterns(‘’,
( r’^questions/$’,’views.QuestionList.as_view ()) ) lOMoARcPSD| 36067889
Biểu mẫu trong Django
 django.forms cung cấp một lớp để xây dựng các biểu mẫu HTML và xác thực. Ví dụ: from djangoimport forms
class EditQuestionForm(forms.Form):
question_text= forms.CharField(max_length= 200) lOMoARcPSD| 36067889 Flask
• Flask: micro-framework choPython
• Dễdàngvàđơngiảnđể • Lậptrình • Cấuhình
• Hỗtrợnhiềutàiliệu • RESTful • Cóthểkiểmthử lOMoARcPSD| 36067889 Flask
DựatrênWerkzeugvàJinja 2 WSGI Template Engine lOMoARcPSD| 36067889 Flask
Dễmởrộngvớinhiềucore đơngiản • Flask-Admin • Flask-Restless • Flask-Cache • Flask- • Flask-OpendID SQLAlchemy • • Flask-Mail Flask-Testing • • Flask- Flask-WTF MongoAlchemy • Flask-Uploads lOMoARcPSD| 36067889 First Flask app
Installing pip install Flask Coding # Import Flask library from flask import Flask
# Initialize the app from Flask app = Flask(__name__)
# Define a route to hello_world function @app.route '/' ( ) def hello_world (): return 'Hello World!'
# Run the app on http://localhost:8085
app.run( debug = True , port = 8085 ) Running python hello.py lOMoARcPSD| 36067889 Flask
pi@raspberrypi:~ $ cathello.py fromflaskimportFlask app= Flask(__name__) @app.route('/') defhello_world(): return'Hello, World!' if__name__ == '__main__': app.run(host='0.0.0.0 ’ )
pi@raspberrypi:~ $ python3 hello.py
* Runningonhttp://0.0.0.0:5000/ (PressCTRL+C toquit)
192.168.0.129 --[02/Nov/2017 10:52:38] "GET / HTTP/1.1" 200 -
192.168.0.129 --[02/Nov/2017 10:52:38] "GET /favicon.icoHTTP/1.1" 404 - lOMoARcPSD| 36067889 Route () Decorator
 route () được sử dụng để liên kết một hàm với một URL fromflaskimportFlask app= Flask(__name__) @app.route('/') defindex(): return'IndexPage' @app.route('/hello') defhello(): return'HelloWorld' if__name__ == '__main__': app.run(host='0.0.0.0') lOMoARcPSD| 36067889 Biến thành URL fromflaskimportFlask app= Flask(__name__) @app.route('/user/')
defshow_user_profile(username):
# showtheuserprofileforthatuser return'User %s' % username @app.route('/post/') defshow_post(post_id):
# showthepostwiththegivenid, theidisaninteger return'Post %d' % post_id if__name__ == '__main__': app.run(host='0.0.0.0') lOMoARcPSD| 36067889 Mẫu fromflaskimportFlask
fromflaskimportrender_template app= Flask(__name__) @app.route('/greeting') @app.route('/greeting/') def hello(name=None):
return render_template('greeting.html', name=name) if __name__ == '__main__': app.run(host='0.0.0.0') lOMoARcPSD| 36067889 Templates
 render_template ('welcome.html', name = name)
 greenting.html phải được lưu trữ trong các templates/
 $ cat Template / welcome.html
<! doctype htm > l
< title>Hello from Flask tle { % i } f name %
< h1>Hello {{ name }} 1> ! { % else } %
< h1>Hello Worl 1> d! { } % endif % lOMoARcPSD| 36067889
Form & Request Object
from flask import Flask, request
@app.route('/formtest', methods=['POST', 'GET']) def form_test(): if request.method== 'POST':
return 'Username: %s' % (request.form['username']) else: return ''' Name:
< input value="Send" type="submit" / > < /form> ''' lOMoARcPSD| 36067889 Phiên họp http://127.0.0.1:5000/logout