zoukankan      html  css  js  c++  java
  • Django 重新配置User表在admin中的显示

    需求

    接上一篇配置邮件发送功能,这里对平台的用户发送邮件。
    发送邮件的一些必备因素:

    • 必须是管理员
    • 必须填写了邮箱
    • 用户可以修改是否接收邮件通知:必须为开启状态
    • 开启一个发送测试邮件的功能

    具体实现:

    • 创建一个用户配置表,存储是否接收邮件通知的设置。models.py
    from django.contrib.auth.models import User
    
    class UserConfig(models.Model):
        user = models.OneToOneField(User,on_delete=models.CASCADE,verbose_name="用户")
        receive = models.BooleanField(default=False, verbose_name="是否开启邮件接收")
    
        class Meta:
            verbose_name_plural = verbose_name = '账户配置'
    
        def __str__(self):
            if self.receive:
                return "接收邮件通知"
            else:
                return "不接收邮件通知"
    
    • 配置admin.py 将新表通过inline(内联)的方式添加到用户表的字段
    # 先将新表以StackedInline的方式进行继承
    class UserConfigInline(admin.StackedInline):
        model = models.UserConfig
    
    admin.site.unregister(User)
    @admin.register(User)
    class CustomUserAdmin(UserAdmin):
        list_display = ["id","username","email","is_superuser","is_active","last_login","userconfig"]
        list_display_links = ["username"]
        inlines = [UserConfigInline]
    

    此时的后台页面显示效果为:
    image
    image

    • 增加发送测试邮件的功能
      • views.py:
    from django.core.mail import send_mail
    
    class CheckEmail(LoginRequiredMixin,View):
        def get(self,request):
            email = request.user.email
            if email:
                try:
                    send_mail("这是一封测试邮件", "测试发送邮件", settings.EMAIL_HOST_USER, [email])
                except:
                    print("邮件发送失败")
            else:
                messages.success(request, "请配置你的邮箱/输入一个正确的邮箱地址")
                return redirect("phone:import")
            messages.success(request, "邮件已发送")
            return redirect("phone:import")
    
    • 主要业务的发送邮件通知部分 task.py
    from django.contrib.auth.models import User
    
    def send_email_msg():
        user_list = User.objects.filter(userconfig__receive=True,is_superuser=True)
        target_email = [user.email for user in user_list if user.email]
        if target_email:
            try:
                send_mail("导入任务进度通知","当前任务处理:已完成","sender@qq.com",target_email)
            except:
                print("邮件发送失败")
                return
        return
    
  • 相关阅读:
    域名ICP备案个人备案写网站名称注意事项
    关于域名备案的注意事项
    MySQL里默认的几个库是干啥的?
    Python 1.3 元组与文件
    PTA(BasicLevel)-1006换个格式输出整数
    数据结构与算法-图的最短路径Dijkstra
    PTA(Basic Level)-1002 写出这个数
    PTA(Basic Level)-1076 Wifi密码
    C程序设计语言笔记-第一章
    谁能笑到最后,约瑟夫环-Josephus问题求解
  • 原文地址:https://www.cnblogs.com/lisicn/p/15439140.html
Copyright © 2011-2022 走看看