原生django-[项目]-session和cookies使用

一、概述

cookies:一般是在用户登录成功时,将一些用户信息随着响应response,一同返回给浏览器。之后浏览器会将根据IP地址,开辟一个存储空间,将用户数据存储到浏览器的存储空间中。cookies的数据是存储在浏览器中的,所以这些数据中不能含有用户敏感性的数据。

session:首先session是依赖于cookies的,会将系统生成session_id 随着响应response,存储到浏览器的存储空间中,存储在浏览器的session_id就是一个随机字符串,就像一把钥匙。真正的用户数据是存储在后端系统中的,django默认是存储在数据库表,通过cookies中的session_id这把钥匙,从数据库表中获取到对应的用户数据。

二、cookies和session的使用

cookies使用:

from django.contrib.auth.hashers import make_password, check_password
from django.http import JsonResponse
class LoginView(View):
    def post(self,request):
        user = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.Usermodel.objects.filter(user=user).first()
        if user_obj:
            is_true = check_password(password,user_obj.password)
            if is_true:
                response = JsonResponse({'code':200,'msg':'登录成功'})
                #设置cookies
                response.set_cookie('name',user)
                response.set_cookie('hobby',['惨','跳','rap'])
                #设置session
                request.session['user']=user
                return response
            else:
                return JsonResponse({'code':404,'msg':'密码错误'})
        else:
            return JsonResponse({'code':404,'msg':'用户不存在'})

def home(request):
    #去cookies,在request中取,浏览器中存储的用户数据,django会取出存到request中
    name = request.COOKIES.get('name')
    hobby = request.COOKIES.get('hobby)
    return HttpResponse('ok')

session的使用:

from django.contrib.auth.hashers import make_password, check_password
from django.http import JsonResponse
class LoginView(View):
    def post(self,request):
        user = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.Usermodel.objects.filter(user=user).first()
        if user_obj:
            is_true = check_password(password,user_obj.password)
            if is_true:
                response = JsonResponse({'code':200,'msg':'登录成功'})
                #设置cookies
                response.set_cookie('name',user)
                response.set_cookie('hobby',['惨','跳','rap'])
                #设置session,在session的中间件中,会生成session_id写到response中
                request.session['user']=user#会将session数据存到数据中
                return response
            else:
                return JsonResponse({'code':404,'msg':'密码错误'})
        else:
            return JsonResponse({'code':404,'msg':'用户不存在'})


def home(request):
    #取session,在request中取出来。
    user = request.session.get('user')
    obj = models.UserModelobjects,filter(user=user).first()
    if obj:
        name = obj.name
        age = obj.age
    name = request.COOKIES.get('name')
    hobby = request.COOKIES.get('hobby)
    return HttpResponse('ok')

三、session中间件的源码解析

session是存储在后端中,但需要session_id这把钥匙去把对应的数据取出来。

class SessionMiddleware(MiddlewareMixin):

    def process_request(self, request):
        #请求到路由控制前,执行该中间件
        #从request中将cookies中的session_id取出来,
        #通过session_id 这把钥匙,获取对应的session数据
        session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)
        request.session = self.SessionStore(session_key)
        #将session数据存储到request.session中
        #这就是为什么我们可以在视图函数中,通过request.session中获取用户信息

    def process_response(self, request, response):
        #视图函数响应后执行这个中间件函数
        #这里就是生成session_id, 一个session_id 对应一个数据库记录
        #session_id会存储到cookies中,最后存储到浏览器中
        return response

猜你喜欢

转载自blog.csdn.net/weixin_46371752/article/details/129232097
今日推荐