从用户个人资料页面控制功能(例如发送邮件)

时间:2011-04-27 09:27:11

标签: django django-models django-forms django-views

我有一个类似的个人资料页面:http://i.stack.imgur.com/Rx4kg.png。在管理方面,我想要一个选项“通过邮件通知”,它可以控制我想要的每个应用程序中的send_email功能。例如,我正在使用django-messages,它会在您发送消息时发送私人消息以及电子邮件。我希望用户能够在收到消息时指定他是否还想要电子邮件。

消息/ 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 / forms.py中的userprofile / views.py和class中创建了一个新函数?并让我的userprofile / overview.html模板更改它们吗?如果这是正确的方法,一些细节和想法会有所帮助!

1 个答案:

答案 0 :(得分:1)

您可能希望从creating a user profile开始,以便您有一个很好的存储天气的方法,或者用户不希望这些电子邮件发送给他们。这是使用AUTH_PROFILE_MODULE中的settings.py设置完成的。

存储数据后,您应该可以从instance.recipient访问它(假设instance.recipientUser个对象)。因此,您可以将代码更改为:

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

完成并完成。