Cách triển khai các ứng dụng web Python với Khung Micro Chai trên Ubuntu 14.04
Python là một ngôn ngữ tuyệt vời để lập trình web do tính linh hoạt và chức năng cấp cao của nó. Các khung công tác web có thể làm cho việc lập trình các ứng dụng web trở nên đơn giản hơn nhiều vì chúng kết nối nhiều thành phần cần thiết cho một giao diện web mạnh mẽ.Trong khi một số khuôn khổ web cố gắng cung cấp mọi thứ, những khuôn khổ khác cố gắng tránh xa trong khi xử lý các vấn đề quan trọng, khó triển khai. Chai là một khung công tác Python thuộc loại thứ hai. Nó cực kỳ nhẹ, nhưng cũng giúp bạn dễ dàng phát triển các ứng dụng một cách nhanh chóng.
Trong hướng dẫn này, ta sẽ trình bày cách cài đặt và sử dụng Chai để tạo các ứng dụng web đơn giản trên server Ubuntu 14.04.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 14.04
- Kiến thức làm việc về cách chỉnh sửa file văn bản từ dòng lệnh
- Một user sudo
Bước 1 - Cài đặt môi trường ảo cho Python
Python, ngôn ngữ lập trình mà Bottle được xây dựng, được cài đặt trên Ubuntu theo mặc định.
Ta sẽ cài đặt gói python-virtualenv
để cô lập dự án Python của ta khỏi môi trường Python của hệ thống. Phần mềm virtualenv cho phép ta tạo một môi trường riêng biệt, riêng biệt cho các dự án Python của ta mà sẽ không ảnh hưởng đến toàn bộ hệ điều hành.
Cập nhật danh sách gói của bạn:
- sudo apt-get update
Cài đặt python-virtualenv
từ repository :
- sudo apt-get install python-virtualenv
Ta sẽ tạo một folder projects
trong folder chính của ta , và sau đó tạo một môi trường ảo trong folder này:
- mkdir ~/projects
- cd ~/projects
- virtualenv --no-site-packages venv
Điều này tạo ra một folder gọi là venv
trong folder projects
. Nó cài đặt một số tiện ích Python bên trong folder này và tạo cấu trúc folder để cài đặt các công cụ bổ sung.
Bước 2 - Kích hoạt Môi trường ảo cho Python
Ta phải kích hoạt môi trường ảo trước khi bắt đầu làm việc với dự án của bạn :
- source venv/bin/activate
Dấu nhắc lệnh sẽ thay đổi để cho biết là ta đang hoạt động trong môi trường ảo.
Nếu bạn cần kết nối lại sau đó, hãy đảm bảo bạn chạy lại môi trường bằng các lệnh sau:
- cd ~/projects
- source venv/bin/activate
Nếu bạn cần thoát khỏi môi trường ảo, bạn có thể nhập vào bất kỳ lúc nào:
- deactivate
Không hủy kích hoạt môi trường ảo của bạn tại thời điểm này.
Bước 3 - Cài đặt Chai
Một trong những công cụ mà chương trình virtualenv đã cài đặt là pip
.
Công cụ này cho phép ta dễ dàng cài đặt các gói Python từ index gói Python , một repository trực tuyến.
Nếu ta muốn tìm kiếm các gói Python có liên quan đến Chai, ta có thể chạy:
- pip search bottle
Ta sẽ bắt đầu bằng cách cài đặt gói Chai:
- pip install bottle
Sau khi hoàn tất , ta sẽ có khả năng sử dụng khung Chai trong các ứng dụng của bạn .
Bước 4 - Tạo ứng dụng chai đầu tiên của bạn
Chai, giống như hầu hết các khuôn khổ, triển khai một version của mẫu phần mềm MVC. MVC là viết tắt của mô hình, chế độ xem và bộ điều khiển và nó mô tả quyết định tách các chức năng khác nhau của giao diện user .
Mô hình là một đại diện của một tập dữ liệu và chịu trách nhiệm lưu trữ, truy vấn và cập nhật dữ liệu. Chế độ xem mô tả cách thông tin sẽ được hiển thị cho user . Nó được sử dụng để định dạng và kiểm soát việc trình bày dữ liệu. Bộ điều khiển là trung tâm xử lý chính của ứng dụng, quyết định cách phản hồi các yêu cầu của user .
Ứng dụng chai có thể cực kỳ đơn giản. Ở dạng đơn giản nhất, họ có thể triển khai tất cả các thành phần này trong một file duy nhất. Ta sẽ tạo một ứng dụng “xin chào thế giới” để hiển thị cách thực hiện điều này.
Với editor yêu thích của bạn, hãy tạo một ứng dụng Python có tên hello.py
:
- nano ~/projects/hello.py
Ta sẽ hiển thị cho bạn từng dòng một và bao gồm file cuối cùng ở cuối phần này.
Trong file này, dòng đầu tiên ta sẽ thêm nhập một số chức năng từ gói Chai. Điều này sẽ cho phép ta sử dụng các công cụ khung trong ứng dụng của bạn :
from bottle import route, run
Dòng này cho chương trình của ta biết rằng ta muốn nhập tuyến và chạy các module từ gói Chai.
- Mô-đun
run
mà ta đang nhập được dùng để chạy ứng dụng trên server phát triển, điều này rất tốt để xem nhanh kết quả chương trình của bạn - Mô-đun
route
mà ta đang nhập có trách nhiệm cho ứng dụng biết các yêu cầu URL nào được xử lý bởi các hàm Python nào. Ứng dụng chai thực hiện định tuyến bằng cách gọi một hàm Python duy nhất cho mỗi URL được yêu cầu. Sau đó, nó trả về kết quả của hàm cho user
Ta có thể thêm một tuyến đường ngay bây giờ sẽ trùng với mẫu URL /hello
. Thêm một dòng mới ở cuối file :
from bottle import route, run @route('/hello')
Trình trang trí tuyến đường này trùng với URL /hello
, vì vậy khi đường dẫn đó được yêu cầu trên server , hàm trực tiếp theo sau sẽ được thực thi. Thêm hai dòng nữa vào cuối file :
from bottle import route, run @route('/hello') def hello(): return "<h1>Hello World!</h1>"
Hàm này rất đơn giản, nhưng nó hoàn thành yêu cầu duy nhất của một hàm định tuyến: nó trả về một giá trị có thể được hiển thị trong trình duyệt web. Trong trường hợp này, giá trị là một chuỗi HTML đơn giản. Ta có thể xóa các thẻ tiêu đề h1 và thông tin tương tự sẽ được hiển thị theo kiểu không trang trí.
Cuối cùng, ta cần chạy ứng dụng của bạn bằng server phát triển. Thêm dòng cuối cùng, và bây giờ file của bạn đã hoàn tất:
from bottle import route, run @route('/hello') def hello(): return "<h1>Hello World!</h1>" run(host='0.0.0.0', port=8080)
Dòng này sẽ chạy version server .
- Bằng cách chuyển tham số
host='0.0.0.0'
, điều này sẽ cung cấp nội dung cho bất kỳ máy tính nào, không chỉ máy local . Điều này rất quan trọng vì ứng dụng của ta đang được lưu trữ từ xa - Tham số
port
chỉ định cổng mà nó sẽ được sử dụng
Lưu và đóng file .
Ta có thể chạy ứng dụng này bằng lệnh này:
- python ~/projects/hello.py
Bạn có thể truy cập ứng dụng này trong trình duyệt web của bạn bằng cách truy cập địa chỉ IP của bạn, tiếp theo là cổng ta đã chọn để chạy trên (8080), tiếp theo là tuyến đường ta đã tạo (/ xin chào):
-
http:// your_server_ip :8080/hello
Nó sẽ trông giống thế này:
Bạn có thể dừng server bất kỳ lúc nào bằng lệnh :
- CTRL-C
Bước 5 - Tạo mẫu chai
Hiện ta đã triển khai ứng dụng đầu tiên của bạn . Nó đơn giản, nhưng nó không thực sự thực hiện các nguyên tắc MVC hoặc làm bất cứ điều gì đặc biệt thú vị. Lần này, hãy tạo một ứng dụng phức tạp hơn một chút.
Ta sẽ bắt đầu với mô hình của ta . Đây là phần chương trình của ta xử lý việc lưu trữ dữ liệu. Chai có thể dễ dàng triển khai nhiều loại backend cho dữ liệu thông qua việc sử dụng các plugin.
Ta sẽ sử dụng file database SQLite cho database của bạn . Đây là một database cực kỳ đơn giản được thiết kế cho các việc nhẹ.
Cài đặt SQLite bằng lệnh này:
- sudo apt-get install sqlite
Ta cũng cần download và cài đặt plugin Chai sẽ cho phép ta sử dụng các database sau:
- pip install bottle-sqlite
Bây giờ ta đã có các thành phần, ta sẽ tạo một file Python sẽ tạo database SQLite với một số dữ liệu. Ta có thể làm điều này trong trình thông dịch Python, nhưng việc tạo một file khiến nó dễ dàng lặp lại.
Tạo file :
- nano ~/projects/picnic_data.py
Thêm nội dung này vào file . Nó sẽ tạo ra một database chứa đầy các vật phẩm dã ngoại:
import sqlite3 db = sqlite3.connect('picnic.db') db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)") db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)") db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)") db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)") db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)") db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)") db.commit()
Trong file này, ta :
- Nhập gói SQLite
- Thực thi một lệnh tạo bảng của ta và chèn dữ liệu
- Cuối cùng, ta commit các thay đổi
Lưu và đóng file .
Thực thi file , file này sẽ tạo file database có tên picnic.db
trong folder hiện tại của ta :
- python ~/projects/picnic_data.py
Nếu bạn muốn, bạn có thể ls
folder để xác nhận các file database đã được tạo ra.
Phần mô hình của chương trình của ta hiện đã khá hoàn chỉnh. Ta có thể thấy rằng mô hình của ta sẽ quyết định một chút cách phần kiểm soát của ta phải hoạt động để tương tác với dữ liệu của ta .
6 - Tạo bộ điều khiển chai
Bây giờ ta đã có database , ta có thể bắt đầu phát triển ứng dụng chính của bạn . Điều này chủ yếu sẽ triển khai chức năng bộ điều khiển của ta . Nó cũng sẽ là file gần giống với ứng dụng đầu tiên của ta nhất.
Tạo một file có tên picnic.py
để lưu trữ ứng dụng chính của ta :
- nano ~/projects/picnic.py
Giống như trước đây, ta sẽ giải thích từng dòng một và hiển thị file đã hoàn thành ở cuối bước.
Trong file này, ta cần nhập một số thứ từ gói Chai, giống như trước đây. Ta cần một số module bổ sung mà ta chưa sử dụng trước đây. Ngoài ra, ta cần nhập chức năng SQLite:
import sqlite3 from bottle import route, run, template
Tiếp theo, ta sẽ xác định một tuyến đường phù hợp với đường dẫn URL /picnic
:
import sqlite3 from bottle import route, run, template @route('/picnic')
Ta sẽ triển khai chức năng kết nối với database của ta , lấy dữ liệu của ta từ bảng và gọi chế độ xem của ta để hiển thị trang.
import sqlite3 from bottle import route, run, template @route('/picnic') def show_picnic(): db = sqlite3.connect('picnic.db') c = db.cursor() c.execute("SELECT item,quant FROM picnic") data = c.fetchall() c.close() output = template('bring_to_picnic', rows=data) return output
- Lệnh kết nối với database là lệnh
db = sqlite3.connect('picnic.db')
- Ta truy vấn database và chọn tất cả các giá trị của ta với bốn dòng tiếp theo
- Dòng nơi ta gọi chế độ xem để định dạng dữ liệu của ta là
output = template('bring_to_picnic', rows=data)
. Điều này gọi một mẫu (chế độ xem) được gọi làbring_to_picnic.tpl
để định dạng dữ liệu. Nó chuyển biếndata
dưới dạng cácrows
biến mẫu - Cuối cùng, nó trả về kết quả được định dạng cho user của ta
Cuối cùng, ta cần thêm lệnh run
của run
để chạy server thực tế:
import sqlite3 from bottle import route, run, template @route('/picnic') def show_picnic(): db = sqlite3.connect('picnic.db') c = db.cursor() c.execute("SELECT item,quant FROM picnic") data = c.fetchall() c.close() output = template('bring_to_picnic', rows=data) return output run(host='0.0.0.0', port=8080)
Lưu và đóng file .
Ta sẽ tạo file mẫu bring_to_picnic.tpl
trong phần tiếp theo.
Bước 7 - Tạo Chế độ xem Chai
Bây giờ ta đã có mô hình và bộ điều khiển, điều duy nhất còn lại để tạo là chế độ xem của ta . Điều này được xử lý dễ dàng bằng cách sử dụng công cụ mẫu tích hợp của Chai.
Ứng dụng sẽ tìm kiếm một mẫu phù hợp với tên được cung cấp trong hàm mẫu, kết thúc bằng .tpl
. Nó có thể nằm trong folder chính của dự án hoặc trong một folder được gọi là view
.
Tạo một file phù hợp với file mà ta đã gọi với hàm mẫu trong dòng output
trong tập lệnh trước:
- nano ~/projects/bring_to_picnic.tpl
Trong file này, ta có thể kết hợp HTML và lập trình. Của ta sẽ rất đơn giản. Nó sẽ sử dụng một vòng lặp để tạo một bảng, mà ta sẽ điền vào dữ liệu mô hình của bạn . Thêm tất cả các dòng này vào file :
<h1>Things to bring to our picnic</h1> <table> <tbody> <tr><th>Item</th><th>Quantity</th></tr> %for row in rows: <tr> %for col in row: <td>{{col}}</td> %end </tr> %end <tbody> </table>
Điều này sẽ hiển thị trang của ta trong HTML.
- Ngôn ngữ tạo mẫu mà ta thấy ở đây về cơ bản là Python
- Biến
rows
mà ta đã chuyển vào mẫu có sẵn để sử dụng khi thiết kế kết quả - Ta có thể nhập các dòng Python bằng cách đặt trước chúng bằng
%
- Ta có thể truy cập các biến trong HTML bằng cách sử dụng cú pháp
{{var}}
.
Lưu và đóng file .
Bước 8 - Khởi động ứng dụng Chai
Đơn đăng ký của ta đã hoàn tất.
Ta có thể bắt đầu chương trình bằng cách gọi Python trên file chính:
- python ~/projects/picnic.py
Ta có thể xem kết quả bằng cách truy cập địa chỉ IP và cổng của ta , theo sau là tuyến URL mà ta đã tạo:
-
http:// your_server_ip :8080/picnic
Trang web sẽ trông như thế này:
Nhấn CTRL-C
để dừng ứng dụng. ( CTRL-Z
là tín hiệu dừng mạnh hơn.)
(Tùy chọn) Bước 9 - Tải lên ứng dụng của bạn
Để tải lên ứng dụng Chai của bạn , bạn cần sao chép tất cả các file dự án vào folder này:
~/projects/
Ví dụ:
- scp myproject.py sammy@your_server_ip:~/projects/
Tải lên tất cả các file được liên kết với dự án này theo cách tương tự. SFTP là một cách khác để tải file lên, nếu bạn không quen với scp
.
(Tùy chọn) Bước 10 - Bắt đầu ứng dụng của bạn
Kích hoạt môi trường ảo của bạn (nếu bạn chưa làm như vậy).
- cd ~/projects/
- source venv/bin/activate
Ta sẽ sử dụng lệnh python
để khởi động ứng dụng. Ta sẽ làm cho nó bớt thô sơ hơn một chút bằng cách bắt đầu quá trình trong nền, nghĩa là bạn có thể đóng terminal của bạn và ứng dụng sẽ tiếp tục chạy:
- nohup python ~/projects/myproject.py &
Trong kết quả , bạn sẽ thấy số ID quy trình của bạn và thông báo sau:
[1] 20301 (venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’
Khi đã sẵn sàng cho quá trình production , ta thực sự khuyên bạn nên lập một kế hoạch khởi động mạnh mẽ hơn cho ứng dụng của bạn . (Chỉ khởi động nó trong nền nghĩa là ứng dụng của bạn sẽ dừng sau khi server khởi động lại.) Ubuntu 14.04 sử dụng Upstart .
Kết luận
Bây giờ, bạn có thể thấy cách bạn có thể xây dựng các ứng dụng phức tạp bằng cách sử dụng một micro-framework đơn giản, dễ hiểu như Chai. Trong khi các ví dụ của ta rất đơn giản, thật dễ dàng để tận dụng các chức năng nâng cao hơn.
Hệ thống plugin của Bottle cũng là một tài sản quan trọng. Các plugin được chia sẻ tích cực trong cộng đồng và có thể dễ dàng thực hiện các hành vi phức tạp hơn thông qua hệ thống plugin.
Ví dụ: một cách dễ dàng để tìm các plugin tương thích với Chai là sử dụng lệnh pip search bottle
. Điều này sẽ cung cấp cho bạn ý tưởng về một số tùy chọn phổ biến hơn.
Các tin liên quan
Cách triển khai các ứng dụng web Python với Framework Micro Chai trên CentOS 72015-10-19
Cách triển khai ứng dụng Python Web2py với uWSGI và Nginx trên Ubuntu 14.04
2015-03-17
Cách triển khai các ứng dụng Python Web2py với uWSGI và Nginx trên CentOS 7
2015-03-17
Cách xác thực một ứng dụng Python với Twitter bằng Tweepy trên Ubuntu 14.04
2015-02-04
Cách gửi tin nhắn dựa trên các phím định tuyến bằng thư viện RabbitMQ và Puka Python
2014-02-26
Cách đóng gói và phân phối các ứng dụng Python
2014-01-14
Cách triển khai ứng dụng web WSGI Python dựa trên kim tự tháp
2013-12-30
Cách triển khai ứng dụng WSGI Python bằng server Gunicorn HTTP đằng sau Nginx
2013-12-12
Cách triển khai ứng dụng WSGI Python bằng web server uWSGI với Nginx
2013-12-11
Cách triển khai ứng dụng WSGI Python bằng web server CherryPy đằng sau Nginx
2013-12-10