python3与django2.0登陆验证与保持登录状态

        python版本:python3.6

        django版本:2.0       

        最近想尝试写一个商城平台,刚开始的时候,用户不需要登录就可以在网站中逛商城,如果想登录也可以进行登录之后再逛商城。

       效果图如下:

  

刚开始的时候感觉登录验证肯定很简单啊,但是呢问题来了,我登录验证是成功了,但是当我继续浏览其他商城页面的时候,用户却没有保持登录状态,这个刚开始的时候,相信很多人也跟我一样,想到的是将用户名通过传值的方式来获取用户信息以达到用户保持登录状态的效果。这样做的话,你就会发现bug一大堆,能把整个人都搞懵。后来各种百度,发现可以用cookie传值。这里django的话就要谈到sessions了。

依赖于Cookie
所有请求者的Session都会存储在服务器中,服务器如何区分请求者和Session数据的对应关系呢?

答:在使用Session后,会在Cookie中存储一个sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sessionid后,会根据这个值找出这个请求者的Session。

结果:如果想使用Session,浏览器必须支持Cookie,否则就无法使用Session了。

存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置。
 

对象及方法
通过HttpRequest对象的session属性进行会话的读写操作。

1) 以键值对的格式写session。

request.session['键']=值
2)根据键读取值。

request.session.get('键',默认值)
3)清除所有session,在存储中删除值部分。

request.session.clear()
4)清除session数据,在存储中删除session的整条数据。

request.session.flush()
5)删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']
6)设置会话的超时时间,如果没有指定过期时间则两个星期后过期。

request.session.set_expiry(value)
如果value是一个整数,会话将在value秒没有活动后过期。
如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
如果value为None,那么会话永不过期。
 

这里我来贴上我的代码:

#登录功能
def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        #验证登录
        users = User.objects.filter(username=username, password=password)
        if username == '' or password =='':
            return render(request, 'login.html',{'message':'用户名和密码不能为空'})
        if users:
            # request.session['is_login'] = '1'
            request.session['username'] = users[0].username
            #设置保持登录时间  参数0表示Cookie将在用户的浏览器关闭时过期,None表示永不过期,整数表示在多少秒后过期
            request.session.set_expiry(0)
            return HttpResponseRedirect(request.POST.get('next', '/') or '/')
    return render(request, 'login.html',{'message':'用户名或密码错误'})

这里只需要这一行代码:

request.session['username'] = users[0].username
就等于是将用户的信息传给了cookie,然后在其他你想显示用户信息的地方获取用户名也只需要一行代码
context['username'] = request.session.get('username')

这样的话,用户如果没有登录,你只需要username的值就是None,你只需要在前端判断一下就行了。

好了,本次的python之坑就到这里,如果各位有什么不懂的地方,欢迎留言。

猜你喜欢

转载自blog.csdn.net/qq_41983562/article/details/88885276