深圳企业网站建设标准,腾度淄博网站建设,vs做网站,书签制作步骤1.状态保持 http协议是无状态的#xff1a;每次请求都是一次新的请求#xff0c;不会记得之前通信的状态客户端与服务器端的一次通信#xff0c;就是一次会话实现状态保持的方式#xff1a;在客户端或服务器端存储与会话有关的数据存储方式包括cookie、session#xff0c;… 1.状态保持 http协议是无状态的每次请求都是一次新的请求不会记得之前通信的状态客户端与服务器端的一次通信就是一次会话实现状态保持的方式在客户端或服务器端存储与会话有关的数据存储方式包括cookie、session会话一般指session对象使用cookie所有数据存储在客户端注意不要存储敏感信息推荐使用sesison方式所有数据存储在服务器端在客户端cookie中存储session_id状态保持的目的是在一段时间内跟踪请求者的状态可以实现跨页面访问当前请求者的数据注意不同的请求者之间不会共享这个数据与请求者一一对应 2.session 启用session 使用django-admin startproject创建的项目默认启用在settings.py文件中项INSTALLED_APPS列表中添加 django.contrib.sessions,
项MIDDLEWARE_CLASSES列表中添加 django.contrib.sessions.middleware.SessionMiddleware, 禁用会话删除上面指定的两个值禁用会话将节省一些性能消耗 使用session 启用会话后每个HttpRequest对象将具有一个session属性它是一个类字典对象get(key, defaultNone)根据键获取会话的值clear()清除所有会话flush()删除当前的会话数据并删除会话的Cookiedel request.session[member_id]删除会话 3 .用户登录示例 在views.py文件中创建视图 from django.shortcuts import render, redirect
from django.core.urlresolvers import reversedef index(request):uname request.session.get(uname)return render(request, booktest/index.html, {uname: uname})def login(request):return render(request, booktest/login.html)def login_handle(request):request.session[uname] request.POST[uname]return redirect(reverse(main:index))def logout(request):# request.session[uname] None# del request.session[uname]# request.session.clear()request.session.flush()return redirect(reverse(main:index)) 配置url 主url
from django.conf.urls import include, url
urlpatterns [url(r^, include(booktest.urls, namespacemain))
] 应用url
from django.conf.urls import url
from . import views
urlpatterns [url(r^$, views.index, nameindex),url(rlogin/$, views.login, namelogin),url(rlogin_handle/$, views.login_handle, namelogin_handle),url(rlogout/$, views.logout, namelogout)
] 创建模板index.html !DOCTYPE html
html
headtitle首页/title
/head
body
你好{{uname}}
hr/
a href{%url main:login%}登录/a
hr/
a href{%url main:logout%}退出/a
/body
/html 创建模板login.html !DOCTYPE html
html
headtitle登录/title
/head
body
form methodpost action/login_handle/input typetext nameuname/input typesubmit value登录/
/form
/body
/html # 通过用户登陆练习
# session练习def session1(request):uname request.session.get(myname, 未登录)context {uname: uname}return render(request, booktest/session1.html, context)def session2(request):context {}return render(request, booktest/session2.html, context)def session2_handle(request):uname request.POST[uname]request.session[myname] unamereturn redirect(/booktest/session1)def session3(request):# 删除session# request.session.flush()del request.session[myname]return redirect(/booktest/session1) View 4.会话过期时间 set_expiry(value)设置会话的超时时间如果没有指定则两个星期后过期如果value是一个整数会话将在values秒没有活动后过期若果value是一个imedelta对象会话将在当前时间加上这个指定的日期/时间过期如果value为0那么用户会话的Cookie将在用户的浏览器关闭时过期如果value为None那么会话永不过期修改视图中login_handle函数查看效果 def login_handle(request):request.session[uname] request.POST[uname]# request.session.set_expiry(10)# request.session.set_expiry(timedelta(days5))# request.session.set_expiry(0)# request.session.set_expiry(None)return redirect(reverse(main:index)) 5 5. 存储session 使用存储会话的方式可以使用settings.py的SESSION_ENGINE项指定基于数据库的会话这是django默认的会话存储方式需要添加django.contrib.sessions到的INSTALLED_APPS设置中运行manage.py migrate在数据库中安装会话表可显示指定为 SESSION_ENGINEdjango.contrib.sessions.backends.db 基于缓存的会话只存在本地内在中如果丢失则不能找回比数据库的方式读写更快 SESSION_ENGINEdjango.contrib.sessions.backends.cache 可以将缓存和数据库同时使用优先从本地缓存中获取如果没有则从数据库中获取 SESSION_ENGINEdjango.contrib.sessions.backends.cached_db session存放位置 6.使用Redis缓存session 会话还支持文件、纯cookie、Memcached、Redis等方式存储下面演示使用redis存储安装包 pip install django-redis-sessions 修改settings中的配置增加如下项 SESSION_ENGINE redis_sessions.session
SESSION_REDIS_HOST localhost
SESSION_REDIS_PORT 6379
SESSION_REDIS_DB 0
SESSION_REDIS_PASSWORD
SESSION_REDIS_PREFIX session 管理redis的命令 启动sudo redis-server /etc/redis/redis.conf
停止sudo redis-server stop
重启sudo redis-server restart
redis-cli使用客户端连接服务器
keys *查看所有的键
get name获取指定键的值
del name删除指定名称的键 session依赖于cookies 7.session总结 转载于:https://www.cnblogs.com/venicid/p/8289114.html