Django框架学习八---通过电子邮件共享帖子

创建表单

在blog目录下创建forms.py文件

from django import forms


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

上述代码通过Form基类创建了一个表单

处理视图中的表单

对新创建的表单加以处理,但提交成功后,将发送一封电子邮件

def post_share(request, post_id):
    post = get_object_or_404(Post, id=post_id, status='published')
  
    if request.method == 'POST':
        form = EmailPostForm(request.POST)
        if form.is_valid()():
            cd = form.cleaned_data
   else:
        form = EmailPostForm()
    return render(request,'blog/post/share.html',{'post': post, 'form': form})

发送邮件

settting.py中添加

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'your_account@gmail.com'

EMAIL_HOST_PASSWORD = 'your_password'

EMAIL_POST = 587

EMAIL_USE_TLS = True

然后运行shell,发送邮件

from django.core.mail import send_mail
send_mail('Django mail', 'This e-mail was send with Django.','your_account@gmail.com',['your_account@gmail.com'], fail_silently=False)

输出结果为1则发送正常
在这里插入图片描述

向post_share中添加功能

def post_share(request, post_id):
    post = get_object_or_404(Post, id=post_id, status='published')
    sent = False

    if request.method == 'POST':
        form = EmailPostForm(request.POST)
        if form.is_valid()():
            cd = form.cleaned_data
            post_url = request.build_absolute_uri(post.get_absolute_url())
            subject = '{} ({}) recommends you reading "{}"' .format(cd['name'], cd['email'], post.title)
            message = 'Read "{}" at {}\n\n{}\'s commends:{}'.format(post.title, post_url, cd['name'], cd['commends'])
            send_mail(subject, message, 'admin@myblog.com', cd['to'])
            sent = True
    else:
        form = EmailPostForm()
    return render(request,'blog/post/share.html',{'post': post, 'form': form, 'sent': sent})

显示模板视图

1.设置模板,添加share.html文件

{% extends "blog/base.html" %}

{% block title %}Share a post {% endblock %}

{% block content %}

    {% if sent %}
        <h1>E-mail successfully sent</h1>
        <p>
        "{{ post.title }}"was successfully sent to {{ form.cleaned_data.to }}.
        </p>
     {% else %}
        <h1>Share "{{ post.title }}" by e-mail</h1>
        <form action="." method="post">
            {{ form.as_p }}
            {% csrf_token %}
            <input type="submit" value="Send e-mail">
        </form>
    {% endif %}
{% endblock %}

2.编辑detail.html

<p>
    <a href="{% url "blog:post_share" post.id %}">
        Share this post
    </a>
</p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值