二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:Django Cookie处理
有时,您可能希望根据Web应用程序的要求,在每个站点访问者的基础上存储一些数据。请始终记住,Cookie保存在客户端,根据您的客户端浏览器安全级别,设置Cookie有时可以工作,有时可能不会。
为了说明Django中的cookie处理,让我们使用之前创建的登录系统创建一个系统。系统会让您在X分钟内登录,超出此时间后,您将不在应用内。
为此,您需要设置两个Cookie,last_connection和用户名。
首先,让我们更改我们的登录视图以存储我们的用户名和last_connection cookie -
from django.template import RequestContext def login(request): username = "not logged in" if request.method == "POST": #Get the posted form MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] else: MyLoginForm = LoginForm() response = render_to_response(request, 'loggedin.html', {"username" : username}, context_instance = RequestContext(request)) response.set_cookie('last_connection', datetime.datetime.now()) response.set_cookie('username', datetime.datetime.now()) return response从上面的视图可以看出,设置cookie是由响应而不是请求调用的 set_cookie 方法完成的,并且还要注意所有cookie值都以字符串形式返回。
现在让我们为登录表单创建一个formView,如果cookie已设置并且不超过10秒,那么我们将不会显示表单,
def formView(request): if 'username' in request.COOKIES and 'last_connection' in request.COOKIES: username = request.COOKIES['username'] last_connection = request.COOKIES['last_connection'] last_connection_time = datetime.datetime.strptime(last_connection[:-7], "%Y-%m-%d %H:%M:%S") if (datetime.datetime.now() - last_connection_time).seconds < 10: return render(request, 'loggedin.html', {"username" : username}) else: return render(request, 'login.html', {}) else: return render(request, 'login.html', {})正如你在上面访问你设置的cookie的formView中看到的,通过请求的COOKIES属性(dict)完成。
现在让我们更改url.py文件以更改URL,以便与我们的新视图配对 -
from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login'))当访问/ myapp / connection时,您会看到以下页面 -
提交时您将被重定向到以下屏幕 -
现在,如果您尝试在10秒范围内再次访问/ myapp / connection,则会直接重定向到第二个屏幕。如果您再次访问/ myapp /连接超出此范围,您将获得登录表单(屏幕1)。