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或者缓存中,那么他们将在过期后自动删除。