Django高级操作-分页-定义CVS-发送邮件
分页是指在web页面有大量数据需要显示,为了阅读方便在每个
页页中只显示部分数据。
优点:
1.方便阅读
2.减少数据提取量,减轻服务器压力。
Paginator对像
负责分页数据整体的管理
对象的构造方法
Paginator属性
Paginator方法
Paginator异常exception
page对象 定义
创建具体某一页的数据的管理
创建对象
Page对象方法
def test_page(request):
page_num = request.GET.get('page',1)
all_data = ['a','b','c','d','e']
#初始化paginator
paginator = Paginator(all_data,2)
#初始化 具体页码的page对象
c_page = paginator.page(int(page_num))
return render(request,'test_page.html',locals())
CSV文件定义
逗号分隔值(Comma- Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)说明:可被常见制表工具,如excel等直 接进行读取
python中生成CSV文件
import csv
with open('test_csv.csv','w',newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['a','b','c'])
writer.writerow(['d','e'])
csv文件下载
内建用户系统
基本模型操作 - 创建用户
1、创建普通用户create_user
2、创建超级用户create_superuser
基本模型操作 - 删除用户
基本模型操作 -校验密码
基本模型操作 -修改密码
基本模型操作 -登陆状态
基本模型操作 -登陆状态校验
基本模型操作 -登陆状态取消
思考:
内建用户表字段不够用怎么办?比如添加手机号字段。
内建用户表 - 扩展字段
方案1:通过建立新表,跟内建做1对1
方案2:继承 内建的抽象user模型类
内建用户表 - 继承内建抽象类
文件上传
定义: 用户可以通过浏览器将图片等文件传至网站
场景:
用户上传头像
上传流程性的文档【pdf,txt】
上传规范 - 前端【HTML】
{% csrf_token %}
上传规范 - 前端【Django】
视图函数中,用request.FILES取文件框的内容
file=request.FILES['XXX']
配置文件的访问路径和存储路径
MEDIA_URL和MEDIA_ROOT需要手动绑定
步骤:主路由中 添加路由
说明:等价于做了MEDIA_URL开头的路由,Django接到该特征请求后去MEDIA_ROOT路径查找资源
文件写入方案1:传统的open方式
文件写入方案1:传统的ORM方式
字段:FileField(upload='子目录名')
Django发送邮件
业务场景
业务告警、邮件验证、密码找回
邮件相关协议 - SMTP
SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议(25号 端口)。
它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转
属于“推送”协议
邮件相关协议 - IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件访问协议,是一个应用层协议(端口是143)
用来从本地邮件客户端(Outlook Express、Foxmail、 Mozilla Thunderbird等)访问远程服务器上的邮件。
属于“拉取”协议
邮件相关协议 - POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。
本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
属于“拉取”协议
IMAP VS POP3
两者均为“拉取”型协议,负责从邮件服务器中下载邮件
IMAP 具备摘要浏览功能,可预览部分摘要,再下载整个邮件
IMAP 为双向协议,客户端操作可反馈给服务器
POP3必须下载全部邮件,无摘要功能
POP3为单向协议,客户端操作无法同步服务器
Django发邮件
Django中配置邮件功能,主要为SMTP协议,负贡发邮件
原理:
给Django授权一-个邮箱
Django用该邮箱给对应收件人发送邮件
django.core.mail封装了电子邮件的自动发送SMTP协议
Django配置
#邮件相关配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 腾讯QQ邮箱 SMTP 服务器地址
EMAIL_PORT = 25 # SMTP服务的端口号
EMAIL_HOST_USER = '输入QQ邮箱' # 发送邮件的QQ邮箱
EMAIL_HOST_PASSWORD = '输入授权码' # 在QQ邮箱->设置->帐户->“POP3/IMAP......服务” 里得到的在第三方登录QQ邮箱授权码
函数调用
测试案例:
等待几秒钟就可以收到测试邮件
练习 - 邮件告警
利用中间件实现
class ExceptionMW(MiddlewareMixin):
def process_exception(self, request, exception):
print(exception)
print(traceback.format_exc())
mail.send_mail(
subject='mysite7报错啦~', message=traceback.format_exc(),
from_email='输入QQ邮箱',recipient_list=settings.EX_EMAIL)
return HttpResponse('---对不起 当前网页有点忙')
setting.py文件加上这条语句
EX_EMAIL = ['输入QQ邮箱']