2

https://github.com/haricot/django-cookie-consent

https://django-cookie-consent.readthedocs.io/en/latest/index.html

我找到了 django-cookie-consent github 项目的一个分支,用于管理您网站上的 cookie,并且我大部分时间都可以使用它,但它并不是 100% 完美的。

这是我运行它的方法(通过该 fork 链接的 pip 安装或):

不要使用默认 PyPi 中的 pip3 install django-cookie-consent。从 github 下载 zip 文件并将 cookie_consent 文件夹复制到您的站点包文件夹。例如对我来说是 - /home/user/.local/share/virtualenvs/project_name/lib/python3.7/site-packages/cookie_consent。然后 pip3 安装 django-appconf。然后按照文档说明进行操作。

链接:

http://127.0.0.1:8000/cookies/

http://127.0.0.1:8000/cookies/accept/

http://127.0.0.1:8000/cookies/accept/variable_name/

http://127.0.0.1:8000/cookies/decline/

http://127.0.0.1:8000/cookies/decline/variable_name/

我找到了一些同意横幅的代码https://github.com/haricot/django-cookie-consent/tree/master/tests/core/templates但遇到了问题。我将 test_page.html 模板代码复制到我自己项目的 base.html 中,但是整个脚本标签对我不起作用 -> <script type="{% cc_receipts "social" %}" data-varname="social">。我得到了 django.template.exceptions.TemplateSyntaxError: 'cc_receipts' did not receive value(s) for the argument(s): 'request'。从该文件复制其余代码并且不包括该脚本标记确实会导致横幅出现在我的项目的 base.html 文件中。

通过单击从测试目录中找到的横幅代码上的接受来接受 cookie 只会将我重定向到空白的 /cookies/accept/social/ 页面。这种接受也不会被记录下来。

接受来自 /cookies/ 的 cookie 确实会被记录,但它给了我这个错误:

TypeError:不能在类似字节的对象上使用字符串模式

[20/Jan/2020 16:00:43]“POST /cookies/accept/social/HTTP/1.1”500 121416

不允许的方法 (GET):/cookies/accept/social/

不允许的方法:/cookies/accept/social/

[20/Jan/2020 16:00:44]“GET /cookies/accept/social/HTTP/1.1”405 0

此错误是否可能是 python3 不兼容问题?

例如,我将如何配置一个名为 social 的组变量名称和一个名为 1P_JAR 的 cookie(这是我网站上的 recaptcha v3 cookie 的示例)。

注意到没有记录用户名或用户的 IP 地址。一旦他们接受或拒绝,最好包括这些。

我不确定这个分叉是否会在用户接受之前自动阻止 cookie。有人可以验证吗?如果包含或不包含此功能,您如何实现它?

当接受 cookie 或拒绝 cookie 时,会在您的浏览器中创建一个名为 cookie_consent 的实际 cookie,它会告诉您哪些 cookie 被接受或拒绝。

有人可以帮我解决这个问题吗?它似乎非常接近符合 GDPR。

4

2 回答 2

0

它是如何工作的:创建一个标记为 cookie_consent 的 cookie,它存储了这个包工作所需的所有数据。为了使其正常工作,需要进行一些调整:

1)进入setting.py,你必须指出COOKIE_CONSENT_NAME = "cookie_consent"(或者你喜欢的任何东西也可能有效)

  1. 到 TEMPLATE_CONTEXT_PROCESSORS 复制:'django.template.context_processors.request'--或-- 复制到:
TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                "django.template.context_processors.request", 
                ...

3)[不是强制性但有帮助,请参阅 django 文档上的说明] 我还指出设置 COOKIE_CONSENT_CACHE_BACKEND = "default" 并将整个网站缓存设置为:django.core.cache.backends.db.DatabaseCache

然后您首先在管理页面上创建一个 cookie 组到 cookie 组窗口,而不选中Is required复选框(否则您将无法管理 cookie 组,因为复选框意味着这些 cookie 始终处于打开状态,因此用户无法决定或不消除它们);那么您还必须为 cookie 组添加至少 1 个 cookie(否则 get_version 将不适用于 cookie 组,并且它对正确使用库是必需的)

共识是针对组而不是针对每个 cookie 收集的(正如 GDPR 建议的那样),这意味着accept_cookies(request, response, varname="your_cookie_group")只有在您使用 cookie 组时才会起作用。

这是告诉从视图中接受 cookie 的功能(不完美)的一个例子,要工作它显然需要两次刷新,第一次设置 cookie,第二次看到它:

---views.py
def homepage(request):
    
    #to render the page
    response = render(request = request, 
                  ...

    #to accept a cookie group
    accept_cookies(request, response, varname="cookie_group")#probabilmente solo per cookie groups
    
    #to check the cookie group
    cc = get_cookie_value_from_request(request, varname='cookie_group')
    print("cookie value from request: ",cc)

    if cc == True:
        print("Consensus given", cc)
    elif cc==False:
        print("Consensus not given",cc)
    else:
        print("probable error in getting cookie value from request: ", cc) # problem with cookie group


    return response
---urls.py
path('', views.homepage, name ="home")
于 2020-10-08T06:47:16.753 回答
0

检查您的运行服务器日志。您必须设置 COOKIE_CONSENT_NAME 设置。因为这个设置没有默认值。

然后你必须去 django 管理面板并使用它们各自的名称和域创建 cookie,你可以在浏览器检查器中找到它们。

于 2020-03-26T11:41:40.660 回答