Skip to main content
 首页 » 编程设计

python之将激活数据从电子邮件发送回 Django 服务器的代码

2025年05月04日29daizhj

我正在尝试了解 django-registration 应用程序,现在我可以使用激活 key 向用户发送电子邮件。我无法弄清楚的是当用户单击他/她的电子邮件中的链接时如何将激活 key 发送回服务器。

class AbstractEmailUser(AbstractBaseUser, PermissionsMixin): 
      ..... 
       ..... 
   def send_activation_email(self, email):   
    email = email    
    ctx_dict = { 'activation_key' : self.activation_key, 
             'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 
                                                                } 
 
    subject = render_to_string('activation_email_subject.txt', ctx_dict) 
    subject = ''.join(subject.splitlines()) 
    message = render_to_string('activation_email.txt', ctx_dict) 
 
    send_mail(subject, message, 'gccFishing.com', [email],  fail_silently = False) 
 
   def activate(self, activation_key): 
    if SHA1_RE.search(activation_key): 
        try: 
        self.get(activation_key = activation_key) 
        except: 
        self.model.DoesNotExist 
        return False 
        if not self.activation_key_expired(): 
        self.is_active = True 
        self.activation_key = self.model.ACTIVATED 
        self.save() 
        return self 
    return False 

什么代码应该放在 activation_email.txt 中以创建一个链接,该链接使用 activation_key 调用 activate 方法? 或者有更好的方法吗?

任何帮助都会很棒。谢谢

请您参考如下方法:

如果您使用网站 django 应用程序,请在您的电子邮件中尝试这样的内容:

http://{{ site.domain }}{% url registration_activate activation_key %} 

或者用您站点的 DNS 更改 site.domain。你的

如果我没记错的话,django-registration 的模板中已经包含一个示例 activation_email.txt,请检查一下。

更新

我认为您不应该将激活登录名放在您的用户类中。你绝对不能做 {% url user.registration_activate activation_key %}因为您必须将 View 传递给 url 模板标签!您不能在没有 View 函数(或 CBV)的情况下创建链接。

您需要做的是创建一个 View ,用于在配置文件中搜索 activation_key 并激活它。检查 ActivationView django-registration/registration/backends/default/views.py的方法。

如果您想为您的应用程序实现自定义逻辑,只需子类 ActivationView并在 urls.py 中使用您的类而不是默认类(django-registration/registration/backends/default/urls.py): url(r'^activate/(?P<activation_key>\w+)/$', ActivationView.as_view(), name='registration_activate'),