TurboGears - Tin nhắn Flash
TurboGears cung cấp một hệ thống nhắn tin rất tiện lợi để thông báo thông tin cho người dùng một cách không gây khó chịu. Lớp TGFlash trong mô-đun tg cung cấp hỗ trợ cho các tin nhắn nhấp nháy được lưu trữ trong một cookie thuần túy. Lớp này hỗ trợ tìm nạp các tin nhắn flash ở phía máy chủ cũng như phía máy khách thông qua JavaScript.
Các render()phương thức của lớp TGFlash, khi được sử dụng từ chính Python, có thể được gọi từ mẫu để hiển thị thông báo flash. Nếu được sử dụng trên JavaScript, nó cung cấp một đối tượng WebFlash. Nó lộ rapayload() và render() phương pháp tìm nạp thông báo flash hiện tại và hiển thị nó từ JavaScript.
Khi một dự án TurboGears được tạo bằng cách sử dụng 'quickstart', nó có mẫu Master.html. Nó chứa định nghĩa của một biến của đối tượng flash đó. Nội dung của thông báo flash này nhận được từ bộ điều khiển thay thế phần giữ chỗ được đánh dấu trong mẫu này.
<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
<div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>
Các tg.flash_obj là đối tượng WebFlash, có sẵn bên trong bất kỳ mẫu được kết xuất nào bằng cách bao gồm master.htmlbản mẫu. Đối tượng này cho phép truy xuất thông báo flash hiện tại và hiển thị nó.
Tin nhắn Flash được lưu trữ trong một cookie (có tên theo mặc định là webflash) bằng cách sử dụng tg.flash()phương pháp. Thông báo và các thông số trạng thái sau đó được chuyển cho nó.
tg.flash('Message', 'status')
Nếu phương thức được gọi là flash thực hiện chuyển hướng, thì flash sẽ hiển thị bên trong trang được chuyển hướng. Nếu phương thức hiển thị trực tiếp một mẫu, thì đèn flash sẽ hiển thị bên trong chính mẫu đó.
Giao diện của tin nhắn flash có thể được tùy chỉnh bằng cách áp dụng kiểu CSS cho mã trạng thái. Một dự án 'bắt đầu nhanh' chứa các mã lỗi, cảnh báo, thông tin và trạng thái ổn được tùy chỉnh bởi biểu định kiểu public / css / style.css. Nhiều mã trạng thái với các kiểu cũng có thể được thêm vào.
#flash > .warning {
color: #c09853;
background-color: #fcf8e3;
border-color: #fbeed5;
}
#flash > .ok {
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6;
}
#flash > .error {
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7;
}
#flash > .info {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
}
Biểu định kiểu bên ngoài này cần được bao gồm trong mẫu -
<link rel = "stylesheet" type = "text/css" media = "screen"
href = "${tg.url('/css/style.css')}" />
Có thể đạt được cấu hình của bất kỳ hỗ trợ tin nhắn Flash nào bằng cách thiết lập các tham số cho phương thức config () của đối tượng TGFlash hoặc trong app_cfg.py (trong thư mục config). Các thông số có thể cấu hình là -
Sr.No. | Thông số & Mô tả |
---|---|
1 | flash.cookie_name Tên của cookie được sử dụng để lưu trữ tin nhắn flash. Mặc định làwebflash. |
2 | flash.default_status Trạng thái tin nhắn mặc định nếu không được chỉ định (ok theo mặc định) |
3 | flash.template Được sử dụng như flash template khi kết xuất. |
4 | flash.allow_html Lượt đi on/off escaping in flash messages, HTML mặc định không được phép. |
5 | flash.js_call Mã JavaScript sẽ được chạy khi hiển thị flash từ JavaScript. Mặc định làwebflash.render() |
6 | flash.js_template string.Template ví dụ được sử dụng để thay thế hỗ trợ JavaScript đầy đủ cho các tin nhắn flash. |
pop_payload() - chức năng fetches current flash message, statusvà thông tin liên quan. Nhận được thông báo flash sẽ xóa cookie.
render(container_id, use_js=True) - Hiển thị thông báo flash bên trong mẫu hoặc cung cấp hỗ trợ Javascript cho chúng.
container_id là DIV nơi thông báo sẽ được hiển thị, trong khi use_js chuyển đổi giữa hiển thị flash dưới dạng HTML hoặc để sử dụng JavaScript.
status - Chỉ nhận trạng thái flash hiện tại, nhận trạng thái flash sẽ xóa cookie.
message - Chỉ nhận tin nhắn flash hiện tại, nhận tin nhắn flash sẽ xóa cookie.
Làm thế nào để tạo một tin nhắn Flash đơn giản?
Trong ví dụ sau, một phương thức flash () được cung cấp trong lớp bộ điều khiển gốc. Nó gọi một thông báo flash () được hiển thị cho mẫu tiếp xúc, flash.html
from hello.lib.base import BaseController
from tg import expose, flash, redirect, request
class RootController(BaseController):
@expose('hello.templates.flash')
def flash(self, user = None):
if user:
flash(message = "Welcome "+user,status = "ok")
else:
flash(message = "Welcome Guest",status = "info")
return {}
Mã để làm flash.html trong thư mục mẫu như sau
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:py = "http://genshi.edgewall.org/"
xmlns:xi = "http://www.w3.org/2001/XInclude">
<head>
<title>TurboGears 2.3: Flash messages>/title>
<link rel = "stylesheet" type = "text/css" media = "screen"
href = "${tg.url('/css/style.css')}" />
<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
<div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>
</head>
<body>
<h2>Hello TurboGears</h2>
</body>
</html>
Khởi động máy chủ và nhập http://localhost:8080/flash?user=MVL trong trình duyệt
Thay đổi URL thành http://localhost:8080/flash và xem thông báo flash được định dạng khác nhau theo định nghĩa trong style.css