главный экран и автокомплит при наборе адреса на главной
This commit is contained in:
44
oknardia/web/autocomplete_addr.py
Executable file
44
oknardia/web/autocomplete_addr.py
Executable file
@@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
__author__ = 'Sergei Erjemin'
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import HttpResponseRedirect
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from oknardia.models import Building_Info
|
||||
# from time import clock
|
||||
import re
|
||||
import urllib
|
||||
|
||||
|
||||
def autocomplete_addr(request: HttpRequest) -> HttpResponse:
|
||||
""" Функция для автозаполнения формы выбора адреса. Получает методом GET переменную "term" и по ее образцу
|
||||
ищет доступные адреса в базе адреса из таблицы Building_Info
|
||||
|
||||
:param request: входящий http-запрос
|
||||
:return response: исходящий http-ответ
|
||||
"""
|
||||
# Для автозаполнения используется JQuery_UI: http://jqueryui.com/
|
||||
# Пример и инструкции по использованию: http://professorweb.ru/my/javascript/jquery/level4/4_5.php
|
||||
#
|
||||
# ВНИМАНИЕ ТЕХНИЧЕСКИЙ ДОЛГ,: Более навороченный, по описанию лучше подходящий компонент автозаполнения
|
||||
# https://www.devbridge.com/sourcery/components/jquery-autocomplete/ не заработал. Ну и хрен с ним!
|
||||
#
|
||||
# ВНИМАНИЕ ТЕХНИЧЕСКИЙ ДОЛГ: возможен "перегрев" при частом обращении -- [Errno 10053]
|
||||
# Предположительно из-за отсутсвия csrfmiddlewaretoken-серилизации Django. Проблема пофикусена(?) 2014-11-14
|
||||
# tStart = clock()
|
||||
if request.method == 'GET' and 'term' in request.GET:
|
||||
part_blocks = re.split(r"[,/;\s.\\:]+", str(request.GET['term']))
|
||||
if request.GET['use_filter'] == "only_known":
|
||||
q_autocomplete = Building_Info.objects.filter(kSeria_Link__kRoot_id__isnull=False)
|
||||
else:
|
||||
q_autocomplete = Building_Info.objects
|
||||
for i in part_blocks:
|
||||
q_autocomplete = q_autocomplete.filter(sAddress__icontains=i)
|
||||
q_autocomplete = q_autocomplete.all().order_by('sAddress')
|
||||
to_response = ""
|
||||
for i in q_autocomplete[:10]:
|
||||
to_response += '"' + i.sAddress + u'",'
|
||||
to_response = '[' + to_response[0:-1] + ']' # Убираем последнюю запятую
|
||||
return HttpResponse(to_response)
|
||||
else:
|
||||
return HttpResponseRedirect("/")
|
||||
@@ -1,3 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
import json
|
||||
import datetime
|
||||
|
||||
# Create your views here.
|
||||
# from django.core.context_processors import csrf
|
||||
|
||||
|
||||
def main_init(request: HttpRequest) -> HttpResponse:
|
||||
""" Главная страница (статичная, только с проверками куков)
|
||||
|
||||
:param request: входящий http-запрос
|
||||
:return response: исходящий http-ответ
|
||||
"""
|
||||
to_template = {} # словарь, для передачи шаблону
|
||||
num_viz = 0 # как будто первый визит
|
||||
template = "index.html" # шаблон
|
||||
# проверяем куки числа визита
|
||||
if "NumVisit" in request.COOKIES:
|
||||
# стоят куки, и это не первый визит
|
||||
num_viz = request.COOKIES["NumVisit"] # читаем число визитов
|
||||
num_viz = int(num_viz) + 1 # увеличиваем порядковый номер визитов
|
||||
# ПРОВЕРЯЧЕМ КУКИ ПРОСМОТРЕ ЦЕНОВЫХ ПРЕДЛОЖЕНИЙ
|
||||
if "LastVisit" in request.COOKIES:
|
||||
# стоят куки
|
||||
last_visit = json.loads(request.COOKIES["LastVisit"])
|
||||
last_visit2 = []
|
||||
for i in last_visit:
|
||||
last_visit2.append({
|
||||
"Time": datetime.datetime.fromtimestamp(i["Time"]),
|
||||
"LastURL": i["LastURL"],
|
||||
"LastAddress": i["LastAddress"],
|
||||
"LastApart": i["LastApart"]
|
||||
})
|
||||
to_template.update({'LAST_VISIT': last_visit2[:3]})
|
||||
else:
|
||||
to_template.update({'LAST_VISIT': None})
|
||||
to_template.update({'META_DOCUMENT_STATE': u"Static"}) # Эта страничка статичная (в шаблон)
|
||||
to_template.update({'NV': num_viz})
|
||||
# to_template.update(csrf(request)) # токен, для метода POST и GET
|
||||
response = render(request, template, to_template)
|
||||
response.set_cookie("NumVisit", num_viz, max_age=604800) # ставим или перезаписываем куки (неделя)
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user