Итак, я давно хотел написать сайт знакомств, но мне не хотелось, чтобы он был таким же, как сотни других.
В результате стало понятно, что это должен быть не именно сайт знакомств, а скорее место, где можно найти интересных людей.
С другой стороны, я не хотел ограничиваться какой-то конкретной категорией людей, поэтому вариант создания тематического сайта не рассматривался.
Результат - это то, что вы можете увидеть связь .
Сразу можно обратить внимание на то, что никаких личных данных заполнять не предлагается.
Не потому, что их нужно заполнять после регистрации, а потому, что на сайте нет форм.
Анкет нет, потому что в них слишком много ограничений.
Обычно предлагается указать некий стандартизированный набор параметров с одинаковыми стандартизированными вариантами ответа.
Но как только вы захотите указать что-то другое или ответить как-то иначе, вы столкнетесь с тем, что такая возможность не предусмотрена (или она работает не так, как хотелось бы).
Под хаком я расскажу о том, что есть на этом сайте вместо анкет, а также, конечно, напишу о некоторых технических подробностях (куда бы мы без этого).
А вот, кстати, описание в «рекламном» стиле: Вы всегда хотели найти девушку, которая умеет программировать в Brainfuck? Или вам важно, что она сторонница адаптивной и семантической верстки? Или, может быть, вы хотите встретить человека, который легко сможет рассказать о различиях между микроядерным и монолитным, но при этом будет танцором? Теперь у вас есть такая возможность – если, конечно, она уже зарегистрирована на Background Dating. :) Вместо анкет на сайте есть ключевые фразы.
Каждая ключевая фраза представляет собой короткое высказывание от первого лица.
Вот некоторые примеры:
- Программирование на Лиспе
- Я играю в Подземелья и Драконы
- Я хожу в клуб Place
- Я пишу на Хабрахабре
- Я занимаюсь сетевой безопасностью
У пользователей также есть возможность искать сразу по нескольким интересующим ключевым фразам – в этом случае в результатах отображаются только те люди, которые добавили все указанные ключевые фразы (соответственно, если результат поиска пуст, то можно попробовать удалить некоторые из указанных ключевых фраз из запроса).
При вводе ключевых фраз работает автоподмена; соответственно, если кто-то из пользователей уже добавлял что-то подобное, то вам предлагается выбрать одну из ключевых фраз в списке.
Поскольку ключевые фразы могут быть о чем угодно, вы можете найти самых разных людей.
Если вдруг вас заинтересует человек, который, например, четко знает, для чего используется графин, то можно попробовать найти таких людей.
Таким образом, при достаточном количестве людей каждый пользователь имеет возможность познакомиться с теми, кто представляет для него наибольший интерес и чье прошлое ему больше всего симпатизирует. Сайт, кстати, работает на Django (язык Python).
Для передачи данных личных сообщений мы используем Веб-сокеты ( RFC 6455 ).
При сворачивании вкладок (кроме чата) соединение с сервером временно закрывается, чтобы не нагружать интернет-канал - это реализовано через API видимости HTML5 , а именно с помощью Видимость.
js печально известный Искин .
На стороне сервера поддержка вебсокетов реализована с помощью асинхронного неблокирующего сервера Tornado. Если кто захочет, готов поделиться исходным кодом и информацией о том, как его развернуть — в принципе, ничего сложного там нет. Для передачи сообщений между Django и Tornado (а также для хранения некоторых данных) используется Redis, который имеет отличную поддержку.
паб/саб .
Django использует стандартный клиент redis-py, а Tornado — асинхронный клиент. бруква .
Чтобы проверить файл (фото) на стороне клиента, используйте Файловый API .
Разрешение фотографии, однако, не проверялось - это может быть сделано , но я пока решил не усложнять, тем более, что на сервере все перепроверено.
Но тип и размер файла проверяются, что тоже хорошо.
Однако меня удивил один интересный факт — дело в том, что согласно спецификации File API атрибут type объекта, представляющего файл, должен содержать MIME-тип файла, согласно РФК 2046 , но браузеры не используют фактический тип файла, а генерируют его на основе существующего расширения.
Другими словами, возьмем файл MP3, скажем, file.mp3. Давайте посмотрим на MIME, используя команду file:
Теперь давайте удалим расширение и попробуем еще раз:$ file --mime-type file.mp3 file.mp3: audio/mpeg
$ file --mime-type file
file: audio/mpeg
Одинаковый.
Давайте попробуем другое расширение.
$ file --mime-type file.jpg
file.jpg: audio/mpeg
Так же.
Но у веб-браузеров другое мнение — в первом случае files[0].
type содержит строку audio/mpeg (как и ожидалось), во втором — пустую строку, а в третьем — уже image/jpeg. Опять же это не критично, потому что перепроверено на сервере, но все равно немного удивляет. Кстати, если вы действительно хотите убедиться, что тип файла проверен «по-настоящему», то вот это Может сделайте это вручную, через FileReader. Возможно, я сделаю больше позже.
Еще одна замечательная технология, которую я решил здесь использовать, — это Веб-хранилище .
Технология веб-хранилища изначально была частью спецификации HTML5, но позже была описана в отдельной спецификации.
С его помощью сайт сохраняет данные регистрационной формы в локальном хранилище браузера (localStorage) — прямо в момент ее заполнения пользователем.
То есть, если пользователь, например, уже указал какие-то ключевые фразы и собирался зарегистрироваться, а потом вдруг случайно закрыл вкладку (или браузер, или его компьютер вообще выключился), то при повторном посещении сайта он ему не придется добавлять эти ключевые фразы — они автоматически скачаются из локального хранилища и появятся в форме.
Сайт также использует адаптивную верстку, а потому им можно пользоваться с мобильных телефонов, планшетов и нетбуков - главное, чтобы у него был современный браузер (кстати, браузер по умолчанию в Android 4.2, к сожалению, пока не все поддерживает).
, но зато для Android есть Firefox, Opera Mobile и Chrome, там всё нормально).
Если кого-то интересуют какие-либо другие технические подробности (например, валидация на стороне сервера и обрезка фотографий или хотелось бы обсудить авторизацию по электронной почте в Django и изменения в версии 1.5), могу рассказать о них, например, в личной переписке.
.
И, конечно, если у вас есть идеи, как сделать пользование сайтом лучше/проще/удобнее, буду очень рад услышать их в комментариях.
Кстати, у меня есть несколько идей, которые, скорее всего, будет весьма интересно добавить, и если кто захочет, могу заранее о них рассказать.
Опять же, если у кого-то есть желание присоединиться к разработке (на данный момент я единственный работаю на этом сайте) - пишите.
Всем хорошего дня и интересных знакомств.
:) Теги: #Фоновые знакомства #общение #django #tornado #redis #websocket #занимаюсь пиаром
-
Бессознательный
19 Oct, 24 -
Это 1.1.6
19 Oct, 24 -
Проблема Родилась
19 Oct, 24 -
«Не Конкурент, Но Имеет Перспективы»
19 Oct, 24