AttributeError: объект 'CharField' не имеет атрибута 'encode' Django

Я создаю почтовый smtp инструмент, недавно я столкнулся с ошибкой атрибута. Я был бы очень признателен, если бы кто-нибудь помог мне исправить эту ошибку. Вот мои коды.

Views.py

class HomePageView(FormView):
    form_class = ToolsForm
    template_name = 'tools/home.html'
    success_url = reverse_lazy('success')

    def form_valid(self, ToolsForm):
        ''' This method is called when valid form data has been posted '''
        ToolsForm.send_email()
        return super().form_valid(ToolsForm)

Forms.py

class ToolsForm(forms.Form):
    sender_mail = forms.CharField(required=True,
                                    widget=forms.EmailInput(attrs={'placeholder': 'Enter your mail account here:'}))
    receiver_mail = forms.CharField(required=True,
                                     widget=forms.EmailInput(attrs={'placeholder': 'Enter your mail account here:'}))
    subject = forms.CharField(max_length=100, required=True,
                              widget=forms.TextInput(attrs={'placeholder': 'Enter the subject here:'}))
    message = forms.CharField(required=True, max_length=200,
                           widget=forms.TextInput(attrs={'placeholder': 'Enter your body text here'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Enter your password here'}))

    def send_email(self):
        sender = self.cleaned_data.get("sender_mail")
        receiver = self.cleaned_data.get("receiver_mail")
        subject = self.cleaned_data.get("subject")
        message = self.cleaned_data.get("message")
        password = self.cleaned_data.get("password")

        send_mail(subject, message, sender, [receiver], auth_password=password)

Ошибка

  File "C:\Users\EMMA\.virtualenvs\Cyberproj-h6KxjFSR\lib\site-packages\django\core\mail\backends\smtp.py", line 102, in send_messages
    new_conn_created = self.open()
  File "C:\Users\EMMA\.virtualenvs\Cyberproj-h6KxjFSR\lib\site-packages\django\core\mail\backends\smtp.py", line 69, in open
    self.connection.login(self.username, self.password)
  File "c:\users\emma\appdata\local\programs\python\python38-32\lib\smtplib.py", line 723, in login
    (code, resp) = self.auth(
  File "c:\users\emma\appdata\local\programs\python\python38-32\lib\smtplib.py", line 634, in auth
    response = encode_base64(initial_response.encode('ascii'), eol='')
AttributeError: 'CharField' object has no attribute 'encode'
[14/Oct/2021 09:36:52] "POST / HTTP/1.1" 500 110749

Проблема: Проблема находится в файле views.py. Я забыл создать экземпляр класса перед обращением к функции send_mail().

Решение: Доступ к методу через form_class может сработать, но я не пробовал. Поэтому я создал экземпляр класса ToolsForm и вызвал метод send_mail().

Вернуться на верх