在视图函数中设置cookie值
以用户登录为例:
from django.urls import reverse
from django.shortcuts import render, redirect
class LoginView(Views):
def get(self, request):
if 'username' in request.COOKIES:
username = request.COOKIES['username']
checked = 'checked'
else:
username = ''
checked = ''
return render(request, 'login.html', {'username':username,'checked':checked})
def post(self, request):
username = request.POST.get('username')
remember = request.POST.get('checkBox')
response = redirect(reverse('goods:index')) # 获得一个HttpResponse对象
if remember == 'on':
response.set_cookie('username', username, max_age=7*24*3600)
else:
response.delete_cookie('username')
return response
当在用户名一栏输入含有中文字符时会报错:
这个错误表示框架试图把输入的中文字符编码成iso 8859-1格式,但是输入的中文字符并不在这个格式的支持范围内
·
其解决办法是:
在设置cookie值的时候手动将用户名进行字符串编码和iso-8859-1解码
而从cookie字典中获得该用户名时也需要手动将用户名进行iso-8859-1编码和字节流解码
代码实例:
from django.urls import reverse
from django.shortcuts import render, redirect
class LoginView(Views):
def get(self, request):
if 'username' in request.COOKIES:
username = request.COOKIES['username'].encode('iso-8859-1').decode('utf-8')
checked = 'checked'
else:
username = ''
checked = ''
return render(request, 'login.html', {'username':username,'checked':checked})
def post(self, request):
username = request.POST.get('username')
remember = request.POST.get('checkBox')
response = redirect(reverse('goods:index')) # 获得一个HttpResponse对象
if remember == 'on':
response.set_cookie('username', username.encode('utf-8').decode('iso-8859-1'), max_age=7*24*3600)
else:
response.delete_cookie('username')
return response
即在设置cookie值时:
response.set_cookie('username', username.encode('utf-8').decode('iso-8859-1'), max_age=7*24*3600)
在获取cookie中的值时:
username = request.COOKIES['username'].encode('iso-8859-1').decode('utf-8')