视图添加字段_Django为博客添加email分享功能

教程介绍了如何在Django博客中实现邮箱分享功能。包括创建表单收集用户信息,编写视图处理表单和发送邮件,添加URL模式,以及在模板中渲染表单。详细解释了表单验证、视图操作和邮件发送的步骤。
摘要由CSDN通过智能技术生成
8fa9ecfcf5b4df66ea057493f1ac01a6.png

思路:

1.创建一个表单来填写用户信息(姓名,email,收件人,评论)

2.在views.py文件中创建一个视图(view)来操作发布的数据和发送email

3.在blog应用的urls.py中为新的视图(view)添加一个URL模式

4.创建一个模板(template)来展示这个表单

1.使用Django 创建表单

Django有一个内置的表单框架允许你通过简单的方式来创建表单。这个表单框架允许你定义你的表单字段,指定这些字段必须展示的方式,以及指定这些字段如何验证输入的数据。Django表单框架还提供了一种灵活的方式来渲染表单以及操作数据。

  • Form创建一个标准表单
  • ModelForm创建一个可用于创建或者更新model实例的表单

在blog应用中创建forms.py

59f75cea593ff26a3c4da95cd73da99a.png

表单可以存在你的Django项目的任何地方,但按照惯例将它们放在每一个应用下面的forms.py文件中

name字段是一个CharField。这种类型的字段被渲染成HTML元素。每种字段类型都有默认的控件来确定它在HTML中的展示形式。通过改变控件的属性可以重写默认的控件。在comment字段中,我们使用HTML元素而不是使用默认的元素来显示它。

字段验证取决于字段类型。例如,email和to字段是EmailField,这两个字段都需要一个有效的email地址,否则字段验证将会抛出一个forms.ValidationError异常导致表单验证不通过。在表单验证的时候其他的参数也会被考虑进来:我们将name字段定义为一个最大长度为25的字符串;通过设置required=False让comments的字段可选。所有这些也会被考虑到字段验证中去。

2.在视图中操作表单

当表单成功提交后你必须创建一个新的视图(views)来操作表单和发送email。编辑blog应用下的views.py文件,添加以下代码:

a288c41eefc21b98bc06e7c1c788dc4b.png

该视图(view)完成了以下工作:

· 我们定义了post_share视图,参数为request对象和post_id。

· 我们使用get_object_or_404快捷方法通过ID获取对应的帖子,并且确保获取的帖子有一个published状态。

· 我们使用同一个视图(view)来展示初始表单和处理提交后的数据。我们会区别被提交的表单和不基于这次请求方法的表单。我们将使用POST来提交表单。如果我们得到一个GET请求,一个空的表单必须显示,而如果我们得到一个POST请求,则表单需要提交和处理。因此,我们使用request.method == 'POST'来区分这两种场景。

下面是展示和操作表单的过程:

1.通过GET请求视图(view)被初始加载后,我们创建一个新的表单实例,用来在模板(template)中显示一个空的表单:

form = EmailPostForm()

2.当用户填写好了表单并通过POST提交表单。之后,我们会用保存在request.POST中提交的数据创建一个表单实例。

if request.method == 'POST':

# Form was submitted

form = EmailPostForm(request.POST)

3.在以上步骤之后,我们使用表单的is_valid()方法来验证提交的数据。这个方法会验证表单引进的数据,如果所有的字段都是有效数据,将会返回True。一旦有任何一个字段是无效的数据,is_valid()就会返回False。你可以通过访问 form.errors来查看所有验证错误的列表。

4如果表单数据验证没有通过,我们会再次使用提交的数据在模板(template)中渲染表单。我们会在模板(template)中显示验证错误的提示。

5.如果表单数据验证通过,我们通过访问form.cleaned_data获取验证过的数据。这个属性是一个表单字段和值的字典。

3.使用Django发送email

使用Django发送email非常简单。首先,你需要有一个本地的SMTP服务或者通过在你项目的settings.py文件中添加以下设置去定义一个外部SMTP服务器的配置:

  • EMAIL_HOST: SMTP服务地址。默认本地。
  • EMAIL_POSR: SMATP服务端口,默认25。
  • EMAIL_HOST_USER: SMTP服务的用户名。
  • EMAIL_HOST_PASSWORD: SMTP服务的密码。
  • EMAIL_USE_TLS: 是否使用TLS加密连接。
  • EMAIL_USE_SSL: 是否使用隐式的SSL加密连接。

运行命令python manage.py shell来打开Python shell,发送一封email如下所示:

0ace75f0531673641411f073df90e9eb.png

send_mail()方法需要这些参数:邮件主题,内容,发送人以及一个收件人的列表。通过设置可选参数fail_silently=False,我们告诉这个方法如果email没有发送成功那么需要抛出一个异常。如果你看到输出是1,证明你的email发送成功了。

现在,我们要将以上代码添加到我们的视图(view)中。在blog应用下的views.py文件中编辑post_share视图

9703532d0674f1b0f4285d94095e92cf.png
d7bf8c82e3d8923e94fec2acb65235cc.png

请注意,我们声明了一个sent变量并且当帖子被成功发送时赋予它True。当表单成功提交的时候,我们之后将在模板(template)中使用这个变量显示一条成功提示。由于我们需要在email中包含帖子的超链接,所以我们通过使用post.get_absolute_url()方法来获取到帖子的绝对路径。我们将这个绝对路径作为request.build_absolute_uri()的输入值来构建一个完整的包含了HTTP schema和主机名的url。我们通过使用验证过的表单数据来构建email的主题和消息内容并最终给表单to字段中包含的所有email地址发送email。

现在你的视图(view)已经完成了,别忘记为它去添加一个新的URL模式。打开你的blog应用下的urls.py文件添加post_share的URL模式如下所示:

3200be84f4d5705641b426e6ca00a144.png

4.在模板中渲染表单

在通过创建表单,编写视图(view)以及添加URL模式后,我们就只剩下为这个视图(view)添加模板(tempalte)了。在blog/templates/blog/post/目录下创建一个新的文件并命名为share.html。在该文件中添加如下代码:

24e5bcc27ad389404edc8cfc065f37b0.png

编辑你的blog/post/detail.html模板(template),在{{ post.body|linebreaks }}变量后面添加如下的链接来分享帖子的URL:

228a236d904276dbce54371cf1ab53d9.png

请记住,我们通过使用Django提供的{% url %}模板(template)标签(tag)来动态的生成URL。我们以blog为命名空间,以post_share为URL,同时传递帖子ID作为参数来构建绝对的URL。

现在,通过python manage.py runserver命令来启动开发服务器,在浏览器中打开 http://127.0.0.1:8000/blog/ 。点击任意一个帖子标题查看详情页面。在帖子内容的下方,你会看到我们刚刚添加的链接,如下所示:

64b87a77944de4bbc1e91702d2a4c3fe.png
c887c633dd3624423a6e21f5973fc0fa.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值