码迷,mamicode.com
首页 > 其他好文 > 详细

django之session

时间:2019-02-04 18:00:54      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:print   报错   关闭   let   ftime   成功   django   delete   str   

与cookie不同的是,session是服务器技术,把数据存在服务器上。

 

技术图片

 

保存登陆状态信息和上次登陆时间

def login_session(request):
    if request.method == POST:
        user = request.POST.get(user)
        pwd = request.POST.get(pwd)

        user = UserInfo.objects.filter(user=user, pwd=pwd).first()

        if user:
            request.session[is_login] = True
            request.session[username] = user.user

            import datetime
            now = datetime.datetime.now().strftime(%Y-%m-%d %X)  # 记录上次登陆login-session的时间
            request.session[last_visit_time] = now

            ‘‘‘
            1.生成一个随机字符串  5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
            2.response.set_cookie(‘sessionid‘,5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
            3.在django_session表中创建一条记录:
                        session-key                                 session-data
                5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {‘is_login‘:True,‘username‘:edward}
            ‘‘‘

            return HttpResponse(登陆成功 )

    return render(request, login.html)

def index_session(request):
    # print(‘login‘,request.session[‘is_login‘])   找不到会报错 print(‘login‘, request.session.get(‘is_login‘))  # 找不到不会报错
    ‘‘‘
    1. request.COOKIE.get(‘session‘) 
    
    2. django-session表中过滤记录:
    
           session-key                               session-data
    5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {‘is_login‘:True,‘username‘:edward}
    
    obj = django-session.objects.filter(session-key=5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog).first
    
    3. obj.session-data.get(‘is_login‘)
    ‘‘‘

    is_login = request.session.get(is_login)
    if not is_login:
        return redirect(/login-session/)

    username = request.session.get(username)
    last_visit_time = request.session.get(last_visit_time)

    return render(request, index.html, {username: username, last_visit_time: last_visit_time})

 

session的更新操作

一个服务器和一个浏览器只用一个session_key来维持,如果更新了账号密码,不会创建新的session_key,只会更新session_key对应的session_data。

‘‘‘
if request.COOKIE.get(‘sessionid‘):
    更新

    在django-session表中更新一条记录:
        session-key                                 session-data
    5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog                    更新

else:
    1.生成一个随机字符串  5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
    2.response.set_cookie(‘sessionid‘,5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
    3.在django_session表中创建一条记录:
        session-key                                 session-data
    5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {‘is_login‘:True,‘username‘:edward}
            ‘‘‘

 

session的注销功能与session的配置参数

注销

 

def login_out(request):
    # del request.session[‘is_login‘]  # 只删除了一个键值,我们要做的是删除整条记录

    request.session.flush()
    ‘‘‘
    flush()做的三个操作
    
    1.random_str = request.COOKIE.get("sessionid")
    
    2.django-session.objects.filter(session-key=random_str).delete()
    
    3.response.delete_cookie("sessionid",path="/",random_str)   把cookie也删了
    ‘‘‘

    return redirect(/login/)

 

html

<a href="/login-out">注销 </a>

 

配置参数

django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
   
a. 配置 settings.py
   
    SESSION_ENGINE = django.contrib.sessions.backends.db   # 引擎(默认)
       
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
    SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
    SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
    SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)  如果设置为True了,每次访问都会往后推一天

 

django之session

标签:print   报错   关闭   let   ftime   成功   django   delete   str   

原文地址:https://www.cnblogs.com/lshedward/p/10351931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!