Хороший туториал, спасибо очень интересно!!!! Есть одна загвостка, я не понимаю как сделать так что если пользователь вводит некорректные логин и пароль, на форме входа выдавалось сообщение о некорректном логине и пароле, и чтобы можно было снова вводить логин и пароль. Если понятно о чем я, подскажите как решить задачку
немного переписал код и вопрос решился, спасибо def clean(self): username = self.cleaned_data.get("username") # username = self.cleaned_data.get("email") password = self.cleaned_data.get("password") if username is not None and password: self.user_cache = authenticate( self.request, username=username, password=password ) if self.user_cache is None: raise self.get_invalid_login_error() elif not self.user_cache.email_verify: send_email_for_verify(self.request, self.user_cache) raise ValidationError( 'Почта не верифицирована, проверьте вашу почту!', code='invalid_login', ) else: self.confirm_login_allowed(self.user_cache) return self.cleaned_data
Спасибо за видео, все пработает, но есть один момент. Как реализовать проверку на повторное использование ссылки, которая приходит на Email? Другими словами как предотвратить повторную активацию по одной и той же ссылке?
Добрый день, спасибо вам за такой детальный разбор. У меня вопрос насчет верификаци по почте, сообщение приходит только в консоль, но не на саму почту. Как сделать так, чтобы ссылка приходила письмом на gmail?
Мы специально для теста поставили настройку github.com/djangouroki/verify_email/blob/master/project/settings.py#L34 чтобы письмо уходило в консоль, а чтобы уходило на почту надо сменить backend на кот необходимо например smtp - 'django.core.mail.backends.smtp.EmailBackend' docs.djangoproject.com/en/4.1/topics/email/#email-backends
На канале есть два видео, многие к одному это про FK , многие ко многим это про M2M, есть ещё один к одному. Посмотрите, если что задавайте вопросы в комментариях. :)
@@wstanley как я понял для регистрации более одного человека нужно переопределить username? потому что по дефолту стоить уникальное значение. Или я ошибаюсь?
@@wstanley Да, я понимаю что self это для экземпляра класса. Я в курсе. Но не совсем понятно, некоторые моменты. Например, если в классе, проверять валидность формы методом form_valid(self, form), то для user не нужно указывать self. Т.е. можно просто прописать user = form.save(). Вот почему здесь не нужно прописывать self.user = form.save()
@@wstanley И вообще, когда создаются запросы от пользователей, то для Класса представления создаются его экземпляры (экземпляры класса) для каждого запроса?
Когда мы пишем user = form.save() то мы инициируем локальную переменную user для функции в которой ее объявили. Если до этого form = UserForm - у которой указано в meta что model=User и наследуется от ModelForm так - UserForm(form.ModelForm) то при form.save() нам вернется user которого мы и запоминаем в переменную user Если мы напишем self.user = form.save() то user будет присвоен экземпляру класса и в других методах мы сможем так же к нему обращаться self.user Надеюсь понятно написал :) для более быстрой коммуникации и ответов на вопросы можешь писать в телеграмм t.me/pydjango тут быстрее ответят, я там тоже иногда отвечаю
@@wstanley Спасибо большое. Все понятно, что Вы написали. Но я больше хотел понять, почему при одновременных запросах, эта переменная user присваивается правильно (т.е. для каждого пользователя (запроса) отдельно)? Так же и с функциями представлениями
В вашем коде немного не правильно работает логика сброса пароля. Исходя из примера при введении неправильного email которого в базе нет, выводится что письмо с восстановлением было отправлено, а по сути такого email вообще нет. Было бы не плохо переопределить класс восстановления пароля и отслеживать существует ли такой email вообще и если не существует то выкидывать соответствующую ошибку. Если можно поясните как это сделать...
@@wstanley вопрос решен следующим образом urls.py path('password_reset/', auth_views.PasswordResetView.as_view(form_class=PasswordResetForm), name='reset_password'), forms.py class PasswordResetForm(DjangoPasswordResetForm): def clean_email(self): email = self.cleaned_data['email'] if not User.objects.filter(email__iexact=email, is_active=True).exists(): raise forms.ValidationError("There is no user registered with the specified email address!") return email Спасибо что ответили😉
Доброго дня! Это логика джанги такая, вот на этой строке github.com/django/django/blob/main/django/contrib/auth/forms.py#L331 вызывается метод self.get_users(email) он возвращает пустой генератор если по емаил пользователи(внезапно) не найдены. Если тебе надо доработать логику, то стоит переопределить(наследованием) метод get_users в классе(форме) PasswordResetForm и выдавать raise ValidationError() с текстом что пользователь не найден. И также переопределить PasswordResetView наследованием и указать ей свою новую форму form_class = MyPasswordResetForm, должно сработать
Почему если перехожу по ссылке для верификации,то в окне пишет Страница недоступна Если проблема не исчезнет, свяжитесь с владельцем сайта.HTTP ERROR 405 и видимо из-за этого логинит без подтвержденной почты
Извиняюсь комментарий попал на проверку и я его не увидел. Ошибка 405 говорит что метод у страницы на который вы обращаетесь не существует. т.е. вы обращаетесь на страницу методом POST а его просто нет, проверьте внимательно куда уходит запрос
@@wstanley Будет урок связанный с асинхронным запросом в Django? Например, мне на странице нужно нажать на кнопку/ссылку, чтобы показать инфу в div из базы данных. Чтобы это было без перезагрузки страницы. Я так понимаю Ajax нужно использовать...
Все, что нужно для мультиполя авторизации - собственный auth backend, там 30 строчек кода и указать его в settings.py как AUTHENTICATION_BACKENDS = ['путь к файлу бекенда',] :)
спасибо за серию видео. Возникает ошибка при авторизации: AttributeError at /users/login/ 'NoneType' object has no attribute 'email_verify' \users\forms.py, line 27, Наверно, что-то с условием, if not self.user_cache.email_verify: Буду благодарен за помощь, мне не хватает мозгов это решить
Привет. Сори, комментарий попал в раздел "на проверке" и я его не видел. Такая ошибка 'NoneType' object has no attribute 'email_verify' возникает если объект к которому ты обращаешься на самом деле None, т.е. не существует. Если это происходит в этой строке -> if not self.user_cache.email_verify:, то user_cache=None, а у None нету атрибута email_verify. Проверь почему так происходит
У меня была такая же проблема ошибка происходила когда пытался залогиниться через username а не email. В итоге помогло взять if not self.user_cache.email_verify: в try except: pass
Привет, когда Ваша программа доходит до 27 строчки кода, выбрасывается ошибка так как скорее всего этого пользователя нет в бд, а None нет поля 'email_verify', перенесите проверку: if self.user_cache is None: raise self.get_invalid_login_error() выше чем: if not self.user_cache.email_verify: send_email_for_verify(self.request, self.user_cache) ... .
Добрый день! Проверил по всему проекту у меня нет обращения к атрибуту email_verify, если не вижу либо скажите тайм код либо весь трейсбек ошибки скиньте, можно на депаст. Ваша ошибка говорит что вы обращаетесь к атрибуту email_verify у объекта а в объекте по какой-то причине None
@@wstanley Traceback (most recent call last): File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 482, in thread_handler raise exc_info[1] File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner response = await get_response(request) File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async response = await wrapped_callback( File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 444, in __call__ ret = await asyncio.wait_for(future, timeout=None) File "C:\Users\Vitaliy\AppData\Local\Programs\Python\Python39\lib\asyncio\tasks.py", line 440, in wait_for return await fut File "C:\Users\Vitaliy\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\thread.py", line 52, in run result = self.fn(*self.args, **self.kwargs) File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 486, in thread_handler return func(*args, **kwargs) File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\views\generic\base.py", line 84, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\utils\decorators.py", line 46, in _wrapper return bound_method(*args, **kwargs) self._clean_form() File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\forms\forms.py", line 455, in _clean_form cleaned_data = self.clean() File "C:\Users\Vitaliy\PycharmProjects\Funpay\funpay\Pay\forms.py", line 153, in clean if not self.user_cache.email_verify: AttributeError: 'NoneType' object has no attribute 'email_verify' HTTP POST /ru/login/ 500 [0.04, 127.0.0.1:56765]
Должна быть проверка перед логином, что такой пользователь существует в БД иначе выбрасывать ошибку, что такого пользователя не существует, проверьте логин и пароль
Здравствуй. Спасибо тебе за этот плейлист!!! Я задеплоил свой сайт на хостинг, и теперь мне нужно сделать так, чтобы подтверждение о завершении регистрации приходило на почту юзера, который регистрируется. Я поменял EMAIL_BACKEND на 'django.core.mail.backends.smtp.EmailBackend', но теперь у меня возникает следующая ошибка: ConnectionRefusedError at /users/register/ [Errno 111] Connection refused Request Method: POST Подскажи, пожалуйста, что мне нужно сделать?
@@wstanley Можете мне помочь, пожалуйста, не имею представления из-за чего возникает эта ошибка. У меня в остальном такой же код, как и у вас, только отличие в том, что сайт на хостинге сейчас
Сори я уезжал в другую страну отдохнуть там не было связи. Эта ошибка вызвана неправильными настройками почты, надо ее правильно настроить, для этого надо знать какой ты почтой пользуешься и какие там настройки, придется помучится Пиши в группу в телеге еще раз, либо смотри тут www.google.com/search?q=ConnectionRefusedError+at+%2Fusers%2Fregister%2F+%5BErrno+111%5D+Connection+refused&oq=ConnectionRefusedError+at+%2Fusers%2Fregister%2F+%5BErrno+111%5D+Connection+refused&aqs=chrome..69i57.843j0j15&sourceid=chrome&ie=UTF-8
Огроменное спасибо! Много чего стало понятно. Особенно за разбор встроенных функций. Всего вам хорошего!
Спасибо за отзыв!
Спасибо огромное. Я заказ взял первый по большому проекту на джанго. Очень выручили. Спасибо большое еще раз!
отличный видос, супер помогает понять как работает отправка почты и работа с токенами. На 19:34 в комнату зашел Винипух)
Ахаха, точно)))
походу это уже продвинутый уровень, уже что то умное, спасибо за урок
Классно! Спасибо, топчик.
Комментарий больше чем из 3 слов для продвижения видео
Спасибо большое! :)
Когда новые уроки ? :с
Для создания видео вы проделали просто титанический труд, большое за него спасибо :)
Всегда пожалуйста! Как будет время сразу запишу еще роликов :):)
Очень крутой ролик! Спасибо большое!!!! Ваш канал открытие просто! Большая благодарность
Спасибо за отзыв! Значит буду ещё писать ролики:)
Супер, спасибо за обзор, помогло сделать домашку 😊
Хороший туториал, спасибо очень интересно!!!!
Есть одна загвостка, я не понимаю как сделать так что если пользователь вводит некорректные логин и пароль, на форме входа выдавалось сообщение о некорректном логине и пароле, и чтобы можно было снова вводить логин и пароль.
Если понятно о чем я, подскажите как решить задачку
немного переписал код и вопрос решился, спасибо
def clean(self):
username = self.cleaned_data.get("username")
# username = self.cleaned_data.get("email")
password = self.cleaned_data.get("password")
if username is not None and password:
self.user_cache = authenticate(
self.request, username=username, password=password
)
if self.user_cache is None:
raise self.get_invalid_login_error()
elif not self.user_cache.email_verify:
send_email_for_verify(self.request, self.user_cache)
raise ValidationError(
'Почта не верифицирована, проверьте вашу почту!',
code='invalid_login',
)
else:
self.confirm_login_allowed(self.user_cache)
return self.cleaned_data
Спасибо за видео, все пработает, но есть один момент. Как реализовать проверку на повторное использование ссылки, которая приходит на Email? Другими словами как предотвратить повторную активацию по одной и той же ссылке?
Добрый день, спасибо вам за такой детальный разбор. У меня вопрос насчет верификаци по почте, сообщение приходит только в консоль, но не на саму почту. Как сделать так, чтобы ссылка приходила письмом на gmail?
Мы специально для теста поставили настройку github.com/djangouroki/verify_email/blob/master/project/settings.py#L34 чтобы письмо уходило в консоль, а чтобы уходило на почту надо сменить backend на кот необходимо например smtp - 'django.core.mail.backends.smtp.EmailBackend'
docs.djangoproject.com/en/4.1/topics/email/#email-backends
Спасибо вам огромное, очень помогло ваше видео
Всегда пожалуйста!
Надеюсь в новой Джанге будет базовое представление верификации пользователя через почту, в ДРФ оно есть если не ошибаюсь.
В ДРФ на сколько я знаю нет авторизации. Про новые фичи в джанго можете посмотреть на этой странице docs.djangoproject.com/en/4.1/releases/
Спасибо за видео. Хотелось бы увидеть как правильно проектировать базу данных с использованием ForeignKey,ManyToManyField
На канале есть два видео, многие к одному это про FK , многие ко многим это про M2M, есть ещё один к одному. Посмотрите, если что задавайте вопросы в комментариях. :)
👍👍👍👍
Спасибо!) помогли
всегда пожалуйста!
@@wstanley как я понял для регистрации более одного человека нужно переопределить username? потому что по дефолту стоить уникальное значение. Или я ошибаюсь?
Подскажите, пожалуйста. В каких случаях в DJANGO нужно использовать self?
Добрый день! Self не относится к django это относится к ООП и классам, почитайте про классы в python
@@wstanley Да, я понимаю что self это для экземпляра класса. Я в курсе. Но не совсем понятно, некоторые моменты. Например, если в классе, проверять валидность формы методом form_valid(self, form), то для user не нужно указывать self. Т.е. можно просто прописать user = form.save(). Вот почему здесь не нужно прописывать self.user = form.save()
@@wstanley
И вообще, когда создаются запросы от пользователей, то для Класса представления создаются его экземпляры (экземпляры класса) для каждого запроса?
Когда мы пишем user = form.save() то мы инициируем локальную переменную user для функции в которой ее объявили. Если до этого form = UserForm - у которой указано в meta что model=User и наследуется от ModelForm так - UserForm(form.ModelForm) то при form.save() нам вернется user которого мы и запоминаем в переменную user
Если мы напишем self.user = form.save() то user будет присвоен экземпляру класса и в других методах мы сможем так же к нему обращаться self.user
Надеюсь понятно написал :)
для более быстрой коммуникации и ответов на вопросы можешь писать в телеграмм t.me/pydjango тут быстрее ответят, я там тоже иногда отвечаю
@@wstanley Спасибо большое. Все понятно, что Вы написали. Но я больше хотел понять, почему при одновременных запросах, эта переменная user присваивается правильно (т.е. для каждого пользователя (запроса) отдельно)? Так же и с функциями представлениями
В вашем коде немного не правильно работает логика сброса пароля. Исходя из примера при введении неправильного email которого в базе нет, выводится что письмо с восстановлением было отправлено, а по сути такого email вообще нет. Было бы не плохо переопределить класс восстановления пароля и отслеживать существует ли такой email вообще и если не существует то выкидывать соответствующую ошибку. Если можно поясните как это сделать...
Добрый день! Я на отдыхе, приеду посмотрю, что там с паролем не так получилось. Отвечу на выходных только
@@wstanley вопрос решен следующим образом
urls.py
path('password_reset/', auth_views.PasswordResetView.as_view(form_class=PasswordResetForm), name='reset_password'),
forms.py
class PasswordResetForm(DjangoPasswordResetForm):
def clean_email(self):
email = self.cleaned_data['email']
if not User.objects.filter(email__iexact=email, is_active=True).exists():
raise forms.ValidationError("There is no user registered with the specified email address!")
return email
Спасибо что ответили😉
Доброго дня! Это логика джанги такая, вот на этой строке github.com/django/django/blob/main/django/contrib/auth/forms.py#L331 вызывается метод self.get_users(email) он возвращает пустой генератор если по емаил пользователи(внезапно) не найдены. Если тебе надо доработать логику, то стоит переопределить(наследованием) метод get_users в классе(форме) PasswordResetForm и выдавать raise ValidationError() с текстом что пользователь не найден. И также переопределить PasswordResetView наследованием и указать ей свою новую форму form_class = MyPasswordResetForm, должно сработать
Это круто но тяжело))
Тяжело только по началу, нужно немного практики)))
Почему если перехожу по ссылке для верификации,то в окне пишет Страница недоступна
Если проблема не исчезнет, свяжитесь с владельцем сайта.HTTP ERROR 405 и видимо из-за этого логинит без подтвержденной почты
Извиняюсь комментарий попал на проверку и я его не увидел. Ошибка 405 говорит что метод у страницы на который вы обращаетесь не существует. т.е. вы обращаетесь на страницу методом POST а его просто нет, проверьте внимательно куда уходит запрос
Топчик
Спасибо!
@@wstanley Будет урок связанный с асинхронным запросом в Django? Например, мне на странице нужно нажать на кнопку/ссылку, чтобы показать инфу в div из базы данных. Чтобы это было без перезагрузки страницы. Я так понимаю Ajax нужно использовать...
Да, конечно будет на майские праздники постараюсь записать
@@wstanley огонь🤩 огромная благодарочка!
все круто, но хотелось бы сделать вход по логину либо по почте
Можно дополнить серию таким видео, скоро продолжу записывать новые уроки, сделаю
Все, что нужно для мультиполя авторизации - собственный auth backend, там 30 строчек кода и указать его в settings.py как AUTHENTICATION_BACKENDS = ['путь к файлу бекенда',] :)
Да, спасибо, попробуем через auth backend сделать, посмотрим когда руки доберутся.
спасибо за серию видео.
Возникает ошибка при авторизации: AttributeError at /users/login/
'NoneType' object has no attribute 'email_verify'
\users\forms.py, line 27,
Наверно, что-то с условием, if not self.user_cache.email_verify:
Буду благодарен за помощь, мне не хватает мозгов это решить
Привет. Сори, комментарий попал в раздел "на проверке" и я его не видел. Такая ошибка 'NoneType' object has no attribute 'email_verify' возникает если объект к которому ты обращаешься на самом деле None, т.е. не существует. Если это происходит в этой строке -> if not self.user_cache.email_verify:, то user_cache=None, а у None нету атрибута email_verify. Проверь почему так происходит
У меня была такая же проблема ошибка происходила когда пытался залогиниться через username а не email. В итоге помогло взять if not self.user_cache.email_verify: в try except: pass
Привет, когда Ваша программа доходит до 27 строчки кода, выбрасывается ошибка так как скорее всего этого пользователя нет в бд, а None нет поля 'email_verify', перенесите проверку:
if self.user_cache is None:
raise self.get_invalid_login_error()
выше чем:
if not self.user_cache.email_verify:
send_email_for_verify(self.request, self.user_cache)
... .
почему на 28:27 вместо поля логин поле емайла?
Когда форма регистрации не проходит валидацию страница просто обновляеться без наличия ошибок.
Добрый день! Верните код ошибки в таком случае и обработайте ее на фронте с js, мы как раз это и разбирали на этом уроке
@@wstanley сори я просто как новичек тупанул и в контекст при ошибки валидации добавил просто форму, а не форму заполненую пользователем.
Отлично что получилось разобраться! В начале пути всегда сталкиваешься с такими ошибками, с опытом их станет меньше :)))
Если пытаюсь залогиниться не существующим пользователем выдает ошибку 'NoneType' object has no attribute 'email_verify'
Добрый день! Проверил по всему проекту у меня нет обращения к атрибуту email_verify, если не вижу либо скажите тайм код либо весь трейсбек ошибки скиньте, можно на депаст. Ваша ошибка говорит что вы обращаетесь к атрибуту email_verify у объекта а в объекте по какой-то причине None
@@wstanley
Traceback (most recent call last):
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 482, in thread_handler
raise exc_info[1]
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
response = await get_response(request)
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
response = await wrapped_callback(
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 444, in __call__
ret = await asyncio.wait_for(future, timeout=None)
File "C:\Users\Vitaliy\AppData\Local\Programs\Python\Python39\lib\asyncio\tasks.py", line 440, in wait_for
return await fut
File "C:\Users\Vitaliy\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\asgiref\sync.py", line 486, in thread_handler
return func(*args, **kwargs)
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\views\generic\base.py", line 84, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\utils\decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
self._clean_form()
File "C:\Users\Vitaliy\PycharmProjects\Funpay\venv\lib\site-packages\django\forms\forms.py", line 455, in _clean_form
cleaned_data = self.clean()
File "C:\Users\Vitaliy\PycharmProjects\Funpay\funpay\Pay\forms.py", line 153, in clean
if not self.user_cache.email_verify:
AttributeError: 'NoneType' object has no attribute 'email_verify'
HTTP POST /ru/login/ 500 [0.04, 127.0.0.1:56765]
@@wstanley Ну да я типа хочу залогиниться пользователем которого нет в БД и мне выдает эту ошибку(
Должна быть проверка перед логином, что такой пользователь существует в БД иначе выбрасывать ошибку, что такого пользователя не существует, проверьте логин и пароль
@@wstanley так работает:
def clean(self):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
if username is not None and password:
self.user_cache = authenticate(
self.request,
username=username,
password=password,
)
if self.user_cache is None:
raise self.get_invalid_login_error()
else:
if self.user_cache.email_verify:
self.confirm_login_allowed(self.user_cache)
else:
from .utils import send_user_for_verify
send_user_for_verify(self.request, self.user_cache)
raise ValidationError(
_("Почта не верифицирована, проверьте почту."),
code='invalid_login',
)
return self.cleaned_data
[WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Доброго дня, причин может быть очень много. Проверьте настройки подключения, проверьте все указанные порты и ИП
Dai bog tebe zdorovya. Laik i podpiska!
Спасибо!
Здравствуй. Спасибо тебе за этот плейлист!!!
Я задеплоил свой сайт на хостинг, и теперь мне нужно сделать так, чтобы подтверждение о завершении регистрации приходило на почту юзера, который регистрируется. Я поменял EMAIL_BACKEND на 'django.core.mail.backends.smtp.EmailBackend', но теперь у меня возникает следующая ошибка:
ConnectionRefusedError at /users/register/
[Errno 111] Connection refused
Request Method: POST
Подскажи, пожалуйста, что мне нужно сделать?
Не помню почему такая ошибка может быть, напиши в телеграмм группу, есть в описании канала. Я просто не за ПК сейчас, не могу глянуть(((
@@wstanley Я написал, мне ничего не ответили (
@@wstanley Можете мне помочь, пожалуйста, не имею представления из-за чего возникает эта ошибка. У меня в остальном такой же код, как и у вас, только отличие в том, что сайт на хостинге сейчас
Сори я уезжал в другую страну отдохнуть там не было связи. Эта ошибка вызвана неправильными настройками почты, надо ее правильно настроить, для этого надо знать какой ты почтой пользуешься и какие там настройки, придется помучится
Пиши в группу в телеге еще раз,
либо смотри тут www.google.com/search?q=ConnectionRefusedError+at+%2Fusers%2Fregister%2F+%5BErrno+111%5D+Connection+refused&oq=ConnectionRefusedError+at+%2Fusers%2Fregister%2F+%5BErrno+111%5D+Connection+refused&aqs=chrome..69i57.843j0j15&sourceid=chrome&ie=UTF-8
AttributeError at /users/register/
'NoneType' object has no attribute 'pk'
Доброго дня, где-то не получили объект, а получили None и у этого None пытаетесь получить атрибут pk. Вот он и ругается