使用django的Python会话框架
Sessions框架可以用来为网站中的匿名用户提供持久的行为。Sessions是Django用于你在每个网站访问者的基础上存储和检索数据的机制。Django使用一个包含特殊会话ID的cookie。
要在django中启用会话,你需要在settings.py中确认两件事。
1.MIDDLEWARE_CLASSES有’django.contrib.session.middleware.SessionMiddleware’激活。
2.INSTALLED_APPS中加入了’django.contrib.session’。
# Application definition
INSTALLED APPS = [
'dhun',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.securitY.SecuritYMiddleware',
'django.contrib.sessions.middleware.SessionMiddLeware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMidd1eware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
启用会话后,必须创建会话数据库表,为此运行以下命令。
python manage.py syncdb
在运行前面的命令后,如果没有发现任何错误,那么随后运行下面的命令,最终将保存在迁移文件中的变化反映到数据库中。
python manage.py migrate
现在一旦创建了会话,就必须对cookie进行测试。在views.py中,在index视图中设置测试cookie,并在你的about视图中测试该cookie。
from django.shortcuts import render
from django.http import HttpResponse
from .models import Album
def home(request) :
a = Album.objects.all()
return render(request, "dhun/home.html ", {"Album":a})
def index(request) :
num_authors = Author.objects.count()
request.session.set_test_cookie()
num_visits = request.session.get( 'num_visits', 0)
request.session ['num_visits'] = num_visits + 1
context ={
'num_books':num_books,
'num_instances':num_instances,
'num_instances available':num_instances_available,
'num_authors':num_authors,
'num_visits':num_visits,
}
def about(request):
LANGUAGE_CODE ='en-us '
TIME_ZONE ='UTC'
if request.session.test_cookie_worked():
print ("Cookie Tested !")
request.session.delete_test_cookie()
要看到到目前为止所做的工作。
- 首先通过这个命令运行localhost。
python manage.py runserver
- 然后在浏览器中打开http://localhost:8000/。
- 访问索引页面,然后访问关于页面。”Cookie已测试!”将被打印到控制台。
要知道网站被访问了多少次。你必须在views.py中做以下两件事。
1.添加并更新索引视图函数/li>中的代码。
2.更新关于视图的功能
from django.shortcuts import render
from django.http import HttpResponse
from .models import Album
def home(request):
a = AIbum. objects.all()
return render(request, "dhun/home.html", {"album":a})
def index(request):
visits = int(reques.COOKIES.get('visits', '0'))
response = HttpResponse(template.render(context))
if request.COOKIES.has_key('last_visit'):
last_visit = request. COOKIES [ ' last_visit']
last_visit_time = datetime.strptime(last_visit[:-7], "%Y-%m-%d %H:%M:%S") "
curr_time = datetime.now()
if (curr_time—last_visit_time).days > O:
response.set_cookie( 'visits ', visits + 1)
response. set_cookie( ' last_visit', datetime.now())
else :
response.set_cookie( ' last_visit', datetime.now())
return response
def about(request) :
context = RequestContext(request)
if request.COOKIES.has_key(' visits '):
v = request.COOKIES [' visits ']
else :
v = 0
return render_to_response('music/about.html', { 'visits':v}, context)