Báo cáo: Tìm hiểu tổng quan về Django

22 2K 39
Báo cáo: Tìm hiểu tổng quan về Django

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Cùng với sự phát triển của nhiều ngôn ngữ lập trình web như PHP, Ruby,Scheme thì Python là một cái tên đáng chú ý. Python là một ngôn ngữ có hình thái rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới bắt đầu học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu nhất. Python là một ngôn ngữ lập trình đơn giản nhưng lại rất hiệu quả. Bên cạnh đó, Python là một ngôn ngữ có tính hướng đối tượng cao.Ưu điểm:Dễ học, dễ hiểu. Đa năng.Đa biến hóa.Trình thông dịch.

Mục lục Mục lục I.Giới thiệu chung .3 1.Python .3 2.Django 3.Cài đặt .3 4.Cấu hình Database .5 II.Các đặc trưng .5 1.Ánh xạ đối tượng - quan hệ (Object-relational mapper) .5 a.Projects .apps .5 b.Model c.Class d.Giao diện lập trình ứng dụng truy cập sở liệu (Database access API) .6 2.Giao diện quản trị (Admin Interface) a.Sử dụng giao diện quản trị .7 b.Tùy biến lớp ModelAdmin c.Quản lý quyền (Permission) .8 3.URL linh động a.Sử dụng URL b.Quá trình xử lý yêu cầu 10 c. URL động 10 4.Hệ thống mẫu (Template system) 11 a.Thành phần .11 b.Đặc điểm 12 5.Hệ thống Cache (Cache system) 15 a.Các kiểu cache 15 b.Các tham số CACHE .18 c.Các cấp độ cache 18 6.Quốc tế hóa (Internationalization) .21 III.Tổng kết 22 1.Ưu điểm: .22 2.Nhược điểm: .22 3.Phân công công việc 22 IV.Tài liệu tham khảo .22 Nhận xét giảng viên …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… …………………………………………………………………………………………………… I. Giới thiệu chung. 1. Python Cùng với phát triển nhiều ngôn ngữ lập trình web PHP, Ruby,Scheme Python tên đáng ý. Python ngôn ngữ có hình thái sáng sủa, cấu trúc rõ ràng, thuận tiện cho người bắt đầu học lập trình. Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu nhất. Python ngôn ngữ lập trình đơn giản lại hiệu quả. Bên cạnh đó, Python ngôn ngữ có tính hướng đối tượng cao. Ưu điểm: - Dễ học, dễ hiểu. - Đa năng. - Đa biến hóa. - Trình thông dịch. 2. Django - Django , ban đầu framework cho website tờ báo Kansas đưa vào sử dụng rộng rãi từ năm 2005 đến nay. Django Web framework hướng đối tượng dựa python, theo mô hình Model – Controller – View. Django cho phép xây dựng trang web với hiệu suất cao cách nhanh chóng. Đó lí Django dần trở nên phổ biến nhằm triển khai dự án quy mô lớn nhanh hiệu quả. 3. Cài đặt - Yêu cầu Python 2.6 trở lên. Download Django từ địa https://www.djangoproject.com/download/ Giải nén tập tin down về, mở cmd tới đường dẫn tập tin giải nén chạy lệnh: python setup.py install - Bắt đầu project lệnh: python django-admin.py startproject Thư mục tạo có cấu trúc: site name manage.py site name __init__.py - settings.py urls.py wsgi.py Khởi động server: python manage.py runserver [ip:][port] Hình 1: Hình ảnh trang chủ khởi động server. 4. Cấu hình Database Django hỗ trợ thức hệ quản trị sở liệu: PostgreSQL, MySQL, Oracle SQLite. Ngoài có cung cấp bên thứ ba để dùng với hệ quản trị sở liệu khác như: Sybase SQL Anywhere, IBM DB2, Microsoft SQL Server 2005, Firebird hay ODBC. Để cài đặt hệ quản trị sở liệu kèm, ta chỉnh sửa file settings.py trường DATABASES. - - DATABASES = { 'default': { 'ENGINE': 'django.db.backends. ', # 'postgresql_psycopg2', 'mysql', # 'sqlite3' or 'oracle‘ … 'NAME': '', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } II. Các đặc trưng chính. 1. Ánh xạ đối tượng - quan hệ (Object-relational mapper) a. Projects .apps - Một app ứng dụng Web để thực việc nào đó. Ví dụ ứng dụng lấy ý kiến người dùng web hay ứng dụng viết hiển thị blog, … - Một project bao gồm cấu hình app cho trang web cụ thể. - Một project gồm nhiều app. Tuy nhiên app thuộc nhiều project. Để sử dụng app project, ta cần khai báo app file settings.py trường INSTALLED_APPS. Ví dụ: INSTALLED_APPS = ('your_app',) - Để tạo app: python manage.py startapp Thư mục tạo có cấu trúc sau: App name __init__.py admin.py views.py models.py tests.py b. Model - Model nguồn định nghĩa thông tin từ sở liệu. Nó bao gồm lớp thuộc tính liệu. Thông thường, class model tương ứng với bảng sở liệu. Mỗi thuộc tính class tương ứng với trường sở liệu. - Model đồng với sở liệu lệnh: python manage.py syncdb c. Class - Các class định nghĩa file models.py, kế thừa từ class django.db.models.Model. Mỗi class tương ứng với bảng sở liệu. Ví dụ: class Author(models.Model): - - Mỗi class có thuộc tính riêng ứng với trường bảng sở liệu. Các class *Field định nghĩa kiểu thuộc tính đó. Ví dụ: name = models.CharField(max_length=200) Django thao tác với ghi bảng thông qua đối tượng (object) thuộc class tương ứng. d. Giao diện lập trình ứng dụng truy cập sở liệu (Database access API) - Khởi động API lệnh: python manage.py shell Hình 2: Hình ảnh giao diện truy cập sở liệu. - API cho phép ta truy vấn chèn, sửa, xóa sở liệu cách nhanh chóng qua câu lệnh python. Kèm theo đó, python ngôn ngữ thông dịch nên ta nhận kết mà không cần qua bước biên dịch. - Các thao tác với ghi thông qua đối tượng, điều thể tính hướng đối tượng cao Python. Tuy nhiên, Django cho phép ta sử dụng câu lệnh truy vấn SQL (Raw Query) ta muốn. Ví dụ: for a in Author.objects.raw('SELECT id, name FROM blogs_author'): . print(a) . 2. Giao diện quản trị (Admin Interface) Django cung cấp sẵn giao diện quản trị cho phép người dùng quản lý đối tượng class trang web. Việc có lợi: - Khi người dùng nhiều kiến thức kỹ thuật, họ dùng sẵn trang quản trị để quản lý thông tin mình. - Kiểm tra mô hình liệu (data model) cách trực quan. - Cho phép quản lý liệu trang web. - Trang giao diện với chức đơn giản, dễ dùng nhanh chóng. a. Sử dụng giao diện quản trị - Để sử dụng giao diện quản trị, ta cần khai báo app 'django.contrib.admin' file settings.py trường INSTALLED_APPS: - Để truy cập vào trang quản trị, ta cần khai báo đường dẫn (url) đến trang file urls.py: url(r'^admin/', include(admin.site.urls)), Hình 3: Trang đăng nhập vào trang quản trị - Để giao diện quản trị quản lý class, ta cần phải khai báo class file admin.py app đó: Ví dụ: admin.site.register(your_class) Hình 4: Giao diện quản trị b. Tùy biến lớp ModelAdmin - Django cho phép ta tùy biến class quản lý cách khai báo class kế thừa lớp ModelAdmin. Trong class ta đặt lại giá trị tùy chọn có lớp cha ModelAdmin hay định nghĩa hàm chức mới. Ví dụ: class AuthorAdmin(admin.ModelAdmin): # tùy chọn # hàm admin.site.register(Author,AuthorAdmin) Ta hiểu việc tùy biến class Author khai báo với tùy chọn class AuthorAdmin. Nếu tùy chọn không đặt Django sử dụng giá trị mặc định cho tùy chọn đó. c. Quản lý quyền (Permission) Trang quản trị cung cấp cho nhà quản trị việc quản lý quyền người dùng. Ví dụ người dùng có quyền thêm, sửa hay xóa class app nào. Điều hữu ích việc hạn chế, điều chỉnh việc can thiệp người dùng đến thông tin trang web. Hình 5: Trang quản lý quyền người dùng. 3. URL linh động Để thiết kế URL, ta cần tạo module gọi URLconf. Đây mã python (đặt file urls.py) quy định việc ánh xạ url ứng với hàm view nào. Nó dài hay ngắn tùy thuộc vào người lập trình tham chiếu đến URLconf khác. a. Sử dụng URL - Các đường dẫn (url) khai báo file urls.py, người dùng thêm, xóa tùy chỉnh url theo ý muốn đây. URL định nghĩa đường dẫn hàm view mà ánh xạ đến. Ví dụ: from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^your_view/', views.your_view), ) - Ta tạo URLconf cho app. Django cho phép tham chiếu từ URLconf đến URLconf app khác lệnh include. Ví dụ: urlpatterns = patterns('', url(r'^your_app/', include('your_app.urls')), ) b. Quá trình xử lý yêu cầu Khi người dùng gửi URLrequest đến, bước để trả trang người dùng cần là: B1: Xác định URLconf module. B2: Load module tìm kiếm biến urlpatterns. B3: Chạy qua URL parttern, dừng lại giá trị trùng với URL yêu cầu. B4: Nếu tồn URL đáp ứng yêu cầu, Django gọi hàm view tương ứng. B5: Nếu URL định nghĩa yêu cầu, trang xử lý lỗi trả về. Hình 6: Trang lỗi trả trường hợp không tìm thấy URL yêu cầu. c. URL động - Trong trường hợp, ta muốn với url tham số truyền sau trả cho ta kết khác mà không muốn viết lại nhiều lần định nghĩa url cho tham số, có cách hữu hiệu giải việc sử dụng URL động. Ví dụ thay ta định nghĩa riêng url ứng với hàm báo giờ: urlpatterns = patterns('', url(r'^time/plus/1/$', url(r'^time/plus/2/$', url(r'^time/plus/3/$', url(r'^time/plus/4/$', ) one_hour_ahead), two_hours_ahead), three_hours_ahead), four_hours_ahead), 10 Ta rút gọn lại định nghĩa url nhất: urlpatterns = patterns('', url(r'^time/plus/(\d+)/$', hours_ahead), ) Hàm hours_ahead(request, offset) Ở đây, (\d+) đóng vai trò hậu tố tham số truyền vào, hàm hours_ahead định nghĩa với đầu vào offset tham số nhận từ url, bắt giá trị từ url trả kết tương ứng. 4. Hệ thống mẫu (Template system). Cung cấp templates dựa cú pháp thân thiện template language, mở rộng để tách riêng rẽ thiết kế, nội dung mã code python. Nó Django’s template layer sử dụng template language giúp cân việc dễ sử dụng công hiệu nó. Nó thiết kế sử dụng tiện lợi làm việc với HTML dễ làm quen kể với người vốn dùng template language khác Smarty hay Cheetah Template. Về tổng quan, template language cung cấp thẻ tag kiểm soát tính logic mẫu qua việc dử dụng filter cung cấp sẵn. Một template file text tạo dựa nhiều định dạng HTML, XML, CSV… a. Thành phần i. Các thẻ tag Có dạng {%tag%}, số bắt buộc có thẻ tag kết thúc {%tag %} . tag contents . {% endtag %}, số tạo đoạn text cho đầu ra, số điều khiển việc thực phép logic hay vòng lặp, số lại load thông tin bên vào để biến sử dụng. Django cung cấp khoảng 20 loại thẻ tag khác nhau. Dưới số thẻ tag phổ biến hay dùng: Thẻ tag for: {% for in…%} .{% endfor %} vòng lặp duyệt phần tử mảng Vd: để hiển thị danh sách vận động viên điền kinh ta sử dụng thẻ tag for: {% for athlete in athlete_list %} {{ athlete.name }} {% endfor %} Thẻ tag if and else : {% if %}…{% else %} … {% endif %}. Ngoài thông thường ta hay sử dụng thẻ tag if for kết hợp với nhau. Các thẻ tag block and extends: thường hay sử dụng việc thừa kế (đề cập mục thừa kế) templates. ii. Các biến (variables) Có dạng {{variable}} tên biến đặt kết hợp ký tự chữ dấu gạch “_” ngoại trừ dấu cách dấu chấm. Biến có chứa thuộc tính truy cập qua dấu chấm “.”. Ví dụ: {{section.title}} biến 11 đối tượng có tên section có thuộc tính title. Thuộc tính truy cập qua việc sử dụng dấu “.”. Nếu trường hợp ta sử dụng biến không tồn template system chèn giá trị mặc định biến TEMPLATE_STRING_IF_INVALID mặc định xâu rỗng ‘’. Biến thường sử dụng kết hợp với filters để điều chỉnh biểu biến. iii. Các lọc (filters) Sử dụng kết hợp với biến có dạng {{ variable|filter }}. Sử dụng dấu số đứng “|” để gắn filter vào biến. Ví dụ: {{name|lower}} biến name lọc qua filter “lower” tên viết chữ thường. Nhiều filter sử dụng lúc việc ghép nối với Ví dụ: {{text|escape|linebreaks}} Một vài filter có chứa đối số. Ví dụ: {{ bio|truncatewords:30 }} lấy 30 từ biến bio. Django cung cấp sẵn khoảng 30 filter khác nhau, đồng thời cho phép ta tự tạo filters riêng theo người dùng. Một số filter hay sử dụng: Filter default : biến false hay rỗng gán giá trị ngầm định gán sẵn. Ví dụ: {{ value|default:"nothing" }} Nếu biến value không cung cấp từ trước hay rỗng biến chữ “nothing”. Filter length: trả độ dài biến, áp dụng cho xâu danh sách. Giả sử biến value danh sách gồm phần tử [1, 2, 3, 4] kết trả 4. Ví dụ: {{ value|length }} Filter striptags: gộp tất thẻ [X]HTML biến thành dải. Giả sử biến value I is a student kết sử dụng với lọc striptags “I am a student”. iv. Các comment file Có dạng {#comment#} Ví dụ: {# greeting #}hello Một comment bao gồm mã code dù chúng hợp lệ hay không. Ví dụ: {# {% if true %}bar{% else %} #} b. Đặc điểm i. Thừa kế Django’s template Cho phép ta xây dựng template cha-cơ bao gồm tất thành phần phổ biến website rõ blocks khai báo thẻ tag {%block %} mà template khác kế thừa ghi đè lên blocks trên. Thừa 12 kế khai báo sử dụng với từ thẻ tag {%extends…%} để báo với template engine template thừa kế (mở rộng) từ template khác. Khi template kế thừa từ template khác ghi đè (override) lên block template cha sử dụng lại nội dung định nghĩa template cha. Các nội dung thuộc blocks template cha đươc sử dụng dự phòng blocks tương ứng template không override. Ví dụ: template cha. {% block title %}My amazing site{% endblock %} {% block sidebar %} Home Blog {% endblock %} {% block content %}{% endblock %} Template con: {% {% {% {% extends "base.html" %} block title %}My amazing blog{% endblock %} block content %} for entry in blog_entries %} {{ entry.title }} {{ entry.body }} {% endfor %} {% endblock %} Template thừa kế template cha base.html việc sử dụng tag extends. Cụ thể, base.html có blocks {% block title %}; {% block sidebar %} {% block content %} override template con. Trong ví dụ template override lại hai blocks base.html {% block title %}; {% block content %} sử dụng nguyên block {% block sidebar %} base.html. Thừa kế sử dụng với nhiều cấp độ (levels) cần. Thông thường thừa kế sử dụng với cấp. Một số ý sử dụng thừa kế hệ thống mẫu: - Thẻ tag {% extends %} phải thẻ tag template template muốn thừa kế từ template khác, không hiệu lực. 13 - Nên thiết kế nhiều {% block %} nên định trước số blocks template để thừa kế template cần định nghĩa lại nội dung số block định nghĩa lại tất nội dung sử dụng block. - Nếu cần lấy nội dung block template cha sử dụng {{ block.super }} - Có thể tùy chọn đặt tên cho block đặt tên block giống template. ii. Truy nhập phương thức (Accessing method call). Các template truy nhập nhiều không thuộc tính biến truyền từ view. Ví dụ, Django cung cấp cú pháp entry_set để tìm kiếm tập đối tượng có liên hệ qua khóa ngoại hay QuerySets cung cấp hàm count() để đếm số object mà template chứa. Ta truy cập phương thức xác định rõ ràng models. Ví dụ: # In model class Task(models.Model): def foo(self): return "bar" # In template {{ task.foo }} Tuy nhiên Django giới hạn việc xử lý logic template nên ta truyền tham số vào lời gọi hàm từ template mà thay vào việc tính toán nên thực view truyền qua template để hiển thị. iii. Tự động thoát khỏi HTML (Automatic HTML escaping). Trong số trường hợp người dùng vô ý hay cố ý gửi liệu không hợp lệ gây kết không mong đợi ví dụ thay gửi liệu tên họ gửi kèm thứ khác username làm cho phần lại trang web bị in đậm gây sai lệch nội dung. Do Django cung cấp tùy chọn để phòng tránh: - Cho biến không đáng tin cậy qua filter escape để vô hiệu hóa ký tự HTML có hại cho trang web. Tuy nhên tùy chọn dẫn đến việc bỏ sót liệu người dùng. - Sử dụng automatic HTML escaping Django. Tùy chọn mặc định sử dụng template hệ thống. Năm ký tự thường mang nguy có hại chuyển sang ký tự vô hại khác: < chuyển thành < > chuyển thành > ' chuyển thành ' " chuyển thành " & chuyển thành & Django cung cấp tùy chọn tắt auto-escape số trường hợp người dùng muốn đưa nội dung chứa mã thô HTML việc hiển thị số mã HTML hướng dẫn đó. Đối với biến cá nhân, riêng lẻ 14 sử dụng filter safe để vô hiệu hóa auto-escape. Vd: {{ data|safe }} biến data có chứa ko bị chuyển thành <b> giữ nội dung mà người dùng muốn đưa vào mà không gây hại đến trang web. Đối với block template sử dụng thẻ tag autoescape .Ví dụ: {% autoescape off %} Hello {{ name }} {% endautoescape %} Auto-escape có tác dụng với thừa kế template con. 5. Hệ thống Cache (Cache system) Thông thường trang web động, với yêu cầu request từ client bên phía Web server tiến hành tính toán – từ thời gian truy vấn sở liệu đến thời gian generate temple, tạo trang giao diện để hiển thị tới cho client, tính toán đòi hỏi lượng thời gian nhiều. Đối với trang web vừa nhỏ với sở liệu cấu trúc đơn giản lượng thời gian xử lý hoàn toàn chấp nhận được, nhiên trang web từ trung bình tới lớn với việc xử lý lượng truy cập khổng lồ sở liệu lớn, phức tạp lượng thời gian để xử lý công việc lớn, kéo theo hiệu suất trang web xuống. Để giải vấn đề cần phải cắt giảm thời gian dành cho xử lý kỹ thuật cache áp dụng vào Django Framework. Hiểu đơn giản ta sử dụng nhớ đệm cache để lưu kết có thời gian xử lý yêu cầu lâu cho phép sử dụng lại cách nhanh chóng mà không cần tính toán lại vào lần tiếp theo. Nghĩa có yêu cầu gửi đến hệ thống tìm xem có trang tương ứng cache hay không có trả trang từ cache lại tiến hành xử lý bình thường tạo trang, lưu vào cache lần đồng thời trang trả cho client. Django cung cấp hệ thống cache (cache system) phong phú hỗ trợ tốt với cấp độ: dùng cache để lưu vài trang giao diện hay phần trang web phức tạp tạo khó khăn tốn thời gian xử lý toàn trang web. Bạn không trực tiếp điều khiển đưa gợi ý thông qua HTTP headers phần website cần lưu cache lưu nào. Trong Django để sử dụng kỹ thuật cache ta cần vài thiết lập nhỏ việc sử dụng kiểu cache nào. Điều quan trọng ảnh hưởng đến hiệu suất cache, nên cân nhắc để có hiệu suất phù hợp nhất. a. Các kiểu cache i. Cache nhớ (Memcached) Là kiểu cache hiệu quả, nhanh nhất, đặt phân bổ theo số quy định nhớ RAM. Nó cung cấp giao diện nhanh chóng để thêm, lấy xóa liệu cache. Tất liệu lưu trực tiếp nhớ sở liệu cà filesystem không cần thiết. Tuy nhiên chi phí cho memcached cao so với loại khác, dễ bị server xảy cố. Để sử dụng memcached ta cần cài đặt memcached từ http://memcached.org/ tiến hành số cài đặt liên kết với python-memcached pylibmc. Sau Set BACKEND thành ‘django.core.cache.backends.memcached.MemcachedCache’ ‘django.core.cache.backends.memcached.PyLibMCCache’ set location dạng ip:port. 15 Ví dụ: Memcached chạy localhost có ip 127.0.0.1 với cổng 11211 sử dụng python-memcahed. CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } Trên linux có sẵn thông qua file socket /tmp/memcahed.sock ví dụ thành CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } } Memcached có khả chia sẻ cache nhiều server nghĩa chạy memcahed nhiều máy chương trình coi tập máy cache mà không cần phải nhân cache máy. Ví dụ ta chia sẻ cache server có địa IP lượt 10.10.10.1 10.10.10.2 cổng 11211. CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] } } ii. Cache sở liệu (Databse caching) Sử dụng bảng gọi cache table sở liệu làm cache backend. Để tạo cache table ta sử dụng lệnh command sau: $ python manage.py createcachetable [cache_table_name] Tham số cache_table_name tên cache table cần tạo, cần hợp lệ không trùng với tên bảng khác tạo sở liệu. Cache table tạo có định dạng phù hợp với database-cach system quy định. Để sử dụng cache table tạo làm backend cần phải thiết lập BACKEND LOCATION. Ví dụ với LOCATION tên cache table: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 16 'LOCATION': 'my_cache_table', } } Cần sử dụng database caching backend giống với database backend file settings. Nếu sử dụng nhiều sở liệu cần phải thiết lập hướng dẫn định tuyến cho cache table. iii. Cache file hệ thống (Filesystem caching) Là kiểu cache lưu trữ filesystem. Mỗi giá trị cache lưu dạng file riêng biệt nội dung chúng lưu theo trình tự sử dụng module pickle Python. Tên file cache key nhằm đảm bảo sử dụng filesystem cách an toàn không trùng lặp. Để sử dụng ta tiến hành thiết lập cho BACKEND LOCATION. Ví dụ: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } } Lưu ý với LOCATION nên để đường dẫn tuyệt đối. Thư mục đến phải tồn thực thao tác đọc/ghi Webserver. iv. Cache nhớ địa phương (Local-memory caching) Là lựa chọn không đủ khả dùng memcache muốn có cache system tốc độ cao. Local-memory cache gồm nhiều process thread. Tuy nhiên kiểu cache không hiệu môi trường sản xuất (production environment) process có cache riêng. Ví dụ: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake' } } LOCATION dùng để xác định memory lưu trữ cache. Nếu có locmem cache ta bỏ qua LOCATION có nhiều ta nên đặt tên cho locmem cache để phân biệt chúng. v. Dummy caching Kiểu cache không hẳn thực cache cài đặt cache interface mà không làm thêm nữa. Nó hữu dụng ta có website sản phầm sử dụng cache lớn đặt nhiều nơi khác với mối trường phát triển thời ta không muốn thay đổi mã nguồn cache lần sau này. Ví dụ: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } } 17 vi. Custom cache Django hỗ trợ số cache backend loại cache trên. Để sử dụng cache backend khác dùng Python import đường dẫn BACKEND sau: 'BACKEND': 'path.to.backend'. b. Các tham số CACHE - TIMEOUT: thời gian sử dụng cache giá trị mặc định 300s - OPTION: cung cấp tùy chọn phụ trợ. - MAX_ENTRIES: số lượng tối đa mục cache trước giá trị cũ bị xóa, giá trị mặc định 300 - CULL_FREQUENCE: (1/CULL_FREQUENCE) mục lựa chọn để xóa đạt tới MAX_ENTRIES, giá trị mặc định 3. Nếu truyền vào giá trị hiểu xóa toàn cache - KEY_PREFIX: tự động thêm tiền tố cho tất cache keys để có Django server sử dụng - VERSION: phiên mặc định cho cache keys phát Django server. - KEY_FUNCTION: xâu chứa đường dẫn tới hàm định nghĩa cách thức tạo prefix, version, key info vào cache key. Ví dụ: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', 'TIMEOUT': 60, 'OPTIONS': { 'MAX_ENTRIES': 1000 } } } c. Các cấp độ cache i. The per-site cache Là lưu đệm toàn trang web. Để làm điều ta diều chỉnh file settings cách thêm dòng sau vào MIDDLEWARE_CLASSESS: 'django.middleware.cache.UpdateCacheMiddleware' 'django.middleware.cache.FetchFromCacheMiddleware' Sau ta thêm dòng sau vào file settings CACHE_MIDDLEWARE_ALLIAS: bí danh cache CACHE_MIDDLEWARE_SECONDS: thời gian (seconds) trang lưu cache. CACHE_MIDDLEWARE_PREFIX: sử dụng cache chia sẻ nhiều trang web sử dụng cài đặt Django giống nhau, thiết lập tên trang web chuỗi Django nhằm tránh xung đột khóa. Sử dụng xâu rỗng không quan tâm đến vấn đề này. Hoạt động: Cache middleware lưu GET HEAD response với status 200. Các response cho request URL khác tham số 18 coi page cache riêng biệt. Cache middleware chờ đến HEAD request phản hồi header response mà lưu cache tương ứng với GET request trước đó. Khi đó, per-site cache trả GET response ứng với HEAD request. Cache middleware tự động thêm vào vài header HttpResponse Last-Moddified (tiêu đề ngày/giờ phiên trang yêu cầu); Expires (tiêu đề ngày/giờ cộng với CACHE_MIDDLEWARE_SECONDS); Cache-Control (tiêu đề đưa độ tuổi lớn trang từ CACHE_MIDDLEWARE_SECONDS). ii. The per-view cache Sử dụng nhớ đệm để lưu kết view riêng biệt. django.views.decorators.cache định nghĩa cache_page tự động lưu kết view. Ví dụ: from django.views.decorators.cache import cache_page # cache_page có tham số cache timeout thời gian lưu kết view my_view cache @cache_page(60 * 15) def my_view(request): Với nhiều URLs trỏ đến view với URL lưu trữ riêng rẽ. Và có URL cụ thể giống với URL yêu cầu trước sử dụng cache tương ứng. Cache_page có vài tham số tùy chọn cache (hướng đến sử dụng cache cụ thể); key_prefix (tương tự CACHE_MIDDLEWARE_KEY_PREFIX). Ta định trực tiếp cache view URLconf. Ví dụ ta điều chỉnh chút file urls.py sau: from django.views.decorators.cache import cache_page urlpatterns = ('', (r'^foo/(\d{1,2})/$', cache_page(60 * 15)(my_view)), ) iii. Template fragment caching Lưu trữ cache đoạn (phần) template cách sử dụng thẻ tag cache template. Để sử dụng thẻ tag template ta cần đặt thẻ tag {% load cache %} vào gần đầu template. Thẻ tag {% cache %} lưu trữ block khoảng thời gian tính giây. Thẻ có hai tham số cache timeout tham số tên cache. Ví dụ: {% load cache %} {% cache 500 sidebar %} sidebar {% endcache %} iv. The low-level cache API Ngoài phương pháp cache ta sử dụng low-level cache API. Có thể sử dụng để lưu đối tượng vào cache bạn muốn xâu, danh sách model objects… Django cung cấp module cache, django.core.cache có đối tượng cache tạo tự động mặc định from django.core.cache import cache - Lấy đối tượng cache có nhiều cache >>> from django.core.cache import get_cache >>> cache = get_cache('alternate') 19 - Thiết lập get cache: set(key, value, timeout) get(key). Ví dụ: - Phương thức add() để thêm vào key chưa tồn tại, có tham số giống với set() không cố gắng thay đổi key tồn set() Phương thức set_many(), get_many() truy cập nhiều cache lúc: - - >>> cache.set('my_key', 'hello, world!', 30) >>> cache.get('my_key') >>> cache.set_many({'a': 1, 'b': 2, 'c': 3}) >>> cache.get_many(['a', 'b', 'c']) Phương thức xóa delete(): >>> cache.delete('a') Phương thức xóa nhiều key lúc delete_many() >>> cache.delete_many(['a', 'b', 'c']) - Xóa toàn key clear(): >>> cache.clear() Tăng, giảm key: incr() decr() - Tiền tố cache (Cache key prefix): dùng cho trường hợp chia sẻ cache server có khác định dạng lưu trữ server. Django cung cấp tiền tố cho tất cache key sử dụng server. Khi cache key lưu hay lấy Django tự động thêm tiền tố vào cache key với giá trị tiền tố quy định bỏi KEY_PREFIX phần cài đặt cache. Bằng cách đảm bào trường hợp có key_prefix khác không xảy xung đột giá trị cache. Phiên Cache (Cache version): thiết lập lấy cache theo version, mặc định giá trị version 1. - >>> >>> >>> >>> >>> cache.set('num', 1) cache.incr('num') cache.incr('num', 10) 12 cache.decr('num') 11 cache.decr('num', 5) # Đặt phiên cache cho cache key >>> cache.set('my_key', 'hello world!', version=2) # Lấy phiên cache mặc định cache key >>> cache.get('my_key') # Lấy phiên cache key >>> cache.get('my_key', version=2) #Tăng, giảm version key cụ thể >> cache.incr_version('my_key') - Cache key warning: django.core.cache.backends.base.CacheKeyWarning đưa cảnh báo cache key sử dụng gây lỗi vượt 250 ký tự, có dấu cách hay có ký tự điều khiển. Để tắt cảnh báo ta dùng warnings.simplefilter("ignore", CacheKeyWarning) v. Kiểm soát Cache (Controlling cache). Dữ liệu gồm hai loại liệu công khai liệu riêng tư, bí mật tương ứng hai kiểu cache: private cache public cache. Điều đặt đề với liệu riêng tư không để public cache, việc đòi hỏi ứng dụng web cần nói cho cache biết đâu liệu riêng tư, bí mật đâu liệu công khai. Giải pháp mà Django cung cấp page’s cache cần để chế độ private qua việc sử dụng cache_control. Với cache_control HTTP header 20 xử lý cách thích hợp gửi đi. Ví dụ: from django.views.decorators.cache import cache_control @cache_control(private=True) def my_view(request): Một vài tham số cache_control: - public=True - private=True - no_cache=True - no_transform=True - must_revalidate=True: Chỉ định cache kiểm tra phiên bản, cung cấp nội dung cache thay đổi. - proxy_revalidate=True - max_age=num_seconds: Đặt maximum time cho page lưu cache. - s_maxage=num_seconds Django cung cấp header để vô hiệu hóa caching django.views.decorators.cache.never_cache. Ví dụ: from django.views.decorators.cache import never_cache @never_cache def myview(request): # . 6. Quốc tế hóa (Internationalization). Django hỗ trợ đầy đủ ứng dụng đa ngôn ngữ với translation of text, formatting of date, times and numbers time zones. Cơ Django thực hai việc: cho phép nhà phát triển, tác giả template xác định phần càn dịch cần định dạng sang ngôn ngữ văn hóa địa phương, hai địa phương hóa trang web qua hook (móc nối phần) để phù hợp với sở thích, thói quen người địa. - Translate of text: Django cung cấp tiện ích để trích xuất chuỗi dịch (translation strings) thành message file. File cách thuận tiện người dịch tương đương với việc chuyển chuỗi dịch thành ngôn ngữ đích. Một người dịch điền vào message file phải biên dịch. Qua trình dựa vào công cụ GNU gettext. - Formatting of date: định dạng ngày cho phù hợp với vùng miền khác nhau. - Times and numbers: chuyển định dạng thời gian số phù hợp với vùng khác nhau. - Time zones: định dạng với múi với vùng khác nhau. Django tuân thủ ba bước để quốc tế hóa trang web: - Nhúng chuỗi dịch (translate string) vào mã Python mẫu (template) - Lấy dịch cho chuỗi với ngôn ngữ muốn hỗ trợ - Kích hoạt locate middleware mục setting Django. 21 III. Tổng kết 1. Ưu điểm: - - Viết ngôn ngữ Python ngôn ngữ hướng đối tượng, có cú pháp đơn giản, dễ hiểu với người nhiều lập trình viên sử dụng. Python ngôn ngữ mạnh hỗ trợ nhiều package thư viện. Phát triển theo hướng tổ chức cấu trúc: bảng sở liệu trừu tượng hóa thành model với thuộc tính phương thức, chức coi views, hiển thị thiết kế giao diện qua mẫu (templates) chúng ghép nối qua URL. Điều giúp cho nhà phát triển tổ chức, phát triển phần khác thuận tiện dễ dàng. Dễ dàng chuyển dịch cú pháp: Django cung cấp caodebase phụ trợ giúp nhà lập trình không cần phải hiểu biết sâu HTML, loại ngôn ngữ SQL, chí Javascript hay AJAX tích hợp dễ dàng chúng vào trang web. Django tuân thủ chặt chẽ nguyên tắc DRY (don’t repeat yourself) biết đến chuẩn cho việc phát triển theo hướng đối tượng mà dựa Python ngôn ngữ hướng đối tượng. 2. Nhược điểm: - Nhà phá triển chậm cập nhật nâng cấp ví dụ có Python phiên từ 3.0 trở lên Django hỗ trợ Python 2.6 có hỗ trợ phần cho Python 3.0 trở lên. 3. Phân công công việc Thành viên Đỗ Thành Trung Nguyễn Tiến Trung IV. Tìm hiểu trình bày Ánh xạ đồi tượng – quan hệ (Object-relational mapper) Giao diện quản trị (Admin Interface) URL linh động Hệ thống mẫu (Template system) Hệ thống cache (Cache system) Tính quốc tế (Internationalization) Tài liệu tham khảo 1. Books Pro Django - Alchin, Marty (16 December 2008). The Definitive Guide to Django: Web Development Done Right - Holovaty, Adrian; Kaplan-Moss, Jacob (8 July 2009). 2. Online Documents https://docs.djangoproject.com/en/1.5/ - Django Official Documentation. http://www.djangobook.com/en/2.0/index.html - The Django Book. http://mherman.org/blog/2012/12/30/django-basics/ - Django Basic. 22 [...]... tham khảo 1 Books Pro Django - Alchin, Marty (16 December 2008) The Definitive Guide to Django: Web Development Done Right - Holovaty, Adrian; Kaplan-Moss, Jacob (8 July 2009) 2 Online Documents https://docs.djangoproject.com/en/1.5/ - Django Official Documentation http://www.djangobook.com/en/2.0/index.html - The Django Book http://mherman.org/blog/2012/12/30 /django- basics/ - Django Basic 22 ... s_maxage=num_seconds Django cung cấp header để vô hiệu hóa caching bằng django. views.decorators.cache.never_cache Ví dụ: from django. views.decorators.cache import never_cache @never_cache def myview(request): # 6 Quốc tế hóa (Internationalization) Django hỗ trợ đầy đủ các ứng dụng đa ngôn ngữ với translation of text, formatting of date, times and numbers và time zones Cơ bản Django thực hiện hai việc:... truyền vào giá trị 0 sẽ được hiểu là xóa toàn bộ cache - KEY_PREFIX: tự động thêm các tiền tố cho tất các cache keys để có Django server có thể sử dụng - VERSION: phiên bản mặc định cho cache keys được phát bởi Django server - KEY_FUNCTION: xâu chứa đường dẫn tới hàm định nghĩa cách thức tạo ra prefix, version, key info vào cache key Ví dụ: CACHES = { 'default': { 'BACKEND': 'django. core.cache.backends.filebased.FileBasedCache',... cache được chia sẻ trên nhiều trang web sử dụng cài đặt Django giống nhau, thiết lập là tên trang web hoặc một chuỗi là duy nhất trong Django nhằm tránh xung đột khóa Sử dụng xâu rỗng nếu không quan tâm đến vấn đề này Hoạt động: Cache middleware lưu GET và HEAD response với status là 200 Các response cho các request của cùng một URL nhưng khác nhau về các tham số sẽ 18 được coi là những page và những... cache API Có thể sử dụng để lưu các đối tượng vào cache như bạn muốn như xâu, danh sách các model objects… Django cung cấp module cache, django. core.cache có một đối tượng cache được tạo tự động mặc định from django. core.cache import cache - Lấy một đối tượng cache nếu có nhiều cache >>> from django. core.cache import get_cache >>> cache = get_cache('alternate') 19 - Thiết lập và get cache: set(key,... %}bar{% else %} #} b Đặc điểm i Thừa kế trong Django s template Cho phép ta xây dựng một template cha-cơ bản bao gồm tất cả các thành phần phổ biến trong website và chỉ rõ những blocks được khai báo bằng thẻ tag {%block %} mà các template con khác khi kế thừa có thể ghi đè lên trên các blocks trên Thừa 12 kế được khai báo và sử dụng với từ thẻ tag {%extends…%} để báo với template engine rằng template này... các vùng khác nhau Django tuân thủ ba bước để có thể quốc tế hóa trang web: - Nhúng các chuỗi dịch (translate string) vào mã Python và mẫu (template) - Lấy bản dịch cho các chuỗi với ngôn ngữ muốn hỗ trợ - Kích hoạt các locate middleware trong mục setting của Django 21 III Tổng kết 1 Ưu điểm: - - Viết trên ngôn ngữ Python là một ngôn ngữ hướng đối tượng, có cú pháp đơn giản, dễ hiểu với mọi người được... có thể tổ chức, phát triển các phần khác nhau một thuận tiện dễ dàng Dễ dàng chuyển dịch cú pháp: Django cung cấp caodebase phụ trợ giúp nhà lập trình không cần phải hiểu biết sâu về HTML, các loại ngôn ngữ SQL, thậm chí là cả Javascript hay AJAX cũng có thể tích hợp dễ dàng chúng vào trong trang web Django tuân thủ chặt chẽ nguyên tắc DRY (don’t repeat yourself) được biết đến là chuẩn cho việc phát... phá triển chậm cập nhật và nâng cấp ví dụ như hiện tại đã có Python phiên bản từ 3.0 trở lên nhưng Django vẫn mới chỉ hỗ trợ Python 2.6 hoặc mới chỉ có hỗ trợ một phần cho Python 3.0 trở lên 3 Phân công công việc Thành viên Đỗ Thành Trung Nguyễn Tiến Trung IV Tìm hiểu và trình bày Ánh xạ đồi tượng – quan hệ (Object-relational mapper) Giao diện quản trị (Admin Interface) URL linh động Hệ thống mẫu (Template... thuật cache được áp dụng vào trong Django Framework Hiểu đơn giản ta sử dụng một bộ nhớ đệm cache để lưu những kết quả có thời gian xử lý yêu cầu lâu và cho phép sử dụng lại một cách nhanh chóng mà không cần tính toán lại vào những lần tiếp theo Nghĩa là khi có một yêu cầu được gửi đến thì hệ thống sẽ tìm xem có trang tương ứng trong cache hay không nếu có thì trả về trang đó từ cache còn lại thì sẽ . hóa. - Trình thông dịch. 2. Django - Django , ban đầu là một framework cho website của một tờ báo ở Kansas và được đưa vào sử dụng rộng rãi từ năm 2005 đến nay. - Django là một Web framework. yêu cầu, Django sẽ gọi hàm view tương ứng. B5: Nếu không có URL nào được định nghĩa như yêu cầu, trang xử lý lỗi được trả về. Hình 6: Trang lỗi được trả về trong trường hợp không tìm thấy URL. giao diện quản trị, ta cần khai báo app &apos ;django. contrib.admin' ở file settings.py tại trường INSTALLED_APPS: - Để truy cập vào trang quản trị, ta cần khai báo đường dẫn (url) đến trang

Ngày đăng: 10/09/2015, 11:06

Từ khóa liên quan

Mục lục

  • Mục lục

  • I. Giới thiệu chung.

    • 1. Python

    • 2. Django

    • 3. Cài đặt

    • 4. Cấu hình Database

    • II. Các đặc trưng chính.

      • 1. Ánh xạ đối tượng - quan hệ (Object-relational mapper)

        • a. Projects và .apps

        • b. Model

        • c. Class

        • d. Giao diện lập trình ứng dụng truy cập cơ sở dữ liệu (Database access API)

        • 2. Giao diện quản trị (Admin Interface)

          • a. Sử dụng giao diện quản trị

          • b. Tùy biến lớp ModelAdmin

          • c. Quản lý quyền (Permission)

          • 3. URL linh động

            • a. Sử dụng URL

            • b. Quá trình xử lý yêu cầu

            • c. URL động

            • 4. Hệ thống mẫu (Template system).

              • a. Thành phần

                • i. Các thẻ tag

                • ii. Các biến (variables)

                • iii. Các bộ lọc (filters)

                • iv. Các comment trong file

                • b. Đặc điểm

                  • i. Thừa kế trong Django’s template

Tài liệu cùng người dùng

Tài liệu liên quan