Django学习_简易博客(五)
时间:2022-06-26
本文章向大家介绍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)
配置邮件服务器
mysite/settings.py
# Django将邮件输出至Shell中,用于缺少SMTP服务器的应用程序测试
# EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# 正常的EMAIL配置
EMAIL_HOST = 'smtp.163.com' # SMTP服务器主机
EMAIL_HOST_USER = '你的163邮箱' # SMTP服务器用户名
EMAIL_HOST_PASSWORD = '你163邮箱对应的密码' # SMTP服务器密码
EMAIL_PORT = 25 # SMTP端口
EMAIL_USE_TLS = False # 是否采用TLS安全连接
# 在python manage.py shell进行测试
# from django.core.mail import send_mail
#
# send_mail('Django mail', # 主题
# 'This e-mail was sent with Django.', # 消息
# 'zx490336534@163.com', # 发送者
# ['490336534@qq.com'], # 接收者列表
# fail_silently=False) # 如果邮件没有被正确的发送,抛出一个异常。
# # 如果正常发送 输出结果为1
配置视图
blog/views.py
from .forms import EmailPostForm
from django.core.mail import send_mail
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) # POST请求会生成一个表单实例
if form.is_valid():
cd = form.cleaned_data
post_url = request.build_absolute_uri(post.get_absolute_url())
subject = f'{cd["name"]} ({cd["email"]}) recommends you reding "{post.title}"'
message = f'Read "{post.title}" at {post_url}nn{cd["name"]} comments:{cd["comments"]}'
send_mail(subject, message, EMAIL_HOST_USER, [cd['to']])
sent = True
else:
form = EmailPostForm() # GET请求会给出一个空表单
return render(request,
'blog/post/share.html',
{'post': post, 'form': form, 'sent': sent})
配置路由
blog/urls.py
path('<int:post_id>/share/', views.post_share, name='post_share')
显示模版中的视图
blog/templates/blog/post/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 %}
{% csrf_token %}
包含了自动生成的令牌,避免跨站点请求伪造(CSRF)
在blog/templates/blog/post/detail.html
{% endblock %}前面增加发送链接
<p>
<a href="{% url 'blog:post_share' post.id %}">
Share this post
</a>
</p>
帖子详情
发送测试
结果查看
页面展示结果
实际结果1
实际结果2
- 微信小程序与新零售相结合引流又出新方法啦!
- JAVA CDI 学习(2) - Scope 生命周期
- JAVA CDI 学习(3) - @Produces及@Disposes
- 3分钟带你学会git向github推送!
- JAVA CDI 学习(4) - @Alternative/@Default/@Any & Extension
- centos6.6 下安装mysql
- silverlight 4 tools for vs2010无法在vs2010 SP1上安装的解决办法
- find命令小结
- Python加圣诞帽
- 多次grep 没有看到输出
- java多线程 基础demo
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- mybatis 使用tips - 使用多个参数
- 从高的角度看自动化测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法