一个django应用程序,将组与需要登录成员同意的条款关联起来。

django-letsagree的Python项目详细描述


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2e736869656c64732e696f2f707970692f707976657273696F6E732F446A616E676F2E73773F636F6C6F6F723D253233336306363266C616265C3D5079746F6E" /><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

让我们同意

功能

  • 在"deque-style"中,使用maxlen=1
  • 每个组术语关联,每个用户术语接受用户所属的每个组。
  • 对于每个登录的用户,每个请求或每天最多查询1次。
  • 多语言就绪。
  • 每个用户都可以在任何时候撤销同意。

关于

django letsagree是遵循《欧盟通用数据保护条例》(GDPR)精神的结果。

登录的用户可以属于一个或多个组。

如果一个或多个组与django letsagree关联,则将要求作为这些组成员登录的所有用户同意与每个组相关的条款。此操作将记录在数据库中。

与组关联的术语可以更新为新版本。

这样的决定将再次触发一种机制,该机制在允许站点上的任何其他操作之前,要求每个用户的同意。

如果用户未提供同意,则仅允许以下操作:

  • 注销。
  • 查看并删除提供的所有自己同意的实例。
  • 查看所有条款

先决条件

安装

  • pip安装django letsagree

  • 项目/设置.py

    INSTALLED_APPS=[...'letsagree.apps.LetsagreeConfig',...]MIDDLEWARE=[...'letsagree.middleware.LetsAgreeMiddleware',# Near the end of the list...]
  • django letsagree本身不附带任何迁移。建议 在项目中为其模型添加迁移,并避免使用 word迁移作为文件夹的名称。

    相关的django设置是迁移模块。 在下面的示例中,我们将创建一个名为3p_migrations的文件夹 在settings.py所在的主项目文件夹中。

    如果您想使用新文件夹,请不要忘记在其中创建一个空的\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuy

    项目/设置.py:

    MIGRATION_MODULES={'letsagree':'project.3p_migrations.letsagree',}
    • 确保按照翻译部分中的说明正确设置语言。 默认实现将创建为许多字段因为默认设置了语言的数量django。
    >然后:< > >
    ./manage.pymakemigrationsletsagree./manage.pymigrate
  • project/url.py:

    urlpatterns=[...path('path/to/letsagree/',include('letsagree.urls')),...]
  • 应启用会话

设置

默认设置

LETSAGREE_CACHE=FalseLETSAGREE_CSS={}LETSAGREE_JS=()LETSAGREE_LOGOUT_APP_NAME='admin'LETSAGREE_BROWSER_TITLE=''LETSAGREE_BORDER_HEADER=''

< A/>

数据库查询

中间件为每个请求生成一个数据库查询,以确保用户已同意与其所属组相关的所有条款。

如果letsagree_cache=true,将使用django的缓存框架并且中间件每24小时只生成一个数据库查询。

默认情况下不启用Letsagree_缓存为每个用户设置唯一的id

提示:django hashid field是一个隐藏唯一idids而不影响其唯一性的库。

< A/>

翻译

注意你的语言!

数据库

默认情况下,lestage安装django-translated-fields以满足翻译项的标题摘要内容字段的需要。此库将为列表中的每个条目创建单独的字段。

此列表的第一个条目被视为"默认语言"。相关的数据库字段标记为blank=false,并用作回退值。如果请求语言的条目不存在,则返回此值。

语言列表中其他语言相关的所有其他字段都标记为blank=true并且可以保持为空。

尽管语言代码设置与letsagreedjango翻译字段没有直接关系,但建议匹配FIR语言设置中的ST语言。

示例:

LANGUAGES=(('fr','French'),('en','English'))LANGUAGE_CODE='fr'

模型术语将包括以下字段:

{'title_fr':{'blank':False},'title_en':{'blank':True},'summary_fr':{'blank':False},'summary_en':{'blank':True},'content_fr':{'blank':False},'content_en':{'blank':True},}

字符串

django letsagree中的所有字符串都用以下允许翻译的方式之一进行标记:

  • django.utils.translation.gettext_lazy('<;string>;')
  • {%trans"<;string>;"%}

自定义表单资产

django letsagree使用扩展admin/index.html的letsagree/pending.html模板。通过formview这个模板接收一个formset它包括所有应该得到用户同意的条款。

letsagree_cssletsagree_js设置时,将相关资产传递到表单的media类中,作为上述表单集的基础。语法在相关的django文档中有描述。

一个好的起点可能是由django letsagree提供的默认css文件:

设置.py:

LETSAGREE_CSS={'all':('letsagree/letsagree.css',)}

当然,可以完全覆盖模板。

在这种情况下,请记住,如果{{empty{u form}为false,则{{form}包含一个表单集。

其他设置

  • Letsagree_logout_a p p_name:两个模板的右上角都会出现一个注销链接。

    其格式为反向(<;letsagree_logout_app_name>;:logout)

    注销链接默认为reverse('admin:logout')

  • letsagree_browser_title:默认模板的标题。

  • letsagree_border_header:将出现在默认模板左上角的文本。

< A/> 权限

您有责任将每个新用户分配给与django letsagree相关联的组。该组至少应包括delete_notarypublic权限,以防用户选择撤销他的同意。

如果将django letsagree模型的所有权限委托给一个组,下表说明了允许用户执行的操作,其中是工作人员=true是超级用户=true

<表><广告>操作超级用户自己的条目超级用户其他条目管理员用户自己的条目管理员用户其他条目< /广告><正文>查看术语正确正确正确正确添加术语正确正确更改术语错误错误错误错误删除术语错误错误错误错误查看公证人正确正确正确错误添加"公证人"错误错误更改公证人错误错误错误错误删除公证人正确错误正确错误

< A/> 新术语版本

如果术语的两个实例与同一组关联,则最后保存的实例是最新版本。所有登录的用户都必须提供此最新版本的许可,而不必考虑他们可能已经或尚未就与此组相关的条款提供的任何先前许可。

django letsagree考虑登录用户是否只为与所属组关联的每个术语的最新版本提供了同意。如果没有,用户只能注销或访问django letsagree管理页,保留删除其提供的任何同意实例的权利。

测试

要运行测试套件,您需要:

  • 安装了TOX的Virtualenv。
  • 具有相同用户、密码、数据库名的PostgreSQL、Mariadb/MySQL数据库。
  • 设置以下环境变量:tox-db-u-nametox-db-u-usertox-db-u-passwd

不幸的是,测试套件相当复杂。对不起的!

覆盖范围:未测试

更改日志

1.0.1:增加了travis、coverage、lgtm、pyup ci

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

推荐PyPI第三方库


热门话题
java如何在JUNIT/Mockito中验证以下情况   Map<A,List<B>>元素的Java组合算法   java为什么mvn dependency:purgelocalrepository不获取与mvn install相同的依赖项?   java如何将输入转换为程序能够理解的方法   java使用Jackson ObjectMapper的默认展开序列化程序   java SpringBoot:400错误请求错误,即使参数存在   java使用“Spring数据Jpa查询”检索“hibernate代理对象”列表   java JSON返回空内容   用某些整数表示字符串的java   java上传一个文件。来自REST服务的二进制输入流zip文件   java截击请求在单击按钮时执行两次   返回存储长值所需的字节数的java函数   Java将嵌套的Json对象反序列化为Java对象   使用差分bean服务的JavaSpring测试   Lucene 4.0中的java术语频率   java基本实体和可序列化   java CArray和Array在PyTables之外的兼容性   什么是Java中的备份集合?   java如何防止用户关闭我的应用程序?(Linux触摸屏应用程序)   JavaSpark:运行时reduce元素的技术术语?