Django - django-cookie-Agreement не работает
https://github.com/haricot/django-cookie-consent
https://django-cookie-consent.readthedocs.io/en/latest/index.html
Я нашел форк проекта github django-cookie-agreement для управления файлами cookie на вашем веб-сайте, и я заставил его работать большую часть времени, но он не на 100% идеален.
Вот как я его запустил (либо установить через pip из этой ссылки вилки, либо):
Не используйте pip3 install django-cookie-agreement из PyPi по умолчанию. Загрузите zip-файл с github и скопируйте папку 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' не получил значение (я) для аргумента (ов): 'запрос'. Копирование остальной части кода из этого файла и исключение этого тега скрипта привело к тому, что баннер появился в файле base.html моего проекта.
Принятие файла cookie от нажатия кнопки "Принять" на коде баннера, найденном в каталоге тестов, просто перенаправляет меня на пустую страницу / cookies / accept / social /. Это согласие также не регистрируется.
Принятие файла cookie из / cookies / регистрируется, но это дало мне эту ошибку:
TypeError: нельзя использовать строковый шаблон для байтового объекта
[20 января 2020 г. 16:00:43] "POST /cookies/accept/social/ HTTP/1.1" 500 121416
Метод запрещен (GET): /cookies/accept/social/
Недопустимый метод: / cookies / accept / social /
[20 января 2020 г. 16:00:44] "GET /cookies/accept/social/ HTTP/1.1" 405 0
Является ли эта ошибка возможной проблемой несовместимости с python3?
Как мне настроить, например, имя переменной группы с именем social и файл cookie с именем 1P_JAR (это пример файла cookie recaptcha v3 на моем сайте).
Заметил, что не регистрируется имя пользователя или IP-адрес пользователя. Было бы неплохо включить их, когда они примут или отклонят предложение.
Я не уверен, что эта вилка автоматически блокирует файлы cookie, пока пользователь не примет их. Кто-нибудь может это проверить? Если эта функция включена или нет, как ее реализовать?
При приеме файлов cookie или отклонении файлов cookie в вашем браузере создается фактический файл cookie с именем cookie_consent, который сообщает вам, какие файлы cookie принимаются или отклоняются.
Может кто-нибудь помочь мне заставить это работать? Кажется, это очень близко к соответствию GDPR.
1 ответ
Проверьте журнал вашего сервера запуска. Вам необходимо настроить параметр COOKIE_CONSENT_NAME. Потому что для этого параметра нет значения по умолчанию.
Затем вам нужно перейти в панель администратора django и создать файлы cookie с соответствующими именами и доменами, которые вы можете найти в инспекторе браузера.
Как это работает: in создает файл cookie с меткой cookie_consent, в котором хранятся все данные, необходимые для работы этого пакета. Чтобы он работал правильно, требуется несколько настроек:
1) в settings.py необходимо указать
COOKIE_CONSENT_NAME = "cookie_consent"
(или что угодно, вероятно, тоже работает)
- в 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 всегда включены, и, следовательно, пользователь не может решить или не удалять их); тогда вы также должны добавить как минимум 1 cookie для группы 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")