资讯专栏INFORMATION COLUMN

8-django——发送邮件和缓存

sumory / 1009人阅读

摘要:缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源。自带了一个健壮的缓存系统来保存动态页面,避免每次请求都重新计算。默认不会关闭连接尽可能重用连接。

发送邮件

概述:Django中内置了邮件发送功能,发送邮件需要使用SMTP服务,常用的免费服务器有:163、126、QQ

注册并登陆163邮箱

打开POP3/SMTP服务与IMAP/SMTP服务

重置授权密码

配置
#邮件发送
EMAIL_BACKEND="django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST="smtp.163.com"
EMAIL_PORT=25
#发送邮件的邮箱
EMAIL_HOST_USER="clement@163.com"
#邮箱的授权密码
EMAIL_HOST_PASSWORD="a12345678"
#收件人看到的发件人
EMAIL_FROM="DAI"
发送

send_mail(subject, message, from_email, recipient_list)

from django.conf import settings
from django.core.mail import send_mail
def sendMail(request):
    msg = "点击激活"
    send_mail("注册激活","",settings.EMAIL_FROM,["clement@163.com"],html_message=msg)
    return HttpResponse("邮件已发送")
缓存

概述:对于中等流量的网站来说,尽可能的减少开销是非常必要的。缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源。获取数据的数据的时候就是去缓存中拿,拿到了直接返回,没拿到就去数据库中查询,筛选,然后缓存到数据库, 然后返回给模板。

Django自带了一个健壮的缓存系统来保存动态页面,避免每次请求都重新计算。

Django提供了不同级别的缓存策略,可以缓存特定的视图的输出、可以仅仅缓存那些很难计算出来的部分、或者缓存整个网站

目的:优化数据结构;优化了对数据的查询;筛选,过滤;减少了对磁盘的IO

官方文档:https://docs.djangoproject.co...

设置缓存

通过设置决定把数据缓存在哪里,是数据库中、文件系统中还是内存中

默认缓存(内存)
CACHES={
    "default":{
        "BACKEND":"django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",
        "TIMEOUT":60
    }
}

参数TIMEOUT:缓存的默认过期时间,以秒为单位

默认为300秒

设置为None,表示永不过期

设置为0造成缓存立即失效

文件缓存
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "c:/foo/bar",
        "TIMEOUT":300,
    }
}
数据库缓存
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.db.DatabaseCache",
        "LOCATION": "my_cache_table",
        "TIMEOUT": "60",
        "KEY_PREFIX": "bbs",
        "VERSION": "1",
        "OPTIONS": {
            "MAX_ENTRIES": "300"
        }
    }
}

创建缓存表: python manage.py createcachetable

redis缓存

官网: http://django-redis-chs.readt...

redis操作文档:http://redisdoc.com

默认使用redis中的1数据库,但可以指定使用哪个db

安装pip install django-redis

配置
# ---配置Session和Cache---
CACHES={
    "default":{
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION":"127.0.0.1:6379/12", # 指定db12
        "TIMEOUT":60,
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",  # 指定连接Redis的客户端类
            # "PASSWORD": "mysecret",
             # "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
             # "SOCKET_TIMEOUT": 5,  # in seconds
             # "CONNECTION_POOL_KWARGS": {"max_connections": 100},
             # "CONNECTION_POOL_CLASS": "myproj.mypool.MyOwnPool",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

# --结束Session和Cache配置
参数 解释
SOCKET_CONNECT_TIMEOUT socket 建立连接超时设置
SOCKET_TIMEOUT 连接建立后的读写操作超时设置
CONNECTION_POOL_KWARGS 设置连接池的最大连接数量
CONNECTION_POOL_CLASS 自己的连接池子类
连接池

django-redis 使用 redis-py 的连接池接口, 并提供了简单的配置方式. 除此之外, 你可以为 backend 定制化连接池的产生。redis-py 默认不会关闭连接, 尽可能重用连接。

连接池概念

为什么使用连接池?

首先Redis也是一种数据库,它基于C/S模式,因此如果需要使用必须建立连接,稍微熟悉网络的人应该都清楚地知道为什么需要建立连接,C/S模式本身就是一种远程通信的交互模式,因此Redis服务器可以多带带作为一个数据库服务器来独立存在。假设Redis服务器与客户端分处在异地,虽然基于内存的Redis数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间,因为每次数据交互都需要先建立连接,假设一次数据交互总共用时30ms,超高性能的Redis数据库处理数据所花的时间可能不到1ms,也即是说前期的连接占用了29ms,连接池则可以实现在客户端建立多个链接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。

配置默认连接池

配置默认连接池很简单, 你只需要在 CACHES 中使用 CONNECTION_POOL_KWARGS 设置连接池的最大连接数量即可

你可以得知连接池已经打开多少连接:

from django.core.cache import get_cache
from django_redis import get_redis_connection

r = get_redis_connection("default")  # Use the name you have defined for Redis in settings.CACHES
connection_pool = r.connection_pool
print("Created connections so far: %d" % connection_pool._created_connections)

使用自己的连接池子类

有时你想使用自己的连接池子类. django-redis 提供了 CONNECTION_POOL_CLASS 来配置连接池子类

myproj/mypool.py

from redis.connection import ConnectionPool

class MyOwnPool(ConnectionPool):
    # Just doing nothing, only for example purpose
    pass
缓存的用法 单个view缓存

django.views.decorators.cache.cache_page装饰器用于对视图的输出进行缓存

from django.views.decorators.cache import cache_page

@cache_page(60 * 2)
def index(request):
    # return HttpResponse("sunck is a good man")
    return HttpResponse("sunck is a nice man")
参数:
timeout : 有效时长  # we"ve written it as 60 * 15 for the purpose of readability
cache: 缓存到哪一个库中;很少使用;针对于系统配置了多个缓存
       如: @cache_page(timeout=60, cache="filecache")
key_prefix: 前缀      
模板片段缓存

cache标签: 参数

缓存时间,以秒为单位

给缓存片段起名字

{#{% load static from staticfiles %}#}
{% load static %}
{% load cache %}



    
    主页

{#    #}
    


    

sunck is a nice man

{% cache 120 sunck %}

nice man

{% endcache %}
原生cache
from django.core.cache import cache
查看所有缓存的key: cache.keys("*")
设置:cache.set(键, 值, 有效时间)
获取:cache.get(键)
删除:cache.delete(键)
清空:cache.clear()
>>> cache.set_many({"a": 1, "b": 2, "c": 3})
>>> cache.getmany(["a","b","c"])
{"a": 1, "b": 2, "c": 3}
cache.delete_pattern("foo_*") # 全局通配符

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42003.html

相关文章

  • JavaMailSender实现邮箱注册验证

    摘要:前言使用邮箱注册验证,我们需要理清设计思路问题一注册信息提交后需要对填写的邮箱号发送邮件问题二邮件到达时用户如何进行激活,是通过请求还是获取验证码本篇使用接口激活问题三邮件激活如何设置有效时间通过以上三个问题,博主来帮助大家掌握邮箱验证问题 前言 使用邮箱注册验证,我们需要理清设计思路: 问题一:注册信息提交后需要对填写的邮箱号发送邮件 问题二:邮件到达时用户如何进行激活,是通过get...

    zeyu 评论0 收藏0
  • SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

    摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:a...

    kuangcaibao 评论0 收藏0
  • SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

    摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:a...

    binaryTree 评论0 收藏0
  • QQ邮箱是如何泄密的:JSON劫持漏洞攻防原理及演练

    摘要:下面就是对这种攻击原理的介绍以及预防方法。针对该漏洞的特点,通过覆盖数组构造函数以窃取暴露返回数组,而现在大多数浏览器还无法防范这种攻击。在上周的挪威开发者大会上,我做了一个针对劫持漏洞的演示。 注:作者发表这篇文章的时间较早,某些方法可能并不是最好的解决方案,但针对这种漏洞进行的攻击还依然可见,如早期的:QQMail邮件泄露漏洞。直到现在,你在某些邮箱打开一个外部链妆,依然会有安全警...

    khlbat 评论0 收藏0
  • 上线清单 —— 20 个 Laravel 应用性能优化项

    摘要:此问题称为查询问题。您将只执行两个查询而不是这是巨大的性能提升。这项工作是通过从数据库中执行查询完成的查询可能涉及到表以及其他的一些表。比如查询,视图,时间等等另一个非常酷的工具是,对应用,有优雅的调试助手的美称。 showImg(https://segmentfault.com/img/remote/1460000018339917?w=1280&h=722); 让我们开始吧!假若你...

    MadPecker 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<