概述:Django中內置了郵件發送功能,發送郵件須要使用SMTP服務,經常使用的免費服務器有:16三、12六、QQcss
#郵件發送 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<clement@163.com>'
send_mail(subject, message, from_email, recipient_list)
html
from django.conf import settings from django.core.mail import send_mail def sendMail(request): msg = '<a href="http://127.0.0.1:8000/index/">點擊激活</a>' send_mail("註冊激活","",settings.EMAIL_FROM,["clement@163.com"],html_message=msg) return HttpResponse("郵件已發送")
概述:對於中等流量的網站來講,儘量的減小開銷是很是必要的。緩存數據就是爲了保存那些須要不少計算資源的結果,這樣的話就沒必要在下次重複消耗計算資源。獲取數據的數據的時候就是去緩存中拿,拿到了直接返回,沒拿到就去數據庫中查詢,篩選,而後緩存到數據庫, 而後返回給模板。python
Django自帶了一個健壯的緩存系統來保存動態頁面,避免每次請求都從新計算。redis
Django提供了不一樣級別的緩存策略,能夠緩存特定的視圖的輸出、能夠僅僅緩存那些很難計算出來的部分、或者緩存整個網站算法
目的:優化數據結構;優化了對數據的查詢;篩選,過濾;減小了對磁盤的IO數據庫
官方文檔:https://docs.djangoproject.co...django
經過設置決定把數據緩存在哪裏,是數據庫中、文件系統中仍是內存中緩存
CACHES={ 'default':{ 'BACKEND':'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', 'TIMEOUT':60 } }
參數TIMEOUT:緩存的默認過時時間,以秒爲單位服務器
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
網絡
官網: 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
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 %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>主頁</title> {# <link rel="stylesheet" type="text/css" href="/static/css/index.css">#} <link rel="stylesheet" type="text/css" href="{% static 'css/index.css' %}"> </head> <body> <h1>sunck is a nice man</h1> {% cache 120 sunck %} <h1>nice man</h1> <!--<h1>good man</h1>--> {% endcache %} </body> </html>
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_*") # 全局通配符