AttributeError в / share / 4 объект 'str' не имеет атрибута 'get' - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь отправить электронное письмо с помощью django, используя SMTP-сервер Gmail. Я записываю настройки в setting.py . Вот мой другой код, но я получаю AttributeError в / share / 4 у объекта 'str' нет атрибут "получить"? Пожалуйста, помогите мне решить эту ошибку.

**forms.py**

from django import forms 

class EmailPostForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    to = forms.EmailField()
    comment = forms.CharField(widget=forms.Textarea, required=False)

views.py

def share_email(request, id):
    post = get_object_or_404(Post, id=id)
    sent = False
    if request.method == 'POST':
        form = EmailPostForm(data=request.method)
        if form.is_valid():
            cd = form.cleaned_data
            post_url = 
            request.build_absolute_uri(post.get_absolute_url())
            subject = '{} ({}) recommend you reading "{}"'.format(cd['name'], cd['email'], post.title)
            message = 'Read "{}" at {}\n\n{}\'s comments: {}'.format(post.title, post_url, cd['name'], cd['comment'])
            send_mail(subject, message, 'admin@gmail.com', cd['to'])
            sent = True
    else:
        form = EmailPostForm()
    return render(request, 'blog/post/share_post.html', {'post': post, 'form': form, 'sent': sent})

url.py

urlpatterns = [path('share/<int:id>', views.share_email, name='share_post'),]

share_post.html

 {% extends 'blog/base.html' %}
    {% block title %}
     Share Post
    {% endblock %}
    {% block content %}
    {% if sent %}
        <h2>E-mail successfully sent</h2>
        <p>{{ post.title }} is successfully dent by email</p>
    {% else %}
        <h2>Share {{ post.title }} by email</h2>
        <form action="{% url 'blog:share_post' post.id %}" method="post">
        {{ form.as_p }}
        {% csrf_token %}
        <input type="submit" value="Send Email">
        </form>
    {% endif %}
    {% endblock %}

1 Ответ

0 голосов
/ 26 июня 2018

Здесь:

form = EmailPostForm(data=request.method)

Вы хотите request.POST, а не request.method.

В качестве примечания: после успешного сообщения следует перенаправление (чтобы предотвратить перезагрузку страницы для повторного размещения тех же данных). Вы можете использовать приложение contrib.messages , чтобы установить сообщение в сеансе, которое затем будет отображено на следующей странице.

...