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

时间:2022-10-13 19:21:49

一、关于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'))