第七章:Django开发中cookie与session的使用

一、关于cookiesession的存在位置

  • 1、cookie存放在客户端
  • 2、session存在在服务器端

二、一般项目中做登录拦截

  • 1、在登录视图中验证用户名与密码是否正确
  • 2、在服务器端利用uuid生成一个唯一的字符串(取名sessionid)
  • 3、sessionid当做cookie的值发送到客户端
  • 4、sessionid在服务器端当做sessionkey,用户名当做value存放到服务器端的session
  • 5、页面重定向到主页
  • 6、主页中获取客户端的cookie获取到的就是刚刚定义的sessionid
  • 7、在服务器端读取session获取用户名
  • 8、如果用户名存在就显示主页,否则重定向到登录页面

    def index(request):
        sessionid = request.COOKIES.get('mysessionid',None)
        username = request.session.get(sessionid,None)
        if username:
            return render(request, 'book_index.html')
        else:
            return HttpResponseRedirect(reverse('login'))
    
    # 用户登录视图
    
    def login(request):
        if request.method == 'GET':
            return render(request,'login.html')
        elif request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')
            # 查询数据库,判断用户名与密码正确
            userModel = UserModel.objects.filter(username=username,password=password).first()
            if userModel:
                # 成功重定向到主页
                response = HttpResponseRedirect(reverse("book_index"))
                # 1.设置一个cookie发送到客户端
                sessionid = str(uuid4())
                response.set_cookie("mysessionid",sessionid)
                # 2.设置session的值
                request.session[sessionid] = userModel.username
                return response
            else:
                return HttpResponse(u'用户名与密码错误')

三、Django中处理cookiesession的方式

  • 1、利用自带的session,在登录成功的时候就把用户名与密码设置到session

    
    # 用户登录视图
    
    def login(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        elif request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')
            # 查询数据库,判断用户名与密码正确
            userModel = UserModel.objects.filter(username=username, password=password).first()
            if userModel:
                # 直接将用户名与密码设置到session中
                request.session['username'] = userModel.username
                request.session['password'] = userModel.password
                return HttpResponseRedirect(reverse("book_index"))
            else:
                return HttpResponse(u'用户名与密码错误')
        else:
            return HttpResponse(u'不被处理的请求')
  • 2、在主页面中可以获取到session

    def index(request):
        # 直接获取session 
        username = request.session.get('username', None)
        password = request.session.get('password', None)
        userModel = UserModel.objects.filter(username=username).first()
        if userModel and password == userModel.password:
            return render(request, 'book_index.html')
        else:
            return HttpResponseRedirect(reverse('login'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值