cookie中的实现错误

时间:2012-07-11 05:25:03

标签: python django linux ubuntu-10.04

更新:我已用图片更新了我的帖子,请立即查看我想要的内容:

我的front_page:

enter image description here

用户hase输入了' name'。

enter image description here

用户按下搜索后,用户即可获取列表和图表,但您可以看到“' name'更多地保留在搜索栏中,但我希望它在那里。

现在你问我了吗?

我的views.py文件代码:

#!/usr/bin/python 

from django.core.context_processors import csrf
from django.template import loader, RequestContext, Context
from django.http import HttpResponse
from search.models import Keywords
from django.shortcuts import render_to_response as rr
import Cookie

def front_page(request):

    if request.method == 'POST' :
        from skey import find_root_tags, count, sorting_list
        str1 = request.POST['word'] 
        str1 = str1.encode('utf-8')
        list = []
        for i in range(count.__len__()):
            count[i] = 0
        path = '/home/pooja/Desktop/'
        fo = open("/home/pooja/Desktop/xml.txt","r")

        for i in range(count.__len__()):

            file = fo.readline()
            file = file.rstrip('\n')
            find_root_tags(path+file,str1,i)    
            list.append((file,count[i]))

        for name, count1 in list:
            s = Keywords(file_name=name,frequency_count=count1)
            s.save()
        fo.close()

        list1 = Keywords.objects.all().order_by('-frequency_count')
        t = loader.get_template('search/front_page.html')
        c = RequestContext(request, {'list1':list1,
        })
        c.update(csrf(request))
        response = t.render(c)
        response.set_cookie('word',request.POST['word'])
        return HttpResponse(response)

    else :  
        str1 = ''
        template = loader.get_template('search/front_page.html')
        c = RequestContext(request)
        response = template.render(c)
        return HttpResponse(response)

我使用django搜索创建了一个应用程序,它搜索10个xml文档中的关键字,并返回每个文件的关键字出现频率,这些文件显示为xml文档的超链接列表及其各自的计数和图表。

在服务器上运行应用程序时,当用户在搜索栏中输入单词时,结果将完美地显示在同一页面上,但当用户按下搜索选项卡时,单词不会保留在搜索栏中。为了做到这一点,我已经使用了cookie,但它给出了错误

'SafeUnicode' object has no attribute 'set_cookie'

为什么呢?我是django的新手,所以请帮忙

2 个答案:

答案 0 :(得分:2)

我认为你想要使用cookies,这应该可以帮助你开始使用:https://docs.djangoproject.com/en/dev/topics/http/sessions/?from=olddocs/#using-cookie-based-sessions

然后我们有Django Cookies, how can I set them?

从根本上设置您需要的cookie:

 resp = HttpResponse(response)
 resp.set_cookie('word', request.POST['word'])

获取您只需要request.COOKIES['word']的Cookie或更安全的方法request.COOKIES.get('word', None)

from django.shortcuts import render_to_response
...

c = {}
c.update(csrf(request))
c.update({'list1':list1, 'word':request.POST['word']})
return render_to_response('search/front_page.html', 
               c,
               context_instance=RequestContext(request))
在模板上

,您应该更新搜索栏字段:

<input type="text" name="word" value="{{ word }}" />

请在有机会的时候浏览整个文档,是的,我知道它们非常广泛,但它们非常值得......

答案 1 :(得分:1)

您可以将其设置为:

,而不是response.set_cookie(...)
request.session['word'] = request.POST['word']

django处理其他事情。有关更多信息,请参阅How to use sessions