django 之cookie、session

cookie是存贮在本地浏览器的一些数据,这些可以数据一般与访问网站有关,比如大家时常访问某些网站,登录时会进行用户验证,验证成功后本地cookie可以存储一些数据,比如一个字符串,下一次用户在访问网站时,可以带着cookie中的这个字符串,网站服务器在请求中,找到这个字符串则认为用户已经登录,无须再次登录。cookie常备用来做用户验证已经多长时间免登录的操作,在django中,也有cookie的功能。如下

def login(request):
    if request.method=='POST':
        user_name=request.POST.get('name')
        user_pwd=request.POST.get('password')
        user=models.user.objects.filter(name=user_name)
        if len(user)==0:
            return redirect('/login/')
        else:
            user=user.first()
            if user.password==user_pwd:
                res=redirect('/home/')
                res.set_cookie('current_user',user_name)
                res.set_cookie('script','')
                #设置cookie键值对 设置cookie
                return res
            else:
                return redirect('/login/')
    else:
        return render(request,'login.html')

另外在另一端验证的时候则需要在cookie中取值。

def home(request):
    current_user=request.COOKIES.get('current_user','请登录')
    #通过cookie取值
    if current_user=='请登录':
       return render(request,'home.html',{'current_user':current_user})
    else:
        return render(request,'home2.html',{'current_user':current_user})

session与cookie相比更适合放一些私密的东西,session存储在服务器端。用户登录网站成功时,session会生成一个随机字符串,并将这个随机字符串保存在session中,在session内部生成一个键值对,其中以随机字符串为健,用户信息为对应的值。同时也会将随机字符串返回用户,用户将随机字符串存放在cookie里,下次用户登录cookie携带随机字符串,session通过随机字符串找到相对应用户信息进行用户验证。
在django中,上述这些已经为大家封装好,大家只需要调用就好如下。

def login(request):
    if request.method=='POST':
        user_name=request.POST.get('name')
        user_pwd=request.POST.get('password')
        user=models.user.objects.filter(name=user_name)
        if len(user)==0:
            return redirect('/login/')
        else:
            user=user.first()
            if user.password==user_pwd:
                #session设置值
                request.session['user']=user_name
                request.session['is_login']=True
                res=redirect('/home/')
                return res
            else:
                return redirect('/login/')
    else:
        return render(request,'login.html')

session取值

def home(request):
   if request.session.get('is_login',None):
       return render(request,'home.html')
    else:
        return render(request,'home2.html')

其中session取值时,request.session[‘is_login’]也可以取值,但是这个有一个隐患,也就是如果session中没有这个值则会报错。相对应情景为用户还从没有登录而我们去取用户信息,则取不到。而用get()则可以设置默认值,即取不到值得默认值。
此外cookie session也可以设置超时时间等。

你可能感兴趣的:(django)