本章內(nèi)容:
- Django 發(fā)送郵件
- Django cookie
- Django session
- Django CSRF
Django 發(fā)送郵件
我們常常會用到一些發(fā)送郵件的功能,比如有人提交了應(yīng)聘的表單,可以向HR的郵箱發(fā)郵件,這樣,HR不看網(wǎng)站就可以知道有人在網(wǎng)站上提交了應(yīng)聘信息。今天我們嘗試用django發(fā)送郵件做嘗試
1、配置相關(guān)參數(shù)settings
往settings添加下面幾行數(shù)據(jù)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False
# 郵箱服務(wù)器
EMAIL_HOST = 'smtp.163.com'
# 端口號
EMAIL_PORT = 25
# 發(fā)件郵箱賬號
EMAIL_HOST_USER = 'zhangyanlin8851@163.com'
# 發(fā)件郵箱密碼
EMAIL_HOST_PASSWORD = '郵箱密碼'
# 發(fā)件人
DEFAULT_FROM_EMAIL = 'zhangyanlin<zhangyanlin8851@163.com>'
下面是一些常用的郵箱參數(shù):
- 163 郵箱
- 126 郵箱
- QQ 郵箱
2、官方事例
2.1、先看下官方給的例子
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False)
2.2、發(fā)送多個郵件
from django.core.mail import send_mass_mail
message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])
send_mass_mail((message1, message2), fail_silently=False)
3、發(fā)送郵件
from django.shortcuts import render,HttpResponse
from django.conf import settings
from django.core.mail import EmailMultiAlternatives
def email(request):
subject = '來自張巖林的問候'
text_content = '這是一封重要的郵件.'
html_content = '<p>這是一封<strong>重要的</strong>郵件.</p>'
from_email = settings.DEFAULT_FROM_EMAIL
msg = EmailMultiAlternatives(subject, text_content, from_email, ['75501664@qq.com'])
msg.attach_alternative(html_content, "text/html")
msg.send()
return HttpResponse('OK')
寫完這段代碼訪問以下相對應(yīng)得URL可以看看郵件有沒有發(fā)送成功喲
Django Cookie
1、獲取cookie
# 方式一
request.COOKIES['key']
# 方式二
request.COOKIES.get('key')
# 方式三
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
# 參數(shù):
default: 默認值
salt: 加密鹽
max_age: 后臺控制過期時間
2、設(shè)置cookie
rep = HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt ='加密鹽',...)
參數(shù):
key, 鍵
value='', 值
max_age=None, 超時時間
expires=None, 超時時間(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:跟路徑的cookie可以被任何url的頁面訪問
domain=None, Cookie生效的域名
secure=False, https傳輸
httponly=False 只能http協(xié)議傳輸,無法被JavaScript獲?。ú皇墙^對,底層抓包可以獲取到也可以被覆蓋)
Django Session
一、session使用
def index(request):
# 獲取、設(shè)置、刪除Session中數(shù)據(jù)
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在則不設(shè)置
del request.session['k1']
# 所有 鍵、值、鍵值對
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
# 用戶session的隨機字符串
request.session.session_key
# 將所有Session失效日期小于當(dāng)前日期的數(shù)據(jù)刪除
request.session.clear_expired()
# 檢查 用戶session的隨機字符串 在數(shù)據(jù)庫中是否
request.session.exists("session_key")
# 刪除當(dāng)前用戶的所有Session數(shù)據(jù)
request.session.delete("session_key")
二、session種類
Django中默認支持Session,其內(nèi)部提供了5種類型的Session供開發(fā)者使用:
- 數(shù)據(jù)庫(默認)
- 緩存
- 文件
- 緩存+數(shù)據(jù)庫
- 加密cookie
1、數(shù)據(jù)庫Session
Django默認支持Session,并且默認是將Session數(shù)據(jù)存儲在數(shù)據(jù)庫中,即:django_session 表中。
配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默認)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑(默認)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默認)
SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(默認)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(默認)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默認)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關(guān)閉瀏覽器使得Session過期(默認)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改之后才保存(默認)
2、緩存Session
配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的緩存別名(默認內(nèi)存緩存,也可以是memcache),此處別名依賴緩存的設(shè)置
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關(guān)閉瀏覽器使得Session過期
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改之后才保存
3、文件Session
配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir()
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關(guān)閉瀏覽器使得Session過期
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改之后才保存
4、緩存+數(shù)據(jù)庫Session
數(shù)據(jù)庫用于做持久化,緩存用于提高效率
配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5、加密cookie Session
配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
6、session自定義驗證登錄,裝飾器
def login(func):
def wrap(request, *args, **kwargs):
# 如果未登陸,跳轉(zhuǎn)到指定頁面
if request.path == '/index/':
return redirect('/login/')
return func(request, *args, **kwargs)
return wrap
Django CSRF
一、簡介
django為用戶實現(xiàn)防止跨站請求偽造的功能,通過中間件 django.middleware.csrf.CsrfViewMiddleware 來完成。而對于django中設(shè)置防跨站請求偽造功能有分為全局和局部。
全局:
中間件 django.middleware.csrf.CsrfViewMiddleware
局部:
- @csrf_protect,為當(dāng)前函數(shù)強制設(shè)置防跨站請求偽造功能,即便settings中沒有設(shè)置全局中間件。
- @csrf_exempt,取消當(dāng)前函數(shù)防跨站請求偽造功能,即便settings中設(shè)置了全局中間件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect
二、應(yīng)用
1、普通表單
veiw中設(shè)置返回值:
return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))
或者
return render(request, 'xxx.html', data)
html中設(shè)置Token:
{% csrf_token %}
2、ajax
view.py
from django.template.context import RequestContext
# Create your views here.
def test(request):
if request.method == 'POST':
print request.POST
return HttpResponse('ok')
return render_to_response('app01/index.html',context_instance=RequestContext(request))
index.html文章來源:http://www.zghlxwxcb.cn/news/detail-667281.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
{% csrf_token %}
<input type="button" onclick="Do();" value="Do it"/>
<script src="/static/plugin/jquery/jquery-1.8.0.js"></script>
<script src="/static/plugin/jquery/jquery.cookie.js"></script>
<script type="text/javascript">
var csrftoken = $.cookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
function Do(){
$.ajax({
url:"/app01/test/",
data:{id:1},
type:'POST',
success:function(data){
console.log(data);
}
});
}
</script>
</body>
</html>
注:原文出處http://www.cnblogs.com/wupeiqi/articles/5237704.html文章來源地址http://www.zghlxwxcb.cn/news/detail-667281.html
到了這里,關(guān)于Python學(xué)習(xí)筆記_進階篇(四)_django知識(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!