AttributeError: 'CharField' object has no attribute 'encode' Django
AttributeError: 'CharField' object has no attribute '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() 函数之前,我忘记创建 class 的实例。
解决方法:
通过 form_class 访问该方法可能有效,但我还没有尝试过。所以我创建了 ToolsForm class 的实例并调用了 send_mail() 方法。
我正在构建一个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() 函数之前,我忘记创建 class 的实例。
解决方法: 通过 form_class 访问该方法可能有效,但我还没有尝试过。所以我创建了 ToolsForm class 的实例并调用了 send_mail() 方法。