Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2009 09:16:12

baloo
От:
Зарегистрирован: 2008-05-13
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по базе - как передать параметры

Может быть, я не так понимаю смысл, и это надо сделать как-то иначе, может, существуют штатные средства поиска? В любом случае прошу не давать ссылку на тему “Поиск по базе” - я о другом.
В контроллере имеется функция вывода таблицы Contracts:

    def list(self):
page = request.params.get('page', 1)
contracts_q = meta.Session.query(Contracts)
##contracts = contracts_q.filter_by(nunitcode='0') ##без филиалов
contracts = contracts_q.filter(and_(Contracts.nunitcode =='0', Contracts.contract.like(u'И%')))
c.paginator = paginate.Page(
contracts,
page = page,
items_per_page=20,
url_args = c.url_args,
)
return render('contracts/list.mako')
Ну, на самом деле Contracts.contract.like(u'И%') просто для проверки как LIKE работает, в реале это должно передаваться через параметр.
Понятно, что весь список не нужен, раз уж мы ищем контракты по определенным критериям.
Там сверху таблицы есть два поля - ncont и contract. И кнопка search.
Проще говоря, вот кусок mako-шаблона:
<div id="findbar">
${h.form(h.url_for(controller='contracts', action='search'), method="get")}
Поиск:
№ договора: ${h.text(name='ncont', required=True, size=4, maxlength=4)}
Наименование: ${h.text(name='contract', required=True, size=40, maxlength=120)}
${h.submit(value=u"Поиск", name='submit')}
${h.end_form()}
</div>
Как видно, нажатие на кнопку поиска ведет на def search:
    def search(self, id=None):
"""Поиск по номеру договора или части названия"""
response.status_int = 302
response.headers['location'] = h.url_for(controller='contracts', action='list', id=None)
return "Moved temporarily"
Хочу, чтобы def search переводил на def list. Он, в принципе, переводит.
Непонятно следующее: КАК ПЕРЕДАТЬ ПАРАМЕТРЫ запроса (request.params) и как в функции list ими воспользоваться?
И еще небольшой (не главный) вопросец: зачем нужны строки
response.status_int = 302
и
return “Moved temporarily”
Спасибо



Офлайн

#2 Май 24, 2009 10:01:36

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по базе - как передать параметры

baloo
зачем нужны строки
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
и далее раздел 10.3 “Redirection 3xx” и его подраздел 10.3.3 “302 Found”.

Т.к. search не выдает никакой страницы сама, то это делается с помощью перенаправления. А для того, чтобы перенеправление сработало указывается соответствующий код и устанавливается поле заголовка ‘location’. Тогда клиент должен послать запрос на получение этого самого ‘location’, где и будут результаты поиска.

Но вот почему код указан 302 (Found), а клиенту выдается строка “Moved Permanently”, соответствующая коду 301 лично мне неясно. Может напутали: сначала было одно, потом поменяли код на 302, а строку забыли поменять.



Отредактировано (Май 24, 2009 10:03:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version