Django项目bloguser之session会话

一,什么是session?

      session是一种会话保持技术。什么叫做会话保持呢?我举个例子,对讲机和打电话大概就是这个感觉了。浏览器请求服务器是无状态的,这是浏览器和服务器都遵守http协议决定的,浏览器和服务器的服务是使用socket套接字进行通信的,服务器将请求结果返回给浏览器后,会关闭当前的socket连接,并且销毁页面对象。所以用户每次使用浏览器给服务器请求时,都是新的请求。

     session将用户登陆的信息保存在cookie中,而session会在数据库中单独生成一个数据表。

     session与cookie   

     cookie常用于识别用户。cookie是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送cookie。  session通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。session变量存储单一用户的信息,并且对用于应用程序中的所有页面都是可用的。然而会话是临时的在用户离开网站后将被删除。session的工作机制是:为每个访客创建一个唯一的id(UID),并基于这个UID来储存变量。UID储存在cookie中,或者通过URL进行传导。

二,要解决登陆的问题,我们就要用到session。

       1,检查settings里的配置,一般情况下,软件会自动生成。

     INSTALLED_APPS=['django.contrib.sessions',]
     MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware',]
  2,在登陆成功和welcome的方法里引用session

            if len(blogUserSet)==1:

         #登录成功
         print(request.session)
         session=request.session
         blogUserSet=blogUserSet.first()
         session['user']={"username":blogUserSet.username,'id':blogUserSet.id}#或={"username":username}
         uri=session.get('uri','/welcome')
         session.pop('uri',None)
         return redirect(uri)
      
   def welcome(request):
       return render(request, 'welcome.html', {'user':request.session.get('user', None)})#{}里为请求作用域

3,做个测试,页面里有a和b两个超链接放在welcome的路径下。而a连接里的内容只有登陆的状态下才能查看,如果没登陆

就点击a,则会跳转去登陆界面。具体代码如下:

def a(request):
    if 'user' in request.session:
        return render(request,'bloguser/a.html',{})
    else:
        request.session['uri']=request.get_raw_uri()#uri调用登陆成功的
        return redirect(reverse('user:login'))

def b(request):
    return render(request,'bloguser/b.html',{})
a和b的路径写好就完了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值