Управление функцией (например, отправка почты) со страницы профиля пользователя - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть страница профиля, например: http://i.stack.imgur.com/Rx4kg.png. В управлении я хотел бы выбрать опцию «Уведомлять по почте», которая будет контролировать мои функции send_email в каждом приложении, которое я хочу. В качестве примера я использую django-сообщения, и он отправляет личные сообщения, а также электронные письма, когда вы отправляете сообщение. Я бы хотел, чтобы пользователь мог указать, хочет ли он получать электронные письма, когда он получает сообщение.

Сообщения / utils.py

def new_message_email(sender, instance, signal, 
        subject_prefix=_(u'New Message: %(subject)s'),
        template_name="messages/new_message.html",
        default_protocol=None,
        *args, **kwargs):
    """
    This function sends an email and is called via Django's signal framework.
    Optional arguments:
        ``template_name``: the template to use
        ``subject_prefix``: prefix for the email subject.
        ``default_protocol``: default protocol in site URL passed to template
    """
    if default_protocol is None:
        default_protocol = getattr(settings, 'DEFAULT_HTTP_PROTOCOL', 'http')

    if 'created' in kwargs and kwargs['created']:
        try:
            current_domain = Site.objects.get_current().domain
            subject = subject_prefix % {'subject': instance.subject}
            message = render_to_string(template_name, {
                'site_url': '%s://%s' % (default_protocol, current_domain),
                'message': instance,
            })
            if instance.recipient.email != "":
                send_mail(subject, message, settings.DEFAULT_FROM_EMAIL,
                    [instance.recipient.email,])
        except Exception, e:
            #print e
            pass #fail silently

Очевидно, instance.recipient.email - это электронная почта для пользователя-получателя. Итак, мои вопросы: как мне создать опцию в моем профиле управления, которую можно использовать в моем new_message_email, чтобы проверить, хочет ли пользователь получать электронные письма или нет? Мои собственные мысли состоят в том, что мне нужно сохранить значение в базе данных для пользователя, а затем проверить это значение в функции new_message_email. Как я это делаю, пока не ясно. Создать новую функцию в моем userprofile / views.py и класс в userprofile / forms.py? И мой шаблон userprofile / Overview.html изменил их? Некоторые особенности и мысли, если это правильный подход, очень помогли бы!

1 Ответ

1 голос
/ 28 апреля 2011

Возможно, вы захотите начать с , создав профиль пользователя , чтобы у вас был хороший способ сохранять погоду, или пользователь не хочет, чтобы эти письма отправлялись ему. Это делается с помощью настройки AUTH_PROFILE_MODULE в вашем settings.py.

Как только вы сохраните данные, вы сможете получить к ним доступ из instance.recipient (при условии, что instance.recipient - это User объект). Таким образом, вы можете изменить свой код на:

if instance.recipient.get_profile().wants_emails and instance.recipient.email != "":
    send_mail(subject, message, settings.DEFAULT_FROM_EMAIL,
        [instance.recipient.email,])

Готово и готово.

...