Exemplo n.º 1
0
class UserAdmin(BaseUserAdmin):
    fieldsets = BaseUserAdmin.fieldsets + (
        (None, {
            'fields': (
                'avatar',
                'about',
                'city',
            )
        }),
        (_ul('Ключи'), {
            'fields': (
                'reset_password_key',
                'registration_key',
            )
        }),
        (_ul('Подписка'), {
            'fields': (
                'is_subscribe',
                'date_subscribe',
            )
        }),
    )
    readonly_fields = (
        'reset_password_key',
        'registration_key',
    )
    list_display = BaseUserAdmin.list_display + (
        'is_active',
        'is_subscribe',
    )
Exemplo n.º 2
0
class CategoryAdmin(GenericModelAdmin):
    list_display = (
        'name',
        'is_published',
        GenericModelAdmin.site_url,
    )
    list_filter = (
        'is_published',
        'categorytype'
    )
    fieldsets = (
        (None, {
            'fields': (
                'name',
                'description',
                'categorytype',
                'image_class',
            )
        }),
        (_ul(u'Доступ'), {
            'fields': (
                'is_published',
            )
        }),
        (_ul(u'Seo'), {
            'fields': (
                'slug',
                'seo_title',
                'seo_description',
                'seo_keywords',
                'seo_author'
            )
        }),
    )
    search_fields = ('name', 'description',)
Exemplo n.º 3
0
class PollItem(GenericDateModel):
    poll = models.ForeignKey(
        Poll,
        verbose_name=_ul('Опрос'),
        related_name="items",
        on_delete=models.CASCADE)
    rate = models.IntegerField(
        verbose_name=_ul('Кол-во за'),
        default=0)
    answer = models.CharField(
        verbose_name=_ul('Ответ'),
        max_length=255)

    @property
    def rate_percentage(self):
        total = sum(self.poll.items.all().values_list('rate', flat=True))
        if total:
            return int(float(self.rate * 100) / float(total))
        return 0

    def vote_action(self, session):
        if self.poll.has_session_key(session, 'pollitem_vote', setup=True):
            return
        self.rate += 1
        self.save(update_fields=('rate',))

    class Meta:
        verbose_name = _ul('Ответ')
        verbose_name_plural = _ul('Ответы')

    def __str__(self):
        return u'%s' % self.answer
Exemplo n.º 4
0
class Partner(models.Model):
    name = models.CharField(verbose_name=_ul('Партнерка'),
                            max_length=255,
                            help_text=_ul('Название партнерки'))

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _ul('Партнерка')
        verbose_name_plural = _ul('Партнерки')
Exemplo n.º 5
0
class PasswordChangeForm(BootstrapForm):
    password = forms.CharField(max_length=255,
                               widget=forms.PasswordInput(),
                               label=_ul('Ваш новый пароль'))
    confirm_password = forms.CharField(max_length=255,
                                       widget=forms.PasswordInput(),
                                       label=_ul('Повторите ваш новый пароль'))

    def clean_confirm_password(self):
        if not self.cleaned_data['password'] == self.cleaned_data[
                'confirm_password']:
            raise forms.ValidationError(_ul('Пароли не совпадают.'))
        return self.cleaned_data['confirm_password']
Exemplo n.º 6
0
class CommentAdmin(GenericModelAdmin):
    search_fields = ('comment', 'author_username', 'author__username')
    list_display = (
        'comment',
        'creation_date',
        'author_username',
        'is_published',
        'is_spam',
        GenericModelAdmin.site_url,
    )
    list_filter = (
        'is_spam',
        'is_published',
    )
    list_editable = (
        'is_spam',
        'is_published',
    )
    fieldsets = (
        (None, {
            'fields': (
                'comment',
            )
        }),
        (_ul(u'Доступ'), {
            'fields': (
                'is_published',
                'is_spam'
            )
        }),
        (_ul(u'Голосование'), {
            'fields': (
                'rate',
            )
        }),
        (_ul(u'Связи'), {
            'fields': (
                'parent',
                'post',
            )
        }),
        (_ul(u'Автор'), {
            'fields': (
                'author',
                'author_username',
                'ip_address',
            )
        }),
    )
    readonly_fields = ('parent', 'post', 'author', 'author_username')
Exemplo n.º 7
0
Arquivo: api.py Projeto: DO2016/mysite
 def _send_email(self, bundle, user):
     token_url = "%s://%s/#confirm/%s/%s/" % (
         bundle.request.scheme, 
         bundle.request.get_host(),
         user.api_key.key,
         user.username
     )
     send_mail(
         _ul(u'Account confirmation'), 
         _ul(u'Go to %s for complete registration') % token_url, 
         settings.EMAIL_HOST_USER,
         [user.email], 
         fail_silently=False
     )
Exemplo n.º 8
0
class Store(models.Model):
    """Model for store."""

    name = models.CharField(max_length=200, verbose_name=_ul('Name'))
    address = models.ForeignKey('webstore.StoreAddress',
                                verbose_name=_ul('Address'))

    def __str__(self):
        """String representation of store model."""
        return '<{model_name}#{id}: {name}>'.format(
            model_name=self.__class__.__name__,
            id=self.id,
            name=self.name,
        )
Exemplo n.º 9
0
class UserForm(BootstrapModelForm):
    username = forms.EmailField(label=_ul('Логин'))
    nickname = forms.CharField(label=_ul('Ник'))

    class Meta:
        model = User
        fields = (
            'username',
            'nickname',
            'first_name',
            'last_name',
            'avatar',
            'city',
            'about',
        )
Exemplo n.º 10
0
class GenericDateModel(models.Model):
    creation_date = models.DateTimeField(verbose_name=_ul('Дата создания'),
                                         auto_now_add=True)
    modification_date = models.DateTimeField(
        verbose_name=_ul('Дата изменения'), auto_now=True)

    def has_session_key(self, session, key, setup=False):
        key = key + '_%s' % self.id
        result = session.get(key, False)
        if setup:
            session[key] = True
        return result

    class Meta:
        abstract = True
Exemplo n.º 11
0
class Poll(GenericDateModel):
    question = models.CharField(
        verbose_name=_ul('Вопрос'),
        max_length=255)
    is_published = models.BooleanField(
        verbose_name=_ul('Опубликован?'),
        default=False,
        db_index=True)

    class Meta:
        verbose_name = _ul('Опрос')
        verbose_name_plural = _ul('Опросы')

    def __str__(self):
        return u'%s' % self.question
Exemplo n.º 12
0
class LoginForm(BootstrapForm):
    email = forms.EmailField(max_length=255, label=_ul('Введите вашу почту'))
    password = forms.CharField(max_length=255,
                               widget=forms.PasswordInput(),
                               label=_ul('Введите ваш пароль'))

    def clean(self):
        self.cleaned_data = super(LoginForm, self).clean()
        if ('password' in self.cleaned_data and 'email' in self.cleaned_data):
            self.cleaned_data['user'] = authenticate(
                username=self.cleaned_data['email'],
                password=self.cleaned_data['password'])
            if not self.cleaned_data['user']:
                raise forms.ValidationError(
                    _ul('Не правильно введена почта или пароль.'))
        return self.cleaned_data
Exemplo n.º 13
0
 def send_registration(self, user, key):
     registration_url = 'http://obelektrike.ru' + reverse(
         'u-registration-uuid', kwargs={'uuid': key})
     message = _ul("""
         Для окончания регистрации перейдите по следующей ссылке:\n
         %s \n
         \n
         С уважением,
         Команда obelektrike.ru
         """) % registration_url
     send_mail(
         subject=_ul(u'Регистрация пользователя на сайте obelektrike.ru'),
         message=message,
         from_email=settings.SUPPORT_EMAIL,
         recipient_list=[user.email],
         fail_silently=True)
Exemplo n.º 14
0
class ArticleField(models.CharField):
    """Article field."""

    description = _ul('Article string')

    def __init__(self, *args, **kwargs):
        """Override default max length."""
        defaults = {
            'max_length': 50,
        }
        defaults.update(kwargs)
        super(ArticleField, self).__init__(*args, **defaults)

    def formfield(self, **kwargs):
        """Add min value validation."""
        defaults = {
            'form_class': forms.RegexField,
            'regex': ARTICLE_RE,
            'max_length': self.max_length,
            'error_messages': {
                'invalid':
                _ul('Should contain only letters, digits, dashes and whitespaces'
                    ),
            },
        }
        defaults.update(kwargs)
        return super(ArticleField, self).formfield(**defaults)
Exemplo n.º 15
0
class SubscribeUser(MessageMixin, FormView):
    template_name = ''
    form_class = SubscribeForm
    extra_tags = 'subscribe'
    success_msg = _ul(
        u'Теперь уведомление о каждой новой статьи будет приходить Вам на email.'
    )

    def get(self, request, *args, **kwargs):
        raise Http404

    def get_success_url(self):
        next_url = self.request.GET.get('next', None)
        if next_url is not None:
            return next_url
        return reverse_lazy('index')

    def form_valid(self, form):
        user, _ = User.objects.get_or_create(
            username=form.cleaned_data['email'],
            defaults=dict(email=form.cleaned_data['email'], is_active=False))
        user.is_subscribe = True
        user.date_subscribe = timezone.now()
        user.save()
        return super(SubscribeUser, self).form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request,
                       form.errors.as_text(),
                       extra_tags=self.extra_tags)
        return redirect(self.get_success_url())
Exemplo n.º 16
0
class PasswordResetView(MessageMixin, FormView):
    template_name = 'password-reset.html'
    form_class = PasswordResetForm
    success_url = reverse_lazy('u-reset-password')
    success_msg = _ul(
        u'Ссылка для сброса пароля отправлена Вам на почту (если письмо не пришло поищите его в спаме).'
    )

    def send_resetpassword(self, user, key):
        reset_url = 'http://obelektrike.ru' + reverse('u-reset-password-uuid',
                                                      kwargs={'uuid': key})
        message = _ul("""
            Для сброса пароль перейдите по следующей ссылке:\n
            %s \n
            \n
            С уважением,
            Команда obelektrike.ru
            """) % reset_url
        send_mail(
            subject=_ul(u'Сброс пароля для пользователя %s на obelektrike.ru')
            % user.get_full_name(),
            message=message,
            from_email=settings.SUPPORT_EMAIL,
            recipient_list=[user.email],
            fail_silently=True)

    def form_valid(self, form):
        key = uuid.uuid4()
        user = User.objects.get(username=form.cleaned_data['email'])
        user.reset_password_key = key
        user.save()
        self.send_resetpassword(user, key)
        return super(PasswordResetView, self).form_valid(form)
Exemplo n.º 17
0
 def clean_email(self):
     qs = User.objects.filter(username=self.cleaned_data['email'],
                              is_subscribe=True)
     if qs.exists():
         raise forms.ValidationError(
             _ul('Пользователь с такой почтой уже подписан.'))
     return self.cleaned_data['email']
Exemplo n.º 18
0
 def send_resetpassword(self, user, key):
     reset_url = 'http://obelektrike.ru' + reverse('u-reset-password-uuid',
                                                   kwargs={'uuid': key})
     message = _ul("""
         Для сброса пароль перейдите по следующей ссылке:\n
         %s \n
         \n
         С уважением,
         Команда obelektrike.ru
         """) % reset_url
     send_mail(
         subject=_ul(u'Сброс пароля для пользователя %s на obelektrike.ru')
         % user.get_full_name(),
         message=message,
         from_email=settings.SUPPORT_EMAIL,
         recipient_list=[user.email],
         fail_silently=True)
Exemplo n.º 19
0
class Feedback(GenericDateModel):
    name = models.CharField(
        verbose_name = _ul('Ваше имя'),
        max_length=255)
    email = models.EmailField(
        verbose_name = _ul('Контактный email'),
        max_length=255)
    message = RichTextUploadingField(
        verbose_name = _ul('Сообщение'),
        config_name='feedback')

    class Meta:
        verbose_name = _ul('Обратная связь')
        verbose_name_plural = _ul('Обратная связь')

    def __str__(self):
        return u'%s - %s' % (self.creation_date, self.name)
Exemplo n.º 20
0
class StoreAddress(models.Model):
    """Model for address of the store."""

    line1 = models.CharField(max_length=100, verbose_name=_ul('Line1'))
    line2 = models.CharField(max_length=100,
                             null=True,
                             blank=True,
                             verbose_name=_ul('Line2'))
    street = models.CharField(max_length=40, verbose_name=_ul('Street'))
    city = models.CharField(max_length=40, verbose_name=_ul('City'))
    state = models.CharField(max_length=40,
                             null=True,
                             blank=True,
                             verbose_name=_ul('State'))
    zip = models.CharField(max_length=20, verbose_name=_ul('ZIP'))
    country = models.CharField(max_length=20, verbose_name=_ul('Country'))

    def __str__(self):
        """String representation of store address model."""
        address_line = ', '.join([
            token for token in [
                self.zip,
                self.country,
                self.state,
                self.city,
                self.street,
                self.line1,
                self.line2,
            ] if token
        ], )
        return '<{model_name}#{id}: {address_line}>'.format(
            model_name=self.__class__.__name__,
            id=self.id,
            address_line=address_line,
        )
Exemplo n.º 21
0
class ProductCategory(models.Model):
    """Model for category of the product."""
    class Meta:
        verbose_name_plural = 'ProductCategories'

    name = models.CharField(max_length=50, verbose_name=_ul('Name'))
    parent = models.ForeignKey('webstore.ProductCategory',
                               null=True,
                               blank=True,
                               verbose_name=_ul('Category'))

    def __str__(self):
        """String representation of product category model."""
        return '<{model_name}#{id}: {name}>'.format(
            model_name=self.__class__.__name__,
            id=self.id,
            name=self.name,
        )
Exemplo n.º 22
0
class PasswordResetForm(BootstrapForm):
    email = forms.EmailField(label=_ul('Введите вашу почту'))

    def clean_email(self):
        qs = User.objects.filter(username=self.cleaned_data['email'])
        if not qs.exists():
            raise forms.ValidationError(
                _ul('Пользователь с такой почтой не существует.'))
        return self.cleaned_data['email']
Exemplo n.º 23
0
class SubscribeForm(BootstrapForm):
    email = forms.EmailField(label=_ul('Введите вашу почту'))

    def clean_email(self):
        qs = User.objects.filter(username=self.cleaned_data['email'],
                                 is_subscribe=True)
        if qs.exists():
            raise forms.ValidationError(
                _ul('Пользователь с такой почтой уже подписан.'))
        return self.cleaned_data['email']
Exemplo n.º 24
0
 def send_feedback(self, feedback):
     admins = [admin[1] for admin in settings.ADMINS]
     send_mail(
         subject=_ul(u'Вам написал пользователь %s %s на obelektrike.ru') %
         (feedback.name, feedback.email),
         message=feedback.message,
         from_email=settings.SUPPORT_EMAIL,
         recipient_list=admins + [settings.SUPPORT_EMAIL],
         fail_silently=True,
         html_message=feedback.message)
Exemplo n.º 25
0
 def clean(self):
     self.cleaned_data = super(LoginForm, self).clean()
     if ('password' in self.cleaned_data and 'email' in self.cleaned_data):
         self.cleaned_data['user'] = authenticate(
             username=self.cleaned_data['email'],
             password=self.cleaned_data['password'])
         if not self.cleaned_data['user']:
             raise forms.ValidationError(
                 _ul('Не правильно введена почта или пароль.'))
     return self.cleaned_data
Exemplo n.º 26
0
 def send_email_to_subscribers(self, post):
     post_url = 'http://obelektrike.ru' + reverse(
         'posts-category-detail', kwargs={'slug': post.slug})
     message = _ul("""
         С удовольствием сообщаем, что на портале obelektrike.ru появилась новая статья:\n
         %s \n
         %s \n
         \n
         С уважением,
         Команда obelektrike.ru
         """) % (post.title, post_url)
     emails = list(
         self.filter(is_subscribe=True).values_list('email', flat=True))
     for email in emails:
         send_mail(subject=_ul('Новые статья на сайте obelektrike.ru'),
                   message=message,
                   from_email=settings.SUPPORT_EMAIL,
                   recipient_list=[email],
                   fail_silently=True)
Exemplo n.º 27
0
class EmailAdmin(admin.ModelAdmin):
    list_display = ("created_date", "sender", "recipients", "subject")
    search_fields = ("sender", "recipients", "subject", "body")
    exclude = ("raw", "body")
    readonly_fields = ("body_html", )
    fieldsets = (
        (
            _ul("Users"),
            {
                "classes": ("collapse", "close"),
                "fields": (
                    "sender",
                    "recipients",
                ),
            },
        ),
        (_ul("Body"), {
            "fields": ("subject", "body_html")
        }),
    )
Exemplo n.º 28
0
 def clean_on_spam(self, text):
     msg = _ul(
         u'Система пометила Ваше сообщение как спам. Возможно Вы используете ссылки или Ваше сообщение содержит спам'
     )  # noqa
     is_spam = False
     soup = bs(text, "html.parser")
     hrefs = soup.findAll('a')
     if hrefs or 'http' in text or 'https' in text or 'www' in text:
         is_spam = True
     if is_spam:
         raise forms.ValidationError(msg)
Exemplo n.º 29
0
 def form_invalid(self, form):
     result = super(MessageMixin, self).form_invalid(form)
     if form.errors:
         if '__all__' in form.errors.keys():
             messages.error(self.request,
                            form.errors['__all__'].as_text(),
                            extra_tags=self.extra_tags)
         else:
             messages.error(self.request,
                            _ul(u'* Ошибки ввода'),
                            extra_tags=self.extra_tags)
     return result
Exemplo n.º 30
0
class RegistrationForm(BootstrapForm):
    email = forms.EmailField(label=_ul('Введите вашу почту'))
    password = forms.CharField(max_length=255,
                               widget=forms.PasswordInput(),
                               label=_ul('Ваш новый пароль'))
    confirm_password = forms.CharField(max_length=255,
                                       widget=forms.PasswordInput(),
                                       label=_ul('Повторите ваш новый пароль'))

    def clean_email(self):
        qs = User.objects.filter(username=self.cleaned_data['email'])
        if qs.exists():
            raise forms.ValidationError(
                _ul('Пользователь с такой почтой уже существует.'))
        return self.cleaned_data['email']

    def clean_confirm_password(self):
        if not self.cleaned_data['password'] == self.cleaned_data[
                'confirm_password']:
            raise forms.ValidationError(_ul('Пароли не совпадают.'))
        return self.cleaned_data['confirm_password']