Использование куки с питоном для хранения поисковых запросов - PullRequest
0 голосов
/ 28 мая 2009

Эй, у меня есть веб-страница для поиска в базе данных. Я хотел бы иметь возможность использовать cookie-файлы с использованием python для хранения того, что ищет пользователь, и предоставления ему недавно найденного поля по возвращении. Есть ли способ реализовать это с помощью библиотеки Cookie Python ??

Ответы [ 2 ]

1 голос
/ 28 мая 2009

Обычно мы делаем следующее.

  1. Используйте рамки.

  2. Установить сеанс. В идеале, попросите какое-нибудь имя пользователя. Если вы не хотите запрашивать имена или что-то еще, вы можете попытаться использовать IP-адрес браузера в качестве ключа для сеанса (это может превратиться в кошмар, но вы можете попробовать это).

  3. Используя идентификатор сеанса (имя пользователя или IP-адрес), сохраните результаты поиска в базе данных на своем сервере.

  4. Когда человек снова входит в систему, получает информацию о его запросах из локальной базы данных.

Мораль истории. Не доверяйте куки, чтобы иметь что-либо, кроме идентификации сеанса. И даже тогда он будет захвачен либо умышленно, либо случайно.

  • Преднамеренный угон - это способ, которым один человек изображает из себя другого.

  • Авария происходит, когда несколько человек используют один и тот же IP-адрес (поскольку они используют один компьютер).

0 голосов
/ 28 мая 2009

Для использования файлов cookie вы можете использовать любой API для файлов cookie, используемый вашей структурой.

Вот полный рабочий пример CherryPy для того, чтобы делать то, что вы хотите, сохранять результаты поиска и предоставлять их позже.

import cherrypy
import json

class Root(object):
    def index(self):
        last_search = cherrypy.request.cookie.get('terms', None)
        if last_search: 
            last_search = ','.join(json.loads(last_search.value))
        else:
            last_search = 'None'
        return """
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title>Search</title>
</head>
<body>
    <h1>Search</h1>
    <form action="do_search" method="get">
        <p>Please type your search terms: 
        <input type="text" name="query" /></p>
        <p>Hint: Last 5 used terms: %s</p>
        <p><input type="submit" value="Search &rarr;" /></p>
    </form>
</body>
""" % (last_search,)
    index.exposed = True

    def do_search(self, query):
        results = ['some', 'results', 'here', 'simulating', 'a', 'search']
        print cherrypy.request.cookie
        last_search = cherrypy.request.cookie.get('terms', None)
        if last_search:
            last_search = json.loads(last_search.value)[-4:] # get last 4
        else:
            last_search = []
        last_search.append(query) # append new term
        cherrypy.response.cookie['terms'] = json.dumps(last_search)
        return """
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title>Search</title>
</head>
<body>
    <h1>Search Results for %r</h1>
    <p>%s</p>
    <p><a href="%s">click here to search again</a>
    </p>
</body>
""" % (query, ', '.join(results), cherrypy.url('/'))
    do_search.exposed = True

application = cherrypy.tree.mount(Root(), '/')

if __name__ == '__main__':
    cherrypy.quickstart()

ПРИМЕЧАНИЯ:

Он использует json для сериализации списка и сохранения его в файле cookie в виде строки. Python json был представлен в python 2.6, поэтому, если он вам нужен до 2.6, то есть, если у вас нет 2.6, вы можете вместо этого использовать simplejson для запуска примера.

Извините за HTML в коде. В идеале это должно быть за пределами кода, в файле шаблона, с использованием механизма шаблонов, такого как jinja2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...