草庐IT

django:从管理面板向用户发送邮件

codeneng 2023-03-28 原文

django : send mail to users from admin panel

我想知道如何配置 django 管理员以查看表单,因此 auth_user 应该发送电子邮件给订阅用户。

我做了什么:

models.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db import models
from datetime import datetime




class Mail(models.Model):
    email=models.EmailField(max_length=255,unique=True,help_text="Το email του χρ?στη",verbose_name="Email")
    timestamp=models.DateTimeField(default=datetime.now,help_text="Η ημερομην?α που ο χρ?στη? γρ?φτηκε στην newsletter list",verbose_name="Ημερομην?α εγγραφ??")
    delete_link=models.SlugField(unique=True,max_length=255,null=True,blank=True)
    def __unicode__(self):
        return self.email

    class Meta:
        verbose_name ="Email User"
        verbose_name_plural ="Email Users"

forms.py

1
2
3
4
5
6
from django import forms

class MailForm(forms.Form):
        subject = forms.CharField(max_length=255)
        message = forms.CharField(widget=forms.Textarea)
        attachment = forms.FileField()

我正在尝试在管理页面中添加一个指向时事通讯应用程序的链接。示例:

现在,我必须为表单编写验证规则(主题和消息不能为空)。对于验证,我正在尝试执行以下操作:

1
2
3
4
5
6
7
8
9
def clean_subject(self):
        if self.cleaned_data["subject"]=="" or self.cleaned_data["subject"]==None:
            raise forms.ValidationError("My text goes here")    
        return self.cleaned_data["subject"]

def clean_message(self):
        if self.cleaned_data["message"]=="" or self.cleaned_data["message"]==None:
            raise forms.ValidationError("My text goes here")    
        return self.cleaned_data["message"]

当表单无效时,django 会显示一条类似标准方式的消息。示例:

最后,我必须编写 1 个视图来显示表单(我正在尝试使用 django admin 的标准内容,以及 1 个视图,其中显示"成功发送 130 封邮件"。

任何建议我如何配置 django admin 来执行我所描述的操作都会很有用!

  • 你为什么不尝试已经构建的时事通讯应用程序?见 emencia django 通讯


我认为您应该创建一个 Mail 模型。首先,您必须创建一个邮件并保存它。然后,您可以使用邮件模型的保存方法将其发送给您的所有电子邮件用户,或者添加自定义管理操作来执行此操作。在我看来,保存方法是最好的。

所以你应该在 models.py 中有这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from django.db import models
from datetime import datetime
from django.core.mail import send_mail

    class Mail(models.Model):
        ...

        class Meta:
            verbose_name ="Email User"
            verbose_name_plural ="Email Users"

    class MailText(models.Model):
        subject = models.Charfield()
        message = models.Charfield()
        attachment = models.Filefield()
        users = models.ManyToManyField(Mail)
        send_it = models.BooleanField(default=False) #check it if you want to send your email

        def save(self):
            if self.send_it:
                #First you create your list of users
                user_list = []
                for u in self.users:
                    user_list.append(u.email)

                #Then you can send the message.
                send_mail(str(self.subject),
                          str(self.message),
                          'from@example.com',
                          user_list,
                          fail_silently=False)

        class Meta:
            verbose_name ="Emails to send"
            verbose_name_plural ="Emails to send"

  • 我接受答案,因为我想离开:stackoverflow.com/help/question-bans

有关django:从管理面板向用户发送邮件的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  4. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  5. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  6. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  7. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  8. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  9. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  10. ruby - (Ruby || Python) 窗口管理器 - 2

    我想用这两种语言中的任何一种(最好是ruby​​)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生

随机推荐