Хочу сделать укорачиватель ссылок. Делаю на Python + Flask. С представительской частью проблем нет. Но вот с логикой есть. Я сейчас ищу материал о самом преобразовании длинной ссылки в короткую. Мои представления об этом 1) Получить сслыку (проблем нет) 2) Сгенерировать короткую версию (ПРОБЛЕМА) 3) Проверить наличие в БД (проблем нет) 4) Если нет - записать (проблем нет) 5) Отдать юзеру (проблем быть не должно) Подскажите плез алгоритмы генерации коротких версий ссылки.
не очень понятно что именно ты пытаешься сделать . если я правильно понял то сгеренировать короткую ссылку можно захешировав ее например в md5 . и потом брать из базы по хешу настоящую и подставлять ее. только вот зачем это все не очень пойму. но md5 это однонаправленное шифрование. если надо именно короткую отдавать то стоит посмотреть двунаправленные алгоритмы шифрования. насколько короткие хеши они генерируют. и расшифровывать потом на клиенте. только посмотреть насколько короткие хеши у них вот например js либа. шифруешь на питоне . разсшифровываешь на js. это если надо отдавать короткую. или например можно переписать все переходы по ссылкам с сайта и перенаправить их на твой обработчик который будет находить уже нужную ссылку и отправлять на нее. https://gist.github.com/jo/8619441
ID в базе + несколько символов, чтобы не подбирали id возможно в hex перегнать или еще какую-то систему исчесление > 10, тоже получим короткий результат
2) гугли хеширование - сделать преобразование ссылки по хешу, причем хеш не должен быть криптостойкий, поэтому длина хеша может быть 3-6 символов, то есть на выходе ссылка будет например yousite.ru/5zfdsw. - защита от совпадения хешей, простая проверка в базе по наличию схожей и последующему хешированию еще раз - для быстрой работы, база должна быть именно key:value хранилище
Code: import hashlib import time forEncode = ''.join('https://forum.antichat.ru/', str(time.time())) # Солю поступившие данные (URL), дабы хэши не повторялись encodeUrl = hashlib.md5(forEncode.encode('utf-8')).hexdigest() # Хэширую в md5 shortUrl = encodeUrl[:5] # Сохраняю первые 5 символов Дальше пиздуешь настраивать регулярку в конфигах, которая должна вызывать функцию обрабатывающую запрос на редирект, регулярка будет иметь логику *пять символов входящих в 0-9,a-z,A-Z* И не забудь, что есть такие урл на приложухи, как ftp://, tg://, ... Так что не зацикливайся на протоколе http/s, а бери в оборот и это
Ты меня тогда заинтересовал, тоже сделал xD, только чуть пошустрее и на джанге Чекнул твой код, много лишнего, не забывай что наткнувшись на первый return, выполнение последующего кода - прерывается. Отправил пулл реквест.
Нууу, я писал примерно неделю и в течении обучения. Да и начинал где то в начале июля. Когда появилась первая адекватная версия - выложил на гитхаб. А потом начал разбираться с API Спасибо за замечание. Я был бы очень благодарен, если бы весь мой код кто-то проверял) Надеюсь, что скоро устроюсь джуном. Ну а насчёт моего стиля, если он показался не очень - у меня есть привычка четко определять условия. По поводу return'ов - чекну от и до всю логику (всм routes.py), спасибо Ну а по поводу Джанги - мне после Фласка не понравилось. Мне кажется, что там слишком много всего. Я не хотел бы затачивать знания языка под один конкретный фреймворк, но пока что Фласк горячо любим, а Джанга не понят. Ещё раз спасибо за ревью