1如下是登錄注冊和記住密碼的功能:
# -*- coding: utf-8 -*-
def cms_login(request):
if request.method == 'GET':
return render(request,'cms_login.html')
else:
form = LoginForm(request.POST)
if form.is_valid():
# user = UserModel(username=username)
# user.password == hash(password)
username = form.cleaned_data.get('username',None)
password = form.cleaned_data.get('password',None)
#if hash(password) == AuthorModel.objects.filter().first().password
user = authenticate(username=username,password=password)
if user and user.is_active:
login(request,user)
if remember:
request.session.set_expiry(None)
else:
request.session.set_expiry(0)
nexturl = request.GET.get('next')
# return redirect(reverse('cms_index'))
print 'nexturl=',nexturl
if nexturl:
return redirect(nexturl)
else:
return redirect(reverse('cms_index'))
else:
return render(request,'cms_login.html',{'errors':u'用戶名或密碼錯誤'})
else:
return render(request,'cms_login.html',{'errors':form.errors})
如何設置sessiond的過期時間:
session的有效期時間是通過request.session.set_expiry(value)進行設置的。
- 如果value是一個int類型,那么session將在value這個時間后過期,其中value代表的是秒。
- 如果value是一個datetime或者timedelta對象,那么這個session將在指定的時間后過期。datetime必須是使用了PickleSerializer進行序列化的。
- 如果value等於0,那么session將在web瀏覽器關閉后就直接過期。
- 如果value等於None,那么session將用settings.py中設置的全局過期字段SESSION_COOKIE_AGE,這個字段默認是14天,也就是2個禮拜。
- 讀session的時候不會修改session的有效期,修改session的時候會重新設置session的有效期,會從修改的時間,重新計時。
- 如果settings.py中設置了SESSION_EXPIRE_AT_BROWSER_CLOSE=True,那么默認講不再使用SESSION_COOKIE_AGE了,而是瀏覽器一關閉,session數據就會過期。這個值默認是為False。
session保存的設置:
session可以保存在文件,數據庫,緩存以及cookie中,要設置session的保存路徑,需要在settings.py中設置SESSION_ENGINE:
- 基於緩存的:django.contrib.sessions.backends.cache,如果設置緩存的,那么session中的所有數據將存儲在內存中。同時,需要在settings.py中配置CACHES,一般我們使用memcached作為緩存,通過以下代碼進行配置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211'
}
} - 基於文件存儲的:django.contrib.sessions.backends.file,那么需要配置SESSION_FILE_PATH來控制緩存的文件路徑。
- 基於cookie的:django.contrib.sessions.backends.signed_cookies,那么所有的session數據都會被保存在cookie中。
- 基於數據庫的:如果不配置SESSION_ENGINE,那么默認就是使用數據庫來作為存儲,如果需要顯示配置,那么配置項是django.contrib.sessions.backends.db。
- 基於數據庫+緩存的:django.contrib.sessions.backends.cached_db,這種情況,每次往緩存中寫數據的時候,都會同步到數據庫中,來做一個持久化。每次讀session數據的時候,都優先從緩存中查找,如果緩存中沒有這個值了,才從數據庫中查找。
如何清除sessions數據:
session默認只是過期,為了考慮到數據的需要,django並不會從數據庫或者文件中刪除,所以這個要運維人員或者后台管理人員手動的清除那些已經過期了的session,最快捷的方式是通過命令定時的刪除:python manage.py clearsessions,當然,如果backend是存儲在cookie或者緩存中,那么他們將在過期后自動刪除。