Web2py - Core

Tùy chọn dòng lệnh

Chúng ta đã học cách khởi động máy chủ web2py bằng tiện ích GUI trong chương trước.

Có thể bỏ qua tiện ích này bằng cách khởi động máy chủ từ command line lời nhắc.

python web2py.py -a 'mật khẩu của bạn' -i 127.0.0.1 -p 8000

Bất cứ khi nào máy chủ web2py khởi động, nó sẽ tạo một tệp "parameters_8000.py"nơi tất cả các mật khẩu được lưu trữ dưới dạng băm.

Đối với mục đích bảo mật bổ sung, dòng lệnh sau có thể được sử dụng:

python web2py.py -a '<recycle>' -i 127.0.0.1 -p 8000

Đối với trường hợp trên, web2py sử dụng lại các mật khẩu băm được lưu trữ trong "parameters_8000.py".

Trong trường hợp, nếu tệp "parameters_8000.py"bị xóa do vô tình hoặc do một số lý do khác, giao diện quản trị dựa trên web bị vô hiệu hóa trong web2py.

Lập bản đồ URL / Điều phối

Hoạt động của web2py dựa trên model-view-controller, ánh xạ URL ở một dạng cụ thể - http://127.0.0.1:8000/a/d/f.html

Nó định tuyến cho đến khi hoạt động “f()” được đề cập trong bộ điều khiển d.pynằm trong ứng dụng có tên “a”. Nếu bộ điều khiển không có trong ứng dụng thì web2py sử dụng bộ điều khiển mặc định có tên“default.py”.

Nếu hàm, như đã cho trong URL không có, thì hàm mặc định được gọi là init()Được sử dụng. Hoạt động của URL được hiển thị theo sơ đồ trong hình ảnh bên dưới.

Phần mở rộng .htmllà tùy chọn cho URL. Phần mở rộng xác định phần mở rộng củaViewkết xuất đầu ra của hàm được xác định trong bộ điều khiển. Nội dung giống nhau được phân phát ở nhiều định dạng cụ thể là html, xml, json, rss, v.v.

Yêu cầu được chuyển, dựa trên các hàm, chấp nhận các đối số và đưa ra kết quả thích hợp cho người dùng. Nó là bộ điều khiển, tương tác với mô hình và chế độ xem của ứng dụng để đưa ra kết quả đầu ra theo nhu cầu của người dùng.

web2py - Quy trình làm việc

Quy trình làm việc của web2py được thảo luận dưới đây:

  • Máy chủ web quản lý từng và mọi yêu cầu HTTP đồng thời trong chuỗi của chính nó.

  • Tiêu đề yêu cầu HTTP được phân tích cú pháp và chuyển đến người điều phối.

  • Điều phối viên quản lý các yêu cầu ứng dụng và ánh xạ PATH_INFOtrong URL của lệnh gọi hàm. Mọi lệnh gọi hàm đều được biểu diễn trong URL.

  • Tất cả các yêu cầu đối với tệp có trong thư mục tĩnh được quản lý trực tiếp và tệp lớn được truyền trực tuyến tới máy khách.

  • Yêu cầu cho bất kỳ thứ gì ngoại trừ một tệp tĩnh được ánh xạ thành một hành động.

  • Nếu tiêu đề yêu cầu chứa cookie phiên cho ứng dụng, thì đối tượng phiên sẽ được truy xuất; hoặc nếu không, một id phiên được tạo.

  • Nếu hành động trả về một giá trị dưới dạng chuỗi, giá trị này sẽ được trả lại cho máy khách.

  • Nếu hành động trả về một giá trị có thể lặp lại, nó được sử dụng để lặp và truyền dữ liệu tới máy khách.

Mô hình có điều kiện

Trong chương trước, chúng ta đã thấy chức năng của Controllers. web2py sử dụng các mô hình, khung nhìn và bộ điều khiển trong mỗi ứng dụng của nó. Do đó, cũng cần phải hiểu chức năng củaModel.

Không giống như bất kỳ ứng dụng MVC nào khác, Mô hình trong web2py được coi là có điều kiện. Các mô hình trong thư mục con được thực thi, dựa trên việc sử dụng bộ điều khiển của nó. Điều này có thể được chứng minh bằng ví dụ sau:

Xem xét URL - http://127.0.0.1:8000/a/d/f.html

Trong trường hợp này, ‘a’ là tên của ứng dụng, ‘d’ là tên của người điều khiển và f()là chức năng liên kết với bộ điều khiển. Danh sách các mô hình sẽ được thực thi như sau:

applications/a/models/*.py
applications/a/models/d/*.py
applications/a/models/d/f/*.py

Thư viện

web2py bao gồm các thư viện, được hiển thị với tất cả các ứng dụng dưới dạng các đối tượng. Các đối tượng này được định nghĩa bên trong các tệp lõi trong thư mục có tên “gluon”.

Nhiều mô-đun như mẫu DAL không có phụ thuộc và có thể được triển khai bên ngoài khuôn khổ của web2py. Nó cũng duy trì các bài kiểm tra đơn vị được coi là thực hành tốt.

Các ứng dụng

các ứng dụng web2py được hiển thị bên dưới dưới dạng sơ đồ.

Các Applications được phát triển trong web2py bao gồm các phần sau:

  • Models - Biểu diễn dữ liệu và bảng cơ sở dữ liệu.

  • Controllers - Mô tả logic ứng dụng và quy trình làm việc.

  • Views - Giúp hiển thị dữ liệu hiển thị.

  • Languages - mô tả cách dịch các chuỗi trong ứng dụng sang các ngôn ngữ được hỗ trợ khác nhau.

  • Static files - Không yêu cầu xử lý (ví dụ: hình ảnh, CSS style sheet, v.v.).

  • ABOUTREADME - Thông tin chi tiết về dự án.

  • Errors - Lưu trữ các báo cáo lỗi do ứng dụng tạo ra.

  • Sessions - Lưu trữ thông tin liên quan đến từng người dùng cụ thể.

  • Databases - lưu trữ cơ sở dữ liệu SQLite và thông tin bảng bổ sung.

  • Cache - Lưu trữ các mục ứng dụng đã lưu trong bộ nhớ cache.

  • Modules - Mô-đun là các mô-đun Python tùy chọn khác.

  • Private - Các tệp bao gồm được truy cập bởi bộ điều khiển nhưng không trực tiếp bởi nhà phát triển.

  • Uploads - Các tệp được truy cập bởi các mô hình nhưng không được nhà phát triển trực tiếp truy cập.

API

Trong web2py, models, controllersviews được thực thi trong một môi trường nơi các đối tượng nhất định được nhập cho các nhà phát triển.

Global Objects - yêu cầu, phản hồi, phiên, bộ nhớ cache.

Helpers- web2py bao gồm lớp trợ giúp, có thể được sử dụng để xây dựng HTML theo chương trình. Nó tương ứng với các thẻ HTML, được gọi là“HTML helpers”.

Ví dụ: A, B, FIELDSET, FORM, v.v.

Phiên họp

Một phiên có thể được định nghĩa là nơi lưu trữ thông tin phía máy chủ, thông tin này tồn tại trong suốt quá trình tương tác của người dùng trong ứng dụng web.

Phiên trong web2py là phiên bản của lớp lưu trữ.

Ví dụ: một biến có thể được lưu trữ trong phiên như

session.myvariable = "hello"

Giá trị này có thể được truy xuất dưới dạng

a = session.myvariable

Giá trị của biến có thể được truy xuất miễn là mã được thực thi trong cùng một phiên bởi cùng một người dùng.

Một trong những phương pháp quan trọng trong web2py cho phiên là “forget” -

session.forget(response);

Nó hướng dẫn web2py không lưu phiên.

Chạy tác vụ trong nền

Một yêu cầu HTTP đến máy chủ web, máy chủ này sẽ xử lý song song từng yêu cầu trong chuỗi của chính nó. Nhiệm vụ, đang hoạt động, diễn ra ở nền trước trong khi các tác vụ khác được giữ ở nền. Quản lý các tác vụ nền cũng là một trong những tính năng chính của web2py.

Các tác vụ tốn thời gian được ưu tiên giữ ở chế độ nền. Một số cơ chế được liệt kê như sau, quản lý các tác vụ nền -

  • CRON

  • Queues

  • Scheduler

CRON

Trong web2py, CRONcung cấp khả năng chạy tác vụ trong khoảng thời gian xác định. Mỗi ứng dụng bao gồm một tệp CRON, tệp này xác định các chức năng của nó.

Người lập kế hoạch

Bộ lập lịch tích hợp giúp chạy các tác vụ ở chế độ nền bằng cách đặt mức độ ưu tiên. Nó cung cấp một cơ chế để tạo, lập lịch và sửa đổi các tác vụ.

Các sự kiện đã lên lịch được liệt kê trong các mô hình có tên tệp “scheduler.py”.

Xây dựng ứng dụng

Chúng ta đã có một cái nhìn tổng quan về việc tạo các mô hình và bộ điều khiển trong web2py. Ở đây, chúng ta sẽ tập trung vào việc tạo ứng dụng có tên“Contacts”. Ứng dụng cần duy trì một danh sách các công ty, và danh sách những người làm việc tại các công ty đó.

Tạo mô hình

Ở đây, việc xác định các bảng cho từ điển dữ liệu là mô hình. Mô hình cho ứng dụng danh bạ sẽ được tạo trong phần “models" thư mục. Tệp được lưu trữ trongmodels/db_contacts.py.

# in file: models/db_custom.py
db.define_table('company', Field('name', notnull = True, unique = True), format = '%(name)s')
db.define_table(
   'contact',
   Field('name', notnull = True),
   Field('company', 'reference company'),
   Field('picture', 'upload'),
   Field('email', requires = IS_EMAIL()),
   Field('phone_number', requires = IS_MATCH('[\d\-\(\) ]+')),
   Field('address'),
   format = '%(name)s'
)

db.define_table(
   'log',
   Field('body', 'text', notnull = True),
   Field('posted_on', 'datetime'),
   Field('contact', 'reference contact')
)

Sau khi tệp trên được tạo, các bảng có thể được truy cập với sự trợ giúp của URL http://127.0.0.1:8000/contacts/appadmin

Tạo bộ điều khiển

Các Controller sẽ bao gồm một số chức năng để liệt kê, chỉnh sửa và xóa danh bạ.

# in file: controllers/default.py
def index():return locals()
def companies():companies = db(db.company).select(orderby = db.company.name)
return locals()

def contacts():company = db.company(request.args(0)) or redirect(URL('companies'))
contacts = db(db.contact.company == company.id).select(orderby = db.contact.name)
return locals()

@auth.requires_login()
def company_create():form = crud.create(db.company, next = 'companies')
return locals()

@auth.requires_login()
def company_edit():company = db.company(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.company, company, next='companies')
return locals()

@auth.requires_login()
def contact_create():db.contact.company.default = request.args(0)
form = crud.create(db.contact, next = 'companies')
return locals()

@auth.requires_login()
def contact_edit():contact = db.contact(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.contact, contact, next = 'companies')
return locals()

def user():return dict(form = auth())

Việc tạo ra view cùng với đầu ra của nó sẽ được thảo luận trong chương tiếp theo.