django的多用户、多组任务管理和分配系统。

django-todo的Python项目详细描述


django todo

django todo是一个可插入、多用户、多组任务管理和 django的分配应用程序,设计为作为可重用应用程序放入现有站点。django to do可以用作个人待办事项跟踪程序、组任务管理系统或组织的票务系统(或同时使用所有这些系统!)

了解django todo工作原理的最佳方法是访问django todo.org上的现场演示站点!

功能

  • 拖放任务优先级
  • 电子邮件任务通知
  • 搜索
  • 对任务的评论
  • 面向公众的门票提交表
  • 便于移动(正在工作)
  • 我的任务的单独视图(跨列表)
  • 通过csv批量导入任务
  • 每个任务有多个文件附件(请参见设置)
  • 集成邮件跟踪(用电子邮件框统一任务列表)

要求

  • Django 2.0+
  • 巨蟒3.6+
  • jquery(完整版本,不是"slim",用于拖放优先级)
  • 引导(使用提供的模板,但可以覆盖它们)
  • 漂白剂(pip安装漂白剂
  • django自动完成指示灯(可选,任务合并时必需)

概述

我们假设您的组织有多个员工组,每个组都有多个用户(实际用户和组映射到django用户和组)。用户可能属于多个组,每个组可以有多个TOdo列表。

必须在django admin中至少设置一个组,并且该组必须至少有一个用户作为成员。即使您是django todo的唯一用户,也是如此。

用户可以查看和修改属于其组的所有待办事项列表。只有具有is-staff的用户才能添加或删除列表。

相同的列表名称可以存在于不同的组中,但不能存在于同一组中。

当创建新任务时,电子邮件将生成给分配给人员。

默认情况下,任务允许使用几种类型的文件附件。请参阅设置以禁用或限制文件类型。如果您担心文件大小,请在Web服务器配置中限制它们(Django Todo目前不单独处理这些文件)。

可以将注释线程添加到任务中。添加新评论时,线程中的每个参与者都会收到电子邮件。

Django Todo仅用于身份验证。在部署之前,必须设置登录系统和至少一个组。

所有任务都由当前用户"创建",并且可以选择"分配给"特定用户。未分配的票据在用户界面中显示为属于"任何人"。

django todo v2仅使用django 2.0中提供的功能。它在以前的版本中不起作用。v2只针对python 3.x进行测试——如果针对旧版本运行它,就没有保证。

安装

django todo是django应用程序,而不是项目站点。它需要一个网站来居住。您可以将其安装到现有的django项目站点,也可以克隆django todo演示站点(gtd)

如果使用自己的站点,请确保jquery和bootstrap已连接并正常工作。

需要它的django todo视图将在页眉中插入额外的css/javascript,因此项目的基本模板必须包括:

{%blockextrahead%}{%endblockextrahead%}{%blockextra_js%}{%endblockextra_js%}

django todo自带了自己的todo/base.html,它扩展了masterbase.html。所有内容都位于:

{%block content%}{%endblock%}

如果您的主内容区域使用其他名称,则需要覆盖和更改提供的模板。

所有视图都需要登录。因此,您必须有一个有效的用户身份验证系统。

要使电子邮件通知正常工作,请确保您的站点/项目设置为发送电子邮件

确保您已经安装了django"sites"框架,并在设置中指定了默认站点,例如site\u id=1

将django todo/todo放在python路径中的某个位置,或通过pip安装:

pip install django-todo

添加到您的设置:

INSTALLED_APPS = (
    ...
    'todo',
)

在数据库表中迁移:

python manage.py迁移到

添加到url conf:

path('todo/',include('todo.url',namespace="todo"),

向网站的导航系统添加链接:

<a href="{% url 'todo:lists' %}">Todo Lists</a>
<a href="{% url 'todo:mine' %}">My Tasks</a>

django todo使用django消息系统。确保您的base.html中有类似于的内容。

登录并访问/todo

自定义模板

提供的模板相当简单,仅用作起点。与以前的django-todo版本不同,它们现在作为引导示例提供,但是可以随意覆盖它们-对引导没有硬依赖性。要覆盖模板,请在项目的模板目录中创建todo文件夹,然后将要覆盖的模板从django todo源复制到该目录中。

提交公共票

如果您希望使用公共票证归档系统,请首先创建这些票证应归档到的列表,然后将其slug添加到设置中的todo\u default\u list\u slug(有关下面设置的详细信息)。

设置

可选配置参数,可添加到项目设置中:

# Restrict access to ALL todo lists/views to `is_staff` users.# If False or unset, all users can see all views (but more granular permissions are still enforced# within views, such as requiring staff for adding and deleting lists).TODO_STAFF_ONLY=True# If you use the "public" ticket filing option, to whom should these tickets be assigned?# Must be a valid username in your system. If unset, unassigned tickets go to "Anyone."TODO_DEFAULT_ASSIGNEE='johndoe'# If you use the "public" ticket filing option, to which list should these tickets be saved?# Defaults to first list found, which is probably not what you want!TODO_DEFAULT_LIST_SLUG='tickets'# If you use the "public" ticket filing option, to which *named URL* should the user be# redirected after submitting? (since they can't see the rest of the ticket system).# Defaults to "/"TODO_PUBLIC_SUBMIT_REDIRECT='dashboard'# Enable or disable file attachments on Tasks# Optionally limit list of allowed filetypesTODO_ALLOW_FILE_ATTACHMENTS=TrueTODO_ALLOWED_FILE_ATTACHMENTS=[".jpg",".gif",".csv",".pdf",".zip"]TODO_MAXIMUM_ATTACHMENT_SIZE=5000000# In bytes# additionnal classes the comment body should hold# adding "text-monospace" makes comment monospaceTODO_COMMENT_CLASSES=[]# The following two settings are relevant only if you want todo to track a support mailbox -# see Mail Tracking below.TODO_MAIL_BACKENDSTODO_MAIL_TRACKERS

当前的django todo版本号可从todo包中获得

python -c "import todo; print(todo.__version__)"

通过csv导入任务

django todo能够从特定格式的csv电子表格批量导入("upsert")任务。此功能通过管理命令和Web界面提供。

管理命令

/manage.py导入csv-f/path/to/file.csv

网络导入器

从导航链接到{url"todo:import_csv"}。按照CSV Web上载视图的结果链接进行操作。

CSV格式

todo/data/import_example.csv复制到系统上的其他位置,并在电子表格中编辑或直接编辑。

不要编辑标题行!

前四列:'title'、'group'、'task list'、'created by'是必需的--所有其他列都是可选的,它们的工作方式应该与通过Web UI手动输入任务的方式非常相似。

注意:在内部,任务被设置为任务列表,而不是组(任务列表在GROUPS中)。但是,我们请求csv中的组 因为在不同的组中可以有多个同名的任务列表;也就是说,我们需要它来进行命名空间和权限设置。

导入规则

由于通过csv输入的数据不会经过django todo其余部分中强制执行的相同视图权限,并且为了简化数据依赖性逻辑,并预先阻止django todo用户之间的分歧,导入程序将而不是创建新用户、组或任务列表。CSV中引用的所有用户、组和任务列表必须已存在,并且组成员身份必须正确。

任何验证错误(例如无法解析的日期、不正确的组成员身份)都将导致跳过该行。

在运行结束时,将提供一份报告,其中包含行的升序和跳过行(包括行号和原因)。

upsert逻辑

对于每个有效行,我们需要决定是创建新任务还是更新现有任务。django todo匹配四个必需列的唯一组合。如果我们找到一个匹配的任务,我们就更新e其他列。换言之,如果导入一次CSV,然后编辑任务的分配给并再次导入,则原始任务将使用新的分配者进行更新(其他列也是如此)。

否则,我们将创建一个新任务。

邮件跟踪

如果你能把django todo变成一个共享邮箱呢?django todo包含一个可选功能,允许发送电子邮件 作为新任务发送到专用邮箱以推送到TOdo,并作为对这些任务的评论添加响应。 这允许支持团队使用完全统一的电子邮件+错误跟踪系统,以避免混淆谁看到或 响应了什么。

要启用邮件跟踪,您需要:

在"设置"中:

fromtodo.mail.producersimportimap_producerfromtodo.mail.consumersimporttracker_consumerfromtodo.mail.deliveryimportsmtp_backend,console_backend# email notifications configuration# each task list can get its own delivery methodTODO_MAIL_BACKENDS={# mail-queue is the name of the task list, not the worker name"mail-queue":smtp_backend(host="smtp.example.com",port=465,use_ssl=True,username="test@example.com",password="foobar",# used as the From field when sending notifications.# a username might be prepended later onfrom_address="test@example.com",# additionnal headersheaders={}),}# incoming mail worker configurationTODO_MAIL_TRACKERS={# configuration for worker "test_tracker""test_tracker":{"producer":imap_producer(host="imap.example.com",username="text@example.com",password="foobar",# process_all=False, # by default, only unseen emails are processed# preserve=False, # delete emails if False# nap_duration=1, # duration of the pause between polling rounds# input_folder="INBOX", # where to read emails from),"consumer":tracker_consumer(group="Mail Queuers",task_list_slug="mail-queue",priority=1,task_title_format="[TEST_MAIL] {subject}",)}}

可以使用以下命令启动邮件工作程序:

./manage.py mail_worker test_tracker

为了保持逻辑一致性,在2.0中重命名了一些视图和url。如果这影响到您,请参阅源代码和演示gtd站点,以获取有关新url名称的参考信息。

如果要记录邮件事件,请确保正确配置django日志:

LOGGING={'version':1,'disable_existing_loggers':False,'handlers':{'console':{'class':'logging.StreamHandler',},},'loggers':{'':{'handlers':['console'],'level':'DEBUG','propagate':True,},},}

运行测试

django todo只使用pytest进行测试。运行该套件的最佳方法是将django todo克隆到自己的目录中,安装pytest,然后:

{%blockextrahead%}{%endblockextrahead%}{%blockextra_js%}{%endblockextra_js%}
0

版本历史记录

2.4.8为未指定设置设置默认值时修复错误

2.4.7在"外部添加"中支持自定义用户模型

2.4.6使用默认设置、更新perms和测试的哈希值

2.4.5在任务编辑期间重新启用"通知"功能

2.4.4修复setup.py/installation的问题

2.4.0在任务中实现可选的文件附件

2.3.2更新setup.py元数据

2.3.1改进对格式错误或不存在的CSV上载的错误处理。

2.3.0实施邮件跟踪系统。增加了通过csv批量导入任务的能力。修复了在后台删除任务时重新排序的问题。

2.2.2更新依赖项

2.2.1转换任务删除并将"完成"视图切换为仅发布

2.2.0重新设置仅限TOdo_员工的强制执行设置

2.1.1将文档中的python版本要求更正为python 3.6

2.1.1将视图分割成不同的模块。

2.1.02018年12月:不再允许在任务或评论体中使用javascript。其他错误修复。

2.0.32018年4月:在setup.py中提升生产状态

2.0.22018年4月:改进通知电子邮件主题和正文

2.0.12018年4月:从列表视图重构"切换完成"和"删除"操作。

2.02018年4月:重大项目重构,几乎完全重写了视图、模板和Todo的第一个真正的测试套件。

1.6.2增加了对列表名/段塞中Unicode字符的支持。

1.6.1小错误修复。

1.6允许未分配("任何人")任务。清理/更新模板和视图。测试基础设施到位。

1.5支持flake8,项目注释不再是必需字段,修复django 1.8的警告,python 2/3兼容的unicode字符串,简单搜索任务,获取项目的绝对url()。

1.4-从默认模板中删除样式。添加从表单定义中排除字段以防止警告。已从模板中删除不推荐使用的"循环"标记。为提交公共票证添加了各种元素的设置。

1.3-删除杂散直接到模板引用。引用了的所有命名URL引用Django 1.5兼容性。

1.2-向所有样本模板添加CSRF保护。增加了综合搜索功能。现在显示每个项目的已完成项目/总项目的比率 名单。更好地分离媒体和模板。已清理项编辑窗体(已删除无关字段)。重新分配任务现在正确限制 受让人名单。已将项目移动到GitHub。

1.1-在从列表中检查项目时,完成日期设置正确,但在从项目详细信息页保存时设置不正确。在项上添加了保存方法 修理。修正了文档错误:上下文处理器。新添加的评论现在会通过电子邮件发送给参与某项任务的所有人。

1.0.1-查看要关闭的单个任务时,可以同时评论和关闭任务。我们在用 django评论说,这些是不同视图中的不同模型。解决方案是停止使用django注释并滚动我们自己的注释,然后重新连接 查看。抱歉,如果您使用的是以前的版本-您可能需要将您的评论移植到新系统。

1.0.0-升级到发行版。拖放任务优先级。电子邮件通知(现在更像一个票务系统)。更多 有魅力的约会对象。错误修复。

0.9.5-修复了编辑现有事件时的jquery错误-datepicker现在显示正确的日期。从基本模板中删除了那匹该死的django小马。

0.9.4-在型号中用Unicode替换了str。修复了"我的任务"视图中列表的链接。

0.9.3-缺少指向单个任务编辑视图的链接

0.9.2-现在尝试将第二个同名列表添加到同一组时失败。-任务的截止日期现在确实是可选的。- 更正了编辑任务时的日期时间编辑冲突-任务名称的最大长度已从60个字符提高到140个字符。如果升级,请 相应地修改数据库(字段todo_item.name=maxlength 140)。-安全性:提供直接任务URL的用户不能再查看/编辑 组范围之外的任务与列表视图相同-仅限授权视图。-在主页上更正项目和组计数(注意-管理员用户请参见 所有组,而不仅仅是它们"所属"的组)

0.9.1-删除上下文处理器.py-剩余垃圾

0.9-首次发布

TODO2.0升级说明

django todo 2.0几乎是从头开始重建的,其中包括一些根本性的更改,包括模型名更改。因此,它与django todo 1.x中的数据不兼容。如果要升级现有安装,请尝试以下操作:

  • 使用/manage.py dumpdata todo--indent 4>;todo.json导出旧的todo数据
  • 编辑转储文件,用新的模型名称(任务任务列表)替换旧的模型名称列表
  • 删除现有的待办事项数据
  • 卸载旧的todo应用程序并重新安装
  • 迁移,然后使用/manage.py loaddata todo.json导入编辑的数据

为什么不提供迁移?

这是计划,但不幸的是,makemigrations创建了新表并删除了旧表,使这成为一个破坏性的更新。不幸的是,重命名模型不是makemigrations所能做到的,而且我真的不想保留名称不正确的原始模型。对不起的!

日期选择器

django todo不再引用jquery日期选择器,而是默认为本机html5浏览器日期选择器(safari不支持,不可原谅)。您可以自由选择一种方法。

网址

为了保持逻辑一致性,重命名了一些视图和url。如果这影响到您,请参阅源代码和演示gtd站点,以获取有关新url名称的参考信息。

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

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径