Python|使用 django 的会话框架
先决条件:Django 安装 | Django 简介
会话框架可用于为网站中的匿名用户提供持久行为。会话是 Django 使用的机制,用于基于每个站点访问者存储和检索数据。Django 使用包含特殊会话 ID 的 cookie。
要在 django 中启用会话,您需要确保settings.py
中的两件事:
- MIDDLEWARE_CLASSES已激活“django.contrib.sessions.middleware.SessionMiddleware”
- INSTALLED_APPS添加了“django.contrib.sessions”。
# 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中做以下两件事:
- 在索引视图函数中添加和更新代码 /li>
- 更新关于视图函数
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)
参考:https://docs.djangoproject.com/en/2.1/topics/http/sessions/