我在使用django测试session和cookie的时候出现一个session无法设置的错误:
我建议你看下那个settings.py中有个MIDDLEWARE_CLASSES,你的有可能是MIDDLEWARE 你注意看一下
cookies测试
def set_cookies(request):
response = HttpResponse('设置cookie')
response.set_cookie('num',1)
return response
def get_cookies(request):
num = request.COOKIES['num']
return HttpResponse(num)
session测试
def set_session(request):
request.session['username'] = 'smart'
request.session['age'] = 24
return HttpResponse('设置session')
def get_session(request):
username = request.session['username']
age = request.session['age']
return HttpResponse(username + '---'+ str(age))
有一个问题就是当我用ajax发送请求的时候,我们响应的时候应该用的JsonResponse,返回的是json数据,但是我们的cookie是设置在HttpResponse中的,但是不能两个同时都返回,我的想法是:将要返回的数据都放在一个对象中,然后返回给前端,通过前端设置到cookie中,这样解决。但是session是可以解决问题的,我只是讨论下cookie。
from django.shortcuts import render, redirect
from django.http import JsonResponse,HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def login(request):
# 1.获取传递过来的用户名和密码 从POST中获取数据就是request.POST.get('username')
username = request.POST.get('username')
password = request.POST.get('password')
remember = request.POST.get('remember')
# 2.校验用户名和密码
if username == 'admin' and password == '123':
response = HttpResponse()
# 如果选择了记住用户名 但是这个不知道怎么响应 能想到的办法就是响应回js 在js设置cookie
if remember == '1':
response.set_cookie('username', username, max_age=7 * 24 * 3600)
# 设置session 当我们输入了下次就不用输入了直接登录
request.session['isLogin'] = True
request.session['username'] = username
request.session['password'] = password
return JsonResponse({'res':1})
else:
return JsonResponse({'res':0})
def login_html(request):
if 'isLogin' in request.session:
return render(request,'testAjax/index.html','username':request.session['username']})
else:
return render(request,'testAjax/login.html',{'username':''})
def index(request,username):
return render(request,'testAjax/index.html',{'username':username})