1 Востаннє редагувалося Q-bart (18.11.2016 15:29:36)

Тема: Чи OK так робити?

Тож бувають такі моменти в мене з django, коли треба переробити форму під себе. Напр в є django contrib форма зміни паролю

from django.contrib.auth.forms import PasswordChangeForm

І мені треба було видалити всі labels, а натомість відобразити їх в placeholder`s. Я унаслідував цей клас і перевизначив метод __init__:

class CustomPasswordChangeForm(PasswordChangeForm):
    def __init__(self, *args, **kwargs):
        super(CustomPasswordChangeForm, self).__init__(*args, **kwargs)
        self.fields['old_password'].widget.attrs = {
            'placeholder': self.fields['old_password'].label + '*'
            }
        self.fields['new_password1'].widget.attrs = {
            'placeholder': self.fields['new_password1'].label + '*'
            }
        self.fields['new_password2'].widget.attrs = {
            'placeholder': 'Повторіть новий пароль'
            }
        self.fields['old_password'].label = ''
        self.fields['new_password1'].label = ''
        self.fields['new_password2'].label = ''
        self.fields['new_password1'].help_text = ''

Або треба додати кастомне поле Номер телефону в fieldset Personal info для моделі користувача:

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin


class UserAdmin(BaseUserAdmin):
    def __init__(self, *args, **kwargs):
        super(UserAdmin, self).__init__(*args, **kwargs)
        self.fieldsets[1][1]['fields'] += ('phone',)

admin.site.register(User, UserAdmin)

Ну от і питання: чи не бидлокод це? Чи можна так робити і чи буде це зрозуміло для всіх девів, які будуть працювати наб кодом після мене? Чи може є якісь кращі практики?

2

Re: Чи OK так робити?

та нормально, згодиться

3 Востаннє редагувалося ping (04.01.2017 09:37:50)

Re: Чи OK так робити?

чи ок так робити?

[print(x*x) for x in my_list]

тобто - чи припустимо використовувати подібним чином генерацію списків, нічому не присвоюючи результат?

4

Re: Чи OK так робити?

ping написав:

чи ок так робити?

[print(x*x) for x in my_list]

тобто - чи припустимо використовувати подібним чином генерацію списків, нічому не присвоюючи результат?

Навіть індуси так не пишуть. За таке можна виганяти з проекту. А стосовно джанго - ну таке, може й згодиться. У нас інший підхід - форми робляться виключно html кодом, а дані отримуються із request.POST (адже вміст форми передається пост-запитами).

Подякували: ping1

5

Re: Чи OK так робити?

Master_Sergius написав:
ping написав:

чи ок так робити?

[print(x*x) for x in my_list]

тобто - чи припустимо використовувати подібним чином генерацію списків, нічому не присвоюючи результат?

Навіть індуси так не пишуть. За таке можна виганяти з проекту.

дякую. про недопустимість - зрозумів.
якщо можна - поясніть - чому?
просто поганий стиль коду чи є якісь ризики серйозніші?

6

Re: Чи OK так робити?

ping написав:
Master_Sergius написав:
ping написав:

чи ок так робити?

[print(x*x) for x in my_list]

тобто - чи припустимо використовувати подібним чином генерацію списків, нічому не присвоюючи результат?

Навіть індуси так не пишуть. За таке можна виганяти з проекту.

дякую. про недопустимість - зрозумів.
якщо можна - поясніть - чому?
просто поганий стиль коду чи є якісь ризики серйозніші?

Якщо це чисто вивід (оце print як у вашому прикладі), то тоді це кака на 100%. Якщо ж це якась функція, яка робить обчислення щодо кожного елементу, то map буде швидше (крім випадків, коли в map запхати lambda). Коротше кажучи, list comprehension (як його чітко перекласти на нашу мову - досі не знаю :)) зазвичай застоcовується до створення списку за допомогою анонімних функцій, при цьому там навіть не треба писати саме слово lambda.

Подякували: ping1

7 Востаннє редагувалося Q-bart (04.01.2017 12:54:07)

Re: Чи OK так робити?

А стосовно джанго - ну таке, може й згодиться. У нас інший підхід - форми робляться виключно html кодом, а дані отримуються із request.POST (адже вміст форми передається пост-запитами).

Якщо ви маєте на увазі перше повідомлення.
А зберігати модел форм ручками? Метод is_valid() і потім .save() набагато легше ж.

8

Re: Чи OK так робити?

Q-bart написав:

А стосовно джанго - ну таке, може й згодиться. У нас інший підхід - форми робляться виключно html кодом, а дані отримуються із request.POST (адже вміст форми передається пост-запитами).

Якщо ви маєте на увазі перше повідомлення.
А зберігати модел форм ручками? Метод is_valid() і потім .save() набагато легше ж.

Так, ручками :)
Кажу ж, у нас інший підхід, максимальний контроль над всім, що відбувається. Наприклад, ті ж sql запити треба інколи руцями написати, оптимізувати, так би мовити. Наразі важко однозначно сказати, що краще, а що гірше. Треба все пробувати і багато раз, порівнювати і т.д. і т.п.

9

Re: Чи OK так робити?

Master_Sergius написав:
Q-bart написав:

А стосовно джанго - ну таке, може й згодиться. У нас інший підхід - форми робляться виключно html кодом, а дані отримуються із request.POST (адже вміст форми передається пост-запитами).

Якщо ви маєте на увазі перше повідомлення.
А зберігати модел форм ручками? Метод is_valid() і потім .save() набагато легше ж.

Так, ручками :)
Кажу ж, у нас інший підхід, максимальний контроль над всім, що відбувається. Наприклад, ті ж sql запити треба інколи руцями написати, оптимізувати, так би мовити. Наразі важко однозначно сказати, що краще, а що гірше. Треба все пробувати і багато раз, порівнювати і т.д. і т.п.

Навіщо тоді взагалі в джанго з коробки форми? Мені це нагадує чистий php, чесно.

10

Re: Чи OK так робити?

ping написав:

чи ок так робити?

[print(x*x) for x in my_list]

тобто - чи припустимо використовувати подібним чином генерацію списків, нічому не присвоюючи результат?

Це погано, бо список таки генерується — хоча всі елементи в ньому None, на самий список виділяється пам'ять, тому, якщо елементів багато, пам'яті на них теж піде багато, а виділення-звільнення пам'яті — операція відносно повільна.

Подякували: ping1