Пример #1
0
class UserEditForm(ModelForm):
    full_name = forms.CharField(
        label="Имя",
        required=True,
        max_length=128
    )
    avatar = ImageUploadField(
        label="Аватар",
        required=False,
        resize=(512, 512),
        convert_to="jpg",
    )
    city = forms.CharField(
        label="Город",
        required=True,
        max_length=120
    )
    country = forms.ChoiceField(
        label="Страна",
        choices=COUNTRIES,
        required=True
    )
    bio = forms.CharField(
        label="Краткая строчка о себе",
        required=False,
        max_length=256,
        widget=forms.Textarea(attrs={"maxlength": 256}),
    )
    company = forms.CharField(
        label="Компания",
        required=False,
        max_length=128
    )
    position = forms.CharField(
        label="Должность",
        required=True,
        max_length=128
    )
    email_digest_type = forms.ChoiceField(
        label="Подписка на дайджест",
        required=True,
        choices=User.EMAIL_DIGEST_TYPES,
        initial=User.EMAIL_DIGEST_TYPE_WEEKLY,
        widget=forms.RadioSelect(),
    )

    class Meta:
        model = User
        fields = [
            "full_name",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "email_digest_type",
        ]
Пример #2
0
class UserEditForm(ModelForm):
    full_name = forms.CharField(
        label="Имя",
        required=True,
        max_length=128
    )
    avatar = ImageUploadField(
        label="Обновить аватар",
        required=False,
        resize=(512, 512),
        convert_to="jpg",
    )
    city = forms.CharField(
        label="город",
        required=True,
        max_length=120
    )
    country = forms.ChoiceField(
        label="Страна",
        choices=COUNTRIES,
        required=True
    )
    bio = forms.CharField(
        label="Ссылочки на себя и всякое такое",
        required=False,
        max_length=256,
        widget=forms.Textarea(attrs={"maxlength": 256}),
    )
    company = forms.CharField(
        label="Компания",
        required=False,
        max_length=128
    )
    position = forms.CharField(
        label="Должность или что вы делаете",
        required=True,
        max_length=128
    )
    contact = forms.CharField(
        label="Контакт для связи",
        required=False,
        max_length=256,
    )

    class Meta:
        model = User
        fields = [
            "full_name",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "contact",
        ]
Пример #3
0
class UserAdminForm(forms.Form):
    add_hat = forms.BooleanField(label="Выдать новую шапку", required=False)
    new_hat = forms.ChoiceField(
        label="Выбрать из популярных",
        choices=[(None, "---")] + [(key, value.get("title"))
                                   for key, value in HATS.items()],
        required=False,
    )
    new_hat_name = forms.CharField(label="Создать новый титул",
                                   max_length=48,
                                   required=False)
    new_hat_icon = ImageUploadField(
        label="Иконка",
        required=False,
        resize=(256, 256),
    )
    new_hat_color = forms.CharField(label="Цвет",
                                    initial="#000000",
                                    max_length=16,
                                    required=False)
    remove_hat = forms.BooleanField(label="Удалить текущую шапку",
                                    required=False)

    add_achievement = forms.BooleanField(label="Выдать новую ачивку",
                                         required=False)
    new_achievement = forms.ChoiceField(
        label="Выбрать",
        choices=[(None, "---")] + [(key, value.get("title"))
                                   for key, value in ACHIEVEMENTS.items()],
        required=False,
    )

    is_banned = forms.BooleanField(label="Забанить", required=False)
    ban_days = forms.IntegerField(label="Бан истечет через N дней",
                                  initial=5,
                                  required=False)
    ban_reason = forms.CharField(label="Причина бана",
                                 max_length=128,
                                 required=False)

    is_rejected = forms.BooleanField(label="Размодерирвать", required=False)
Пример #4
0
class UserIntroForm(ModelForm):
    slug = forms.CharField(
        label="Никнейм",
        required=True,
        max_length=32,
        min_length=3,
        widget=forms.TextInput(attrs={
            "pattern": "[A-Za-z0-9_-]+",
            "minlength": 3,
        }),
    )
    full_name = forms.CharField(
        label="Имя",
        required=True,
        max_length=128
    )
    email = forms.EmailField(
        label="E-mail",
        required=True
    )
    avatar = ImageUploadField(
        label="Аватар",
        required=False,
        resize=(512, 512),
        convert_to="jpg",
    )
    city = forms.CharField(
        label="Город",
        required=True,
        max_length=120
    )
    country = forms.ChoiceField(
        label="Страна",
        choices=COUNTRIES,
        required=True
    )
    bio = forms.CharField(
        label="Краткая строчка о себе",
        required=False,
        max_length=512,
        widget=forms.Textarea(attrs={"maxlength": 512}),
    )
    company = forms.CharField(
        label="Компания",
        required=False,
        max_length=128
    )
    position = forms.CharField(
        label="Должность",
        required=True,
        max_length=128
    )
    intro = forms.CharField(
        label="#intro",
        required=True,
        widget=forms.Textarea(
            attrs={
                "maxlength": 10000,
                "minlength": 400,
                "placeholder": "Расскажите Клубу о себе...",
            }
        ),
    )
    email_digest_type = forms.ChoiceField(
        label="Подписка на дайджест",
        required=True,
        choices=User.EMAIL_DIGEST_TYPES,
        initial=User.EMAIL_DIGEST_TYPE_WEEKLY,
        widget=forms.RadioSelect(),
    )
    privacy_policy_accepted = forms.BooleanField(
        label="Даю согласие на обработку своих персональных данных", required=True
    )

    class Meta:
        model = User
        fields = [
            "slug",
            "full_name",
            "email",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "email_digest_type",
        ]

    def clean_slug(self):
        slug = self.cleaned_data["slug"]
        slug = str(slug).strip()

        if slug:
            if not re.match(r"^[a-zA-Z0-9-_]+$", slug):
                raise ValidationError("В нике использованы недопустимые знаки")

            is_exists = (
                User.objects.filter(slug__iexact=slug)
                    .exclude(id=self.instance.id if self.instance else None)
                    .exists()
            )

            if not is_exists:
                return slug

        raise ValidationError("Пользователь с таким ником уже существует. Выберите другой")
Пример #5
0
class UserIntroForm(ModelForm):
    slug = forms.CharField(
        label="Никнейм",
        required=True,
        max_length=32,
        min_length=3,
        widget=forms.TextInput(attrs={
            "pattern": "[A-Za-z0-9_-]+",
            "minlength": 3,
        }),
    )
    full_name = forms.CharField(label="Имя", required=True, max_length=128)
    email = forms.EmailField(label="E-mail", required=True)
    avatar = ImageUploadField(label="Аватар",
                              required=False,
                              resize=(512, 512))
    city = forms.CharField(label="Город", required=True, max_length=120)
    country = forms.ChoiceField(label="Страна",
                                choices=COUNTRIES,
                                required=True)
    bio = forms.CharField(
        label="Краткая строчка о себе",
        required=False,
        max_length=512,
        widget=forms.Textarea(attrs={"maxlength": 512}),
    )
    company = forms.CharField(label="Компания", required=False, max_length=128)
    position = forms.CharField(label="Должность",
                               required=True,
                               max_length=128)
    intro = forms.CharField(
        label="#intro",
        required=True,
        widget=forms.Textarea(
            attrs={
                "maxlength":
                5000,
                "class":
                "markdown-editor-invisible",
                "placeholder":
                "Писать о себе всегда сложно, так что вот какой план:"
                "\n\n- Расскажите чем вы занимаетесь и где сейчас работаете?"
                "\n- Из какого вы города и как там оказались?"
                "\n- Что делаете в свободное от работы время?"
                "\n- Может у вас есть странная привычка или хобби?"
                "\n- О чем вы мечтаете?"
                "\n- Какой из последних постов Вастрика вам понравился больше всего?",
            }),
    )
    email_digest_type = forms.ChoiceField(
        label="Подписка на дайджест",
        required=True,
        choices=User.EMAIL_DIGEST_TYPES,
        initial=User.EMAIL_DIGEST_TYPE_WEEKLY,
        widget=forms.RadioSelect(),
    )
    privacy_policy_accepted = forms.BooleanField(
        label="Даю согласие на обработку своих персональных данных",
        required=True)

    class Meta:
        model = User
        fields = [
            "slug",
            "full_name",
            "email",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "email_digest_type",
        ]

    def clean_slug(self):
        slug = self.cleaned_data["slug"]
        slug = str(slug).strip()

        if slug:
            if not re.match(r"^[a-zA-Z0-9-_]+$", slug):
                raise ValidationError("В нике использованы недопустимые знаки")

            is_exists = (User.objects.filter(slug__iexact=slug).exclude(
                id=self.instance.id if self.instance else None).exists())

            if not is_exists:
                return slug

        raise ValidationError(
            "Пользователь с таким ником уже существует. Выберите другой")
Пример #6
0
class PostProjectForm(PostForm):
    title = forms.CharField(
        label="Название проекта",
        required=True,
        max_length=128,
        widget=forms.TextInput(attrs={"placeholder": "Название проекта 🏗"}),
    )
    url = forms.URLField(
        label="Ссылка на страницу проекта 👇",
        required=True,
        widget=forms.TextInput(attrs={"placeholder": "https://"}),
    )
    image = ImageUploadField(
        label="Скриншот или иконка",
        required=True,
        resize=(1024, 1024),
    )
    text = forms.CharField(
        label="Описание",
        required=True,
        initial="🤗 Расскажите здесь все подробности о вашем проекте.\n\n "
                "Этот текст можете смело удалять. Он здесь лишь для того, чтобы помочь вам с проблемой чистого листа "
                "и задать базовую структуру. Главное — чтобы это было полезно. "
                "Можете добавлять или изменять вопросы, чтобы они лучше описывали ваш случай.\n\n"
                "### Расскажите о себе и сути проекта?\n\n\n\n"
                "### Как появилась идея? Что вдохновило?\n\n\n\n"
                "### Что вошло в прототип и сколько времени на него было потрачено?\n\n\n\n"
                "### Какой технологический стек вы использовали? Почему?\n\n\n\n"
                "### Как вы запускались и искали первых пользователей?\n\n\n\n"
                "### С какими самыми неожиданными трудностями пришлось столкнуться?\n\n\n\n"
                "### Сколько потратили и заработали? Есть идеи как это можно монетизировать?\n\n\n\n"
                "### Какие планы на будущее?\n\n\n\n"
                "### Нужны ли какие-то советы или помощь Клуба?\n\n\n\n"
                "### Какой совет вы бы сами могли дать идущим по вашим стопам?\n\n",
        max_length=500000,
        widget=forms.Textarea(
            attrs={
                "maxlength": 500000,
                "class": "markdown-editor-full",
                "placeholder": "Расскажите подробности о вашем проекте!"
                               "\n- В чем его суть и как он помогает людям?"
                               "\n- Как появилась идея?"
                               "\n- Какой технический стек вы использовали?"
                               "\n- С какими самыми неожиданными трудностями вы столкнулись?"
                               "\n- Сколько в итоге потратили и заработали?"
                               "\n- Нужны ли какие-то советы или помошь Клуба?"
            }
        ),
    )

    class Meta:
        model = Post
        fields = [
            "title",
            "text",
            "topic",
            "url",
            "image",
            "is_visible",
            "is_public"
        ]