Pull to refresh
53
0

Software engineer

Send message

Немного критики (возможно даже конструктивной).


  • Хардкодить константы — не очень изящное решение. На мой взгляд, куда интереснее брать их из переменных окружения. Всё равно же через systemd запускаете.
  • По psycopg2 Вы не очень внимательно документацию почитали. В частности, вот тут (таких мест несколько, взял первое попавшееся):


    sql_string_find_username="""SELECT extern_uid FROM identities WHERE user_id = (SELECT user_id FROM keys WHERE id = %s);""" %user_key

    Вы наступаете на те самое грабли, про который документация не говорит, а кричит: Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.


  • Опять же, про psycopg2: задавать соединение можно очень красиво:


    conn = psycopg2.connect(dsn='postgres://user:password@host:5432/database')

    и да, зачем устанавливать соединение в обработчике строки? Мне кажется, что лучше создать одно соединение (или пул, не принципиально) при старте скрипта.
    К слову, и сам объект подключения psycopg2, и его курсор можно использовать как менеджер контекста. Код получается чище, плюс не надо париться о закрытии.


  • Запись в лог — вообще что-то странное :) комментировать не берусь.

А если субъективно, то такие штуки круче на баше писать. Получается куда выразительнее :)

И не надо пользователей призывать. Нехай вводят так, как им удобно. А нормализовывать — это наше дело, программерское.
Кроме того, вроде бы существуют инпуты соответствующего типа, специально для телефонов.
Мне почему-то кажется, что пользователи мобильных устройств будут поминать разработчиков таких композитных полей по матушке.
Не могу уяснить постановку задачи, виноват. Что-то типа такого?

{% thumbnail "x100" crop="100,100" as im%}
    <img src="{{ im.url }}">
{% endthumbnail %}
Пример приведите, что ли. Мне, каюсь, вообще сложно представить, что тумбам нужно кроме ресайза и кропа (и неважно, с сохранением пропорций или без).
Не очень представляю, как это — квадрат, у которого одна сторона ровно 100 пикселей, а другая — 100 или больше.
Как-то не очень я понимаю подход с дополнительным полем для каждого тумбнейла в модели.
По ссылке много букв сплошные хочуны на тему «было бы здорово», которые в принципе не решить без человеческого вмешательства. Ну, разве что реализовывать детекторы лиц.

А с простыми задачами — кропнуть, вписать целиком, вписать по ширине, вписать по высоте, отбить поля — с этим любые решения справляются, солр в том числе.
Прям чрезвычайно?
Если использовать кеширование, он ни разу медлительным не будет :-)

(старый комментарий стёр, т.к. ошибся веткой, извините)
Машинерия — это, грубо говоря, набор механизмов. В нашем случае — это набор классов джанги, ответственных за работу с формами (от генерации хтмл до собственно валидации)
А, ясно. На огонёк зашли, или так, потроллить? :-)
Кажется, разобрались. Мы говорим о разных вещах.

Для меня, как и, надеюсь, для большинства джанго-разработчиков, форма — это то, с чем работаем мы на сервер-сайде. То есть часть джанги. А не какой-то там html-код, за который должны отвечать верстальщики :-)
Именно что должна.

Но на клиентскую валидацию действительно полагаться нельзя, поэтому она (валидация) должна происходить на сервере. А JS, который всего лишь упрощает жизнь пользователю, должен всего лишь гонять от клиента серверу введённые данные и обратно, от сервера клиенту, решение сервера о том, верно ли всё заполнено.

Но как бы то ни было, задача валидации лежит целиком на машинерии формы.

P.S. На самом деле, в моделях тоже есть валидация, но это другой вопрос.
Что ж, у Вас есть право на личное мнение :-) Но оно не совпадает со мнением разработчиков джанги, которые считают, что

  • Check submitted data against a set of validation rules.
  • Convert submitted form data to the relevant Python data types.

вполне себе задачи форм (в самом начале, пп 2 и 4).

Я тоже считаю, что форма должна валидировать данные. Кстати, это не обязательно могут быть данные, пришедшие с HTTP, а что угодно, хотя бы пользовательский ввод:

data = {
    'name': raw_input("Enter your name: "),
    'age': raw_input("Enter your age: ")
}

form = Form(data)

if not form.is_valid():
    print "Something goes wrong"


и кстати, разве форма не является частью сервера приложений?

Именно этим форма и занимается.
Я правильно понимаю, что Вы предлагаете сделать что-то типа

if form.is_valid():
    if form.cleaned_data['start_date'] >= form.cleaned_data['end_date']:
        message.error('Неверный интервал') 
    else:
        form.save()


и считаете, что это не размазывание логики и не нарушение DRY?
А форма не этим занимается?
Вы уточните, пожалуйста, какой валидатор?
Я не понимаю, о чём Вы, Простите. О какой валидации данных речь?

Information

Rating
Does not participate
Registered
Activity