TurboGears – 플래시 메시지
TurboGears는 눈에 거슬리지 않는 방식으로 사용자에게 정보를 알릴 수있는 매우 편리한 메시징 시스템을 제공합니다. tg 모듈의 TGFlash 클래스는 일반 쿠키에 저장된 플래싱 메시지를 지원합니다. 이 클래스는 JavaScript를 통해 클라이언트 측뿐만 아니라 서버 측에서 플래시 메시지 가져 오기를 지원합니다.
그만큼 render()Python 자체에서 사용되는 TGFlash 클래스의 메서드는 템플릿에서 호출하여 플래시 메시지를 렌더링 할 수 있습니다. JavaScript에서 사용하는 경우 WebFlash 개체를 제공합니다. 그것은 노출payload() 과 render() 현재 플래시 메시지를 가져 와서 JavaScript에서 렌더링하는 메소드.
TurboGears 프로젝트가 'quickstart'를 사용하여 생성되면 Master.html 템플릿이 있습니다. 해당 플래시 개체의 변수 정의를 포함합니다. 컨트롤러에서 수신 한이 플래시 메시지의 내용은이 템플릿의 표시된 자리 표시자를 대체합니다.
<py:with vars = "flash = tg.flash_obj.render('flash', use_js = False)">
<div py:if = "flash" py:replace = "Markup(flash)" />
</py:with>
그만큼 tg.flash_obj WebFlash 객체입니다. 렌더링 된 템플릿 내에서 사용할 수 있습니다. master.html주형. 이 개체는 현재 플래시 메시지를 검색하고 표시하도록 허용합니다.
Flash 메시지는 다음을 사용하여 쿠키 (기본 이름은 webflash)에 저장됩니다. tg.flash()방법. 그런 다음 메시지 및 상태 매개 변수가 전달됩니다.
tg.flash('Message', 'status')
flash라는 메서드가 리디렉션을 수행하면 리디렉션 된 페이지 내에 플래시가 표시됩니다. 메서드가 템플릿을 직접 노출하는 경우 템플릿 자체 내부에 플래시가 표시됩니다.
상태 코드에 CSS 스타일을 적용하여 플래시 메시지의 모양을 사용자 지정할 수 있습니다. '빠른 시작'프로젝트에는 스타일 시트 public / css / style.css에 의해 사용자 정의 된 오류, 경고, 정보 및 확인 상태 코드가 포함됩니다. 스타일이있는 더 많은 상태 코드를 추가 할 수도 있습니다.
#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;
}
이 외부 스타일 시트는 템플릿에 포함되어야합니다-
<link rel = "stylesheet" type = "text/css" media = "screen"
href = "${tg.url('/css/style.css')}" />
모든 플래시 메시지 지원의 구성은 TGFlash 객체의 configure () 메서드 또는 app_cfg.py (config 폴더에 있음)에 대한 매개 변수를 설정하여 수행 할 수 있습니다. 구성 가능한 매개 변수는 다음과 같습니다.
Sr. 아니. | 매개 변수 및 설명 |
---|---|
1 | flash.cookie_name 플래시 메시지를 저장하는 데 사용되는 쿠키의 이름입니다. 기본값은webflash. |
2 | flash.default_status 지정되지 않은 경우 기본 메시지 상태 (기본적으로 확인) |
삼 | flash.template 로 사용 flash template 렌더링 할 때. |
4 | flash.allow_html 턴 on/off escaping in flash messages, 기본적으로 HTML은 허용되지 않습니다. |
5 | flash.js_call JavaScript에서 플래시를 표시 할 때 실행될 JavaScript 코드입니다. 기본값은webflash.render() |
6 | flash.js_template string.Template 플래시 메시지에 대한 완전한 JavaScript 지원을 대체하는 데 사용되는 인스턴스입니다. |
pop_payload() − 기능 fetches current flash message, status및 관련 정보. 플래시 메시지를 받으면 쿠키가 삭제됩니다.
render(container_id, use_js=True) − 템플릿 내에서 플래시 메시지를 렌더링하거나 자바 스크립트 지원을 제공합니다.
container_id 메시지가 표시되는 DIV이고 use_js는 플래시를 HTML로 렌더링하거나 자바 스크립트 사용을 위해 전환합니다.
status − 현재 플래시 상태 만 가져 오기, 플래시 상태 가져 오기는 쿠키를 삭제합니다.
message − 현재 플래시 메시지 만 가져 오기, 플래시 메시지 가져 오기는 쿠키를 삭제합니다.
간단한 플래시 메시지를 만드는 방법?
다음 예제에서 flash () 메서드는 루트 컨트롤러 클래스에 제공됩니다. 노출 된 템플릿 flash.html로 렌더링되는 flash () 메시지를 호출합니다.
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 {}
만들기위한 코드 flash.html 템플릿 폴더에는 다음과 같습니다.
<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>
서버를 시작하고 다음을 입력하십시오. http://localhost:8080/flash?user=MVL 브라우저에서
URL을 다음으로 변경 http://localhost:8080/flash style.css의 정의에 따라 다른 형식의 플래시 메시지를 볼 수 있습니다.