通用集团/论坛框架。

incuna-groups的Python项目详细描述


#` incuna组`[![构建状态](https://magnum.travis-ci.com/incuna/incuna-groups.svg?token=9qksfuyhuxeks7q4clhs&branch=master)(https://travis ci.org/incuna/incuna-groups)

提供论坛功能的可扩展django应用程序。
-管理员可以创建讨论组。
-用户可以创建关于组的讨论,并对这些讨论发表评论。
-用户还可以订阅组和/或讨论以接收来自它们的通知,并通过回复通知电子邮件发布响应。


将'groups'和'pagination'(用于'incona pagination',依赖项)添加到"已安装的应用程序"中。

目前,它不提供样式设置或rest api。

通过"appconfig"(默认情况下为"groups.apps.groupsconfig")可以公开一些简单的定制,而且这些模板都可以很容易地重写。

emplate本身直接"extends",这意味着您可以替换页面模板,但仍然可以使用原始页面中的所有块和其他html。例如,"discussion_thread.html"除了扩展"discussion_thread_base.html"之外什么也不做。您可以重写"discussion_Thread.html",以同样的方式扩展"discussion_Thread_Base.html",并更改单个块的内容,而不必复制并粘贴整个讨论线程模板并从中进行修改。


所有东西都围绕的主要模型,其中一个模型是多态的,便于扩展。

-`group`:包含任意数量讨论的组,如论坛板。在django管理中创建,并保存用户添加的讨论线程。组可以表示为private,在这种情况下,用户必须先请求加入它,然后才能阅读或发布任何评论。组也可以有能够删除或编辑其他用户评论的版主。用户可以订阅一个组,该组将向用户发送在该组上创建的任何讨论的通知或发布到该组中讨论的评论。
-`discussion`:一个讨论线程,至少有一条评论(初始评论)。由用户创建。用户可以评论和订阅讨论。如果用户已经订阅了讨论的父组,则可以"取消订阅"该讨论,这将(在内部)导致该用户"忽略"该讨论,并且不会收到任何通知。
-`base comment`:comment`的一个`django polympic`基类。不单独做任何事情,但用于测试和引用任意不同类型的注释。"basecomment"的子类由与讨论相关的视图获取。它附带了一些子类:
*`textcoment`:带有文本体的注释-一条完全普通的消息。
*`file comment`:包含上载文件的注释。

L方法。其中大多数允许获取最近活动的项目或访问与三个实例中任何一个实例相关的组/讨论/评论。这些查询集和方法可以在"managers.py"中找到。


\ist`
*按"views.group s.groupdetail"详细列出-实现为"discussion"的"listview",以显示组的内容。
*订阅者是"views.subscriptions.groupsubscribe"
-`discussion`
*创建者是"admin.discussionadmin"--在由"views.discussion s.discussioncreate"创建的django管理中
*此选项还创建"discussion"的第一个注释,当前是"textcoment"。
*由"v"列出iews.groups.groupdetail`
*由"views.discussions.discussionthread"详细说明-实现为"views.discussions.discussionthread"中的"commentpostview"。"helpers"允许人们通过讨论页本身进行答复。
*由"views.subscriptions.discussionsubscribe"订阅y`views.\u helpers.commentpostview`-创建评论并向相关人员发送电子邮件通知的基类。
*由`views.discussion thread`创建-讨论线程页提供提交`textcoment`的内联回复表单。
*由`views.co创建mments.commentuploadfile`-上传"filecomment"的单独页面。
*由"views.comments.commentpostbyemail"创建-适合通过mailgun接收电子邮件答复的端点。
*由"views.discussionthread"列出
*由"views.comments.commentde"删除lete`-注释提供一个"delete"按钮,用于存档并隐藏其内容。

关于appconfig(及其使用)的文档如下:https://docs.djangoproject.com/en/1.8/ref/application s/对于应用程序用户

appconfig公开:
-`default\u within謺days`-一些模型管理器上"within謺days"方法的默认参数,它返回项在该时间段内发布或发布到的。
-`new_comment_subject`和`new_discussion_subject`-通知电子邮件的主题。每一个都将被格式化为一个评论所属的{discussion},或者一个讨论所属的{group}。
-`group-admin-class-path`和`discussion-admin-class-path`-这些允许您通过在备用的'modeladmin'类中插入来覆盖'incuna-group'的管理行为SES。这些可能基于也可能不基于"admin.py"中的现有管理类。


每当将评论发布到讨论时,订阅该讨论或其父组的用户也会收到电子邮件通知。

电子邮件模板位于"模板/组/电子邮件"中。讨论通知由"views.discussioncreate"发送;评论通知由"commentemailmixin"("commentpostview"、"discussionthread"和"commentuploadfile")的子类发送。

通知邮件。电子邮件回复由一个端点(`/groups/reply/`,提供"commentPostByemail"视图)实现,该端点接受包含表示电子邮件的JSON内容的POST请求。库被设置为使用[mailgun](https://www.mailgun.com/)路由。

uuid是通过对用户和讨论pks的字典进行安全签名生成的,并在接收到mailgun的json消息时由端点解包。Mailgun提供了一个"剥离文本"字段,用于从电子邮件内容中删除引号和签名,因此用户无需以特定方式回复,也无需我们自己进行任何处理。

可以[在此处]找到Mailgun的粗略API描述(http://blog.mailgun.com/handle-incoming-emails-like-a-pro-mailgun-api-2-0/)。post和files数据将分别位于"request.post"和"request.files"中。

有两个问题:

-the`/groups/reply/`endpoint`有一个尾随斜杠。请确保此斜杠包含在任何mailgun路由目标中,否则将得到http301s流。
-如果您使用的是[`incuna_auth.loginRequiredMiddleware`](https://github.com/incuna/incuna auth/blob/master/incuna_auth/middleware/login_required.py l28),请确保添加`/groups/reply/`to`login\u exempt\u url`以避免更多的301s。
-`commentPostByemail`视图在'dispatch()方法上有一个'@csrf\u exempt'装饰符,以避免与csrf相关的http403错误。如果扩展类,请确保添加csrf豁免。


这两个都可以通过"appconfig"轻松替换(见上文)。"appconfig"为您注册这些管理类,因此不要调用"admin.site.register"自己。

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

推荐PyPI第三方库


热门话题
java如何比较二维交错数组中列中元素的长度   java依赖javafx是安全的。util。回电话?   用于格式化二进制数的正则表达式,在Java中,从右到左每4个字符使用空格   java我应该在基于Springboot的后端使用headless模式吗?   java Hibernate获取数据。list()已去润滑,表未映射。怎么办?   java Spring引导存储库,包括示例、规范和页面   java使用UUID。randomUUID()和多次调用方法?   每个客户端请求的Java DatagramSocket不同线程   字符串中的java表达式到arraylist   数组循环遍历word文档和图像,并存储到SQL java   java wsimport Xauthfile错误   java在适配器中返回相同的片段   charAt()方法如何从字符串中提取数字并将其放入Java中的新字符串中?   java我想在两部手机之间建立hfp连接   java如何添加priceAfterDiscount的公共方法,该方法返回折扣后的价格