django的统一、持久和动态用户消息/通知

django-monitio的Python项目详细描述


用于django的monitio
====


monitio允许您有消息(也称为通知),这些消息:

*可以持久化(存储在数据库中,稍后读取),
*在添加时动态显示在web ui上,
*并且可以选择通过电子邮件发送给您的最终用户。

monitio基于:

*[django sse](https://github.com/niwibe/django sse)
*它使用[django redis](https://github.com/niwibe/django redis)
*…和[redis database](https://redis.io)
*[yaffle's eventsource.js](https://github.com/yaffle/eventsource)用于跨浏览器服务器发送事件的兼容性
*[django cors headers](https://github.com/ottoyiu/django-cors-headers)用于相同的事情
*[django transaction signals](https://github.com/davehughes/django transaction signals)
*[jquery](http://jquery.com/)和[jqueryui](http://jqueryui.com)

10、Opera 12、Ffox 16和Windows上的Safari 5.1.7。此外,使用nginx+gunicorn在
生产环境中对monitio进行了测试,发现其工作正常。

文档
----

django应用程序,用于统一、持久和实时的用户消息/通知,构建在django的[消息框架](http://docs.djangoproject.com/en/dev/ref/contrib/messages/)(`django.contrib.messages`)之上。

monitio是消息存储后端,它为那些被认为是持久的消息提供支持,也就是说,它们比浏览器会话更持久,并将存储在数据库中。这些消息可以按您的意愿显示给用户,您可以让用户将它们标记为已读,删除它们,甚至回复它们。对于其中一些操作,您可以在project url.py中导入视图。

*为经过身份验证的用户支持持久和非持久消息。持久消息存储在数据库中。
*对于匿名用户,使用基于cookie/会话的方法存储消息。不支持匿名用户的持久消息。
*有一个统一的api用于向两种类型的用户显示消息,也就是说,您可以使用与django的消息框架相同的代码来添加和显示消息,但是,如果用户经过身份验证,则还有其他功能可用。

克隆这个git存储库(这个fork没有pypi包)。主分支是最新的稳定分支:

$git clone git://github.com/mpasternak/django monitio.git

2。确保"monitio"在"pythonpath"中。
3.将"monitio"和"company"添加到"installed_apps"设置中。


installed_apps=(

"django_sse"、
"corsheaders"、
"monitio"、


4。确保django的"messagemiddleware"在"middleware_classes"设置中(默认情况下是这样),同时在那里启用"corsmidleware"。如果要使用翻译,请添加"localemidleware":

middleware嫒类=(

"django.contrib.messages.middleware.MessageMiddleware"、
"corsheaders.middleware.corsmidleware"、
"django.middleware.locale.localemidleware",




5.为消息和静态URL添加上下文处理器:

context\u processors=(

'django.contrib.messages.context\u processors.messages',
'django.core.context\u processors.static',





6。将"monitio"url添加到url conf中。例如,为了使"http://domain.com/messages/"下的消息可用,请添加以下内容行到"urls.py"。

(r'^messages/',include('monitio.urls',namespace='monitio'),




7。在您的设置中,将消息[存储后端](http://docs.djangoproject.com/en/dev/ref/contrib/messages/消息存储后端)设置为"monitio.storage.persistentmessagestorage":


消息存储="monitio.storage.persistentmessagestorage"

8。在您的设置中,添加一个合理的默认值,它将阻止向用户显示已读消息:


>9。设置'django sse'和'corsheaders':

'location':'127.0.0.1:6379',
'db':0,
}


cors\u origin\u whitelist=(
'127.0.0.1',
'127.0.0.1:8000',


10。使用


11设置数据库表。如果要使用捆绑的模板,请将"templates"目录添加到"template\u dirs"设置中:


template\u dirs=(

"path/to/monitio/templates")



12。为[nginx]设置一个生产服务器(http://nginx.org/)+[gunicorn](http://gunicorn.org),请使用以下配置:



location~^/messages{
proxy\u pass http://your gunicorn address…/
proxy\u buffering off;
proxy\u cache off;
proxy\u set\u header host$host;

proxy_set_header connection';
proxy_http_version 1.1;
chunked_transfer_encoding off;
}


,对于[gunicorn](http://gunicorn.org),确保安装了[gevent](http://www.gevent.org/)并使用参数"-k"运行[gunicorn](http://gunicorn.org)gevent`



目的如成功消息、警告等。

import monitio
持久消息级别:
monitio.info
monitio.success
monitio.warning
monitio.error

不同的是,具有这些级别的消息将是持久的:

这很重要。如果使用"monitio"常量,则消息将存储在数据库中并一直保存到有人显式删除它为止。如果使用"contrib.messages"常量,则获得与使用非持久性存储相同的行为,消息存储在数据库中,以确保接收,但在被访问后立即将其删除。

\[消息框架](http://docs.djangoproject.com/en/dev/ref/contrib/messages/),您仍然可以使用常规django api添加消息:


from django.contrib import messages
messages.add_message(request,messages.info,"hello world.")


这与使用"monitio"提供的api兼容,相当于从django.contrib import messages


import monitio
"hello world.")

nitio table until remove.')


或等效:



请注意,这仅适用于已登录的用户,因此,您可能需要使用"request.user.is_authenticated()"来确保当前用户不是匿名的。为匿名用户添加持久性消息会引发"notimplementederror"。


这是contrib消息中"add_message"的原型:



这是持久消息中"add_message"的原型。

def add_message(request,level,message,extra_tags='',fail_silented=false,subject='',user=none,email=false,from_user=none,expires=none,close_timeout=none):

您还可以设置是否要发送电子邮件通知。以下消息将作为消息存储在数据库中,并发送到与当前用户关联的电子邮件地址:


monitio.add_message(request,monitio.info,'message body',subject='please read me',email=true)

**注意!**目前的电子邮件通知太简单了,我不建议使用它们,我不建议使用它们。


用户sally下次登录时将看到此消息:

user=sally)

一旦消息过期,它将不会包含在返回的queryset中。目前没有从数据库中清除过期邮件的视图或方法。

`部分:
``
{%include"monitio/header.html"%}
```

这将包括"yaffle.js"、"monitio.js"monitio翻译和主题。

*在"body>;"部分中,将消息占位符放置在您喜欢的任何位置:

```
<;div id="monitiomessages">;<;div>;
```

*…准备初始化MuniTo,可选地传递主题参数:
`BR/> $(文档).Read(函数){BR/> $("MessagesPlaceholder")({ BR/> URL):"{%URL"MuniTIO:持久消息SSE"USER用户名%},
"主题":"基础"//移除对于"主题";"}";< < < > > >;不要忘记添加链接到"jQuery"、"选项"和"基础5",如有任何问题,请在"目录"中"检查",因为它比原始目录简单得多。


主题='',过期=无,关闭超时=无,SSE=真,
电子邮件=假):


uest.\u messages`设置为您在设置中配置的默认存储。持久性消息存储有一些Django内置存储没有的额外方法,这些方法可能非常有用:

***获取持久性消息**:获取已读和未读持久性消息
***获取持久性消息**:获取未读持久性消息
***获取非持久性消息**:获取非持久性消息消息
**count_unread**:统计持久和非持久未读消息
**count_persistent_unread**:统计持久未读消息
**count_nonpersistent**:统计非持久消息

未读邮件的数量收件箱{%if messages.count_persistent_unread>;0%}({{messages.count_persistent_unread}){%endif%}<;/a>;<;/ul>;

\django monitio is(c)2013[mpasternak](https://github.com/mpasternak)。

[philomat](https://github.com/philomat)是
[django persistent messages](https://github.com/philomat/django persistent messages)的原始代码的作者,然后由[maurojp](https://github.com/maurojp)分叉。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在SWT中关闭CTabItem时如何获取警告消息?   java如何从中获取文本字符串   java带有(int[][])的方法意味着什么?   java我在创建这个安卓浮动泡泡动画时做错了什么?   将边距属性作为列表项的java表抛出异常ClassCastException   java如何在Storm拓扑中测量延迟和吞吐量   java如何在javafx中序列化事件?   java访问main()之外的线程   java如何强制某些方法仅对kotlin可见   java如何使用quartzscheduler启动具有多个crontrigger的作业?   java无法使用VM选项获取转储文件:引发OOM异常时出现HEAPDUMPONAUTOFMEMORYERROR   java无法在安卓中的FTP服务器上上载文件   java RecordView未显示   java有没有办法在Eclipse中隐藏/折叠虚张声势的注释?   java如何从xml中提取xml。广州?