Форум сайта python.su
Прикрутила django registration, в итоге UnicodeDecodeError at /accounts/register/
Тему с похожей проблемой нашла, но ответов там не было.
registration_form.html:
{% extends "base.html" %} {% block content %} <h1>Регистрация</h1> <form method="post" action=""> {% csrf_token %} <dl class="register"> {% for field in form %} <dt>{{ field.label_tag }}</dt> <dd class="clearfix">{{ field }} {% if field.help_text %}<div class="clearfix">{{ field.help_text }}</div>{% endif %} {% if field.errors %}<div class="myerrors clearfix">{{ field.errors }}</div>{% endif %} </dd> {% endfor %} </dl> <input type="submit" value="Зарегистрироваться" / class="clearfix"> </form> {% endblock %}
Офлайн
Ошибка в кодировках, на каком то этапе попытка переветси строку в объект Unicode провалилась.
Вы не привели полный лог ошибки - поэтому тут только гадать на гуще где именно все свалилось. Либо выкладывайте весь лог чтобы увидеть в каком месте кода произошла ошибка либо сами отлавливайте ее через дебагер, например модуль pdb
Офлайн
Environment: Request Method: POST Request URL: http://127.0.0.1:8000/accounts/register/ Django Version: 1.4 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'registration') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "W:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "W:\Python27\lib\site-packages\registration\views.py" in register 187. new_user = backend.register(request, **form.cleaned_data) File "W:\Python27\lib\site-packages\registration\backends\default\__init__.py" in register 79. password, site) File "W:\Python27\lib\site-packages\django\db\transaction.py" in inner 209. return func(*args, **kwargs) File "W:\Python27\lib\site-packages\registration\models.py" in create_inactive_user 85. registration_profile.send_activation_email(site) File "W:\Python27\lib\site-packages\registration\models.py" in send_activation_email 257. ctx_dict) File "W:\Python27\lib\site-packages\django\template\loader.py" in render_to_string 169. t = get_template(template_name) File "W:\Python27\lib\site-packages\django\template\loader.py" in get_template 145. template, origin = find_template(template_name) File "W:\Python27\lib\site-packages\django\template\loader.py" in find_template 134. source, display_name = loader(name, dirs) File "W:\Python27\lib\site-packages\django\template\loader.py" in __call__ 42. return self.load_template(template_name, template_dirs) File "W:\Python27\lib\site-packages\django\template\loader.py" in load_template 45. source, display_name = self.load_template_source(template_name, template_dirs) File "W:\Python27\lib\site-packages\django\template\loaders\filesystem.py" in load_template_source 39. return (file.read().decode(settings.FILE_CHARSET), filepath) File "W:\Python27\lib\encodings\utf_8.py" in decode 16. return codecs.utf_8_decode(input, errors, True) Exception Type: UnicodeDecodeError at /accounts/register/ Exception Value: 'utf8' codec can't decode byte 0xc0 in position 0: invalid start byte
Офлайн
кодировка файла с темплейтом не utf-8 — или пересохраните в utf-8 или задайте кодировку в settings
Какая вам нужна я подсказать не могу
Отредактировано Imposeren (Май 22, 2012 20:16:02)
Офлайн
Imposeren спасибо! Задала кодировку в настройках, предыдущая ошибка исчезла, появилась такая же, но уже где-то в другом месте) Возможно ошибка возникла из-за отправки е-mail с подтверждением регистрации? Использовала
python -m smtpd -n -c DebuggingServer localhost:1025
Environment: Request Method: POST Request URL: http://127.0.0.1:8004/accounts/register/ Django Version: 1.4 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'registration') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "W:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "W:\Python27\lib\site-packages\registration\views.py" in register 187. new_user = backend.register(request, **form.cleaned_data) File "W:\Python27\lib\site-packages\registration\backends\default\__init__.py" in register 79. password, site) File "W:\Python27\lib\site-packages\django\db\transaction.py" in inner 209. return func(*args, **kwargs) File "W:\Python27\lib\site-packages\registration\models.py" in create_inactive_user 85. registration_profile.send_activation_email(site) File "W:\Python27\lib\site-packages\registration\models.py" in send_activation_email 264. self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL) File "W:\Python27\lib\site-packages\django\contrib\auth\models.py" in email_user 374. send_mail(subject, message, from_email, [self.email]) File "W:\Python27\lib\site-packages\django\core\mail\__init__.py" in send_mail 61. connection=connection).send() File "W:\Python27\lib\site-packages\django\core\mail\message.py" in send 248. return self.get_connection(fail_silently).send_messages([self]) File "W:\Python27\lib\site-packages\django\core\mail\backends\smtp.py" in send_messages 92. sent = self._send(message) File "W:\Python27\lib\site-packages\django\core\mail\backends\smtp.py" in _send 110. email_message.message().as_string()) File "W:\Python27\lib\site-packages\django\core\mail\message.py" in message 228. msg['Message-ID'] = make_msgid() File "W:\Python27\lib\site-packages\django\core\mail\message.py" in __setitem__ 124. name, val = forbid_multi_line_headers(name, val, self.encoding) File "W:\Python27\lib\site-packages\django\core\mail\message.py" in forbid_multi_line_headers 82. val = force_unicode(val) File "W:\Python27\lib\site-packages\django\utils\encoding.py" in force_unicode 93. raise DjangoUnicodeDecodeError(s, *e.args) Exception Type: DjangoUnicodeDecodeError at /accounts/register/ Exception Value: 'utf8' codec can't decode byte 0xc2 in position 26: invalid continuation byte. You passed in '<20120522205854.4312.1036@\xc2\xe5\xf0\xf2\xee\xeb\xe5\xf2>' (<type 'str'>)
Отредактировано Melynx (Май 22, 2012 23:04:18)
Офлайн
Не хотите проблем с кодировками - не надо разводить их зоопарк. Работайте в одной настолкьо насколько это возможно. По этому поводу прекрасно знать философию, до которой дошли программисты Python, а затем и его разработчики( что вылилось в Python3):
Все внутри Python программы должно быть в объектах Unicode.
Поэтому перекодируйте ваши python модули, шаблоны и тп в utf-8 и везде указывайте эту кодировку.
Офлайн
К сожалению у меня и возможности-то не было зоопарк развести,я же говорила-новый проект, единственное что там моего-это шаблоны(их я уже перепроверила и перекодировала не один раз), ну и в settings.py добавила:
INSTALLED_APPS = (
…
'registration',
)
ACCOUNT_ACTIVATION_DAYS = 2
AUTH_USER_EMAIL_UNIQUE = True
EMAIL_HOST = ‘localhost’
EMAIL_PORT = 1025
EMAIL_HOST_USER = ‘'
EMAIL_HOST_PASSWORD = ’'
EMAIL_USE_TLS = False
DEFAULT_FROM_EMAIL = ‘info@google.ru’
FILE_CHARSET='utf-8'
DEFAULT_CHARSET='utf-8'
ко всему что было в проекте добавила # -*- coding: utf-8 -*- .Даже в модуль registration уже залезла,и там все перекодировала..бестолку, все та же ошибка
При отправке е-mail тоже везде юникод:
username u'111li' password1 u'11111' csrfmiddlewaretoken u'195b8038cdfdf13e36e770166c764236' email u'info@google.ru' password2 u'11111'
Environment: Request Method: POST Request URL: http://127.0.0.1:8000/accounts/register/ Django Version: 1.4 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'registration') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "W:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "W:\Python27\lib\site-packages\registration\views.py" in register 187. new_user = backend.register(request, **form.cleaned_data) File "W:\Python27\lib\site-packages\registration\backends\default\__init__.py" in register 79. password, site) File "W:\Python27\lib\site-packages\django\db\transaction.py" in inner 209. return func(*args, **kwargs) File "W:\Python27\lib\site-packages\registration\models.py" in create_inactive_user 85. registration_profile.send_activation_email(site) File "W:\Python27\lib\site-packages\registration\models.py" in send_activation_email 264. self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL) File "W:\Python27\lib\site-packages\django\contrib\auth\models.py" in email_user 374. send_mail(subject, message, from_email, [self.email]) File "W:\Python27\lib\site-packages\django\core\mail\__init__.py" in send_mail 61. connection=connection).send() File "W:\Python27\lib\site-packages\django\core\mail\message.py" in send 248. return self.get_connection(fail_silently).send_messages([self]) File "W:\Python27\lib\site-packages\django\core\mail\backends\smtp.py" in send_messages 92. sent = self._send(message) File "W:\Python27\lib\site-packages\django\core\mail\backends\smtp.py" in _send 110. email_message.message().as_string()) File "W:\Python27\lib\site-packages\django\core\mail\message.py" in message 228. msg['Message-ID'] = make_msgid() File "W:\Python27\lib\site-packages\django\core\mail\message.py" in __setitem__ 124. name, val = forbid_multi_line_headers(name, val, self.encoding) File "W:\Python27\lib\site-packages\django\core\mail\message.py" in forbid_multi_line_headers 82. val = force_unicode(val) File "W:\Python27\lib\site-packages\django\utils\encoding.py" in force_unicode 93. raise DjangoUnicodeDecodeError(s, *e.args) Exception Type: DjangoUnicodeDecodeError at /accounts/register/ Exception Value: 'utf8' codec can't decode byte 0xc2 in position 27: invalid continuation byte. You passed in '<20120523124528.4576.20047@\xc2\xe5\xf0\xf2\xee\xeb\xe5\xf2>' (<type 'str'>)
python -m smtpd -n -c DebuggingServer localhost:1025
В почтовом дебаггере высветится текст письма в quoted-printable кодировке. Может кто подсказать как по другому настроить почтовый сервер? Или где прочитать про это? Я в django начинающая, так что не очень понимаю что тут требуется…
Офлайн
Можете попробовать заморочиться еще одним “знанием новых вещей” и выложить ПОЛНЫЙ код вашего проекта на гитхабе или на битбакете — я его стяну, посмотрю и может быть разберусь.
Кстати, что при регистрации-то указываете? Такое ощущуние, что ему почтовый адрес не нравится.
Офлайн
test@example.com и т.д.
Изменила настройки на:
AUTH_USER_EMAIL_UNIQUE = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 465 EMAIL_HOST_USER = 'my_mail@gmail.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_USE_TLS = False DEFAULT_FROM_EMAIL = 'my_mail@gmail.com'
Отредактировано Melynx (Май 23, 2012 20:29:46)
Офлайн
финт не прошел;) Думал сходу возьмётесь понять системы контроля версий.
Доступа к файлу нет. Может быть справитесь мне доступ там дать? Отправил там сообщение вам. Ну или если не получиться справиться, то давайте другими методами файл.
Офлайн