【问题标题】:Django - get_current_site(request) just grabs example.comDjango - get_current_site(request) 只是抓取 example.com
【发布时间】:2016-06-24 06:14:14
【问题描述】:

我的 django 项目正在与第三方论坛合作。激活电子邮件正在通过get_current_site(request) 发送。 密码休息是由来自django.contrib.auth.views import 的名为password_reset 的django 完成的。

对于另一个应用程序,我需要安装 django.contrib.sites。通过那个get_current_site(request) 并没有给我当前站点,而是来自django.contrib.sites.models 的“example.com”。问题是:

  • 激活邮件确实有错误的域 (example.com)
  • 当我在代码中更改activation_mail发件人时,密码重置邮件仍然带有“example.com”,因为它使用的是django built_in方式。

我的项目已经上线。所以我想我可以删除 example.com 并添加我的域名。但是现在我无法登录了,并且出现了这个错误: django.contrib.sites.models.DoesNotExist: Site matching query does not exist.

【问题讨论】:

    标签: django python-3.x django-contrib


    【解决方案1】:

    您的 Django 项目在站点模型中查找条目但找不到。因此 Django 引发了一个 DoesNotExist 错误。

    您可以做的是重新创建已删除的 Site 对象。不需要叫example.com,使用合适的域名即可。

    如果你把自己锁在外面。您始终可以创建一个 shell 会话。通过 SSH 连接到您的服务器并在具有 manage.py 类型的文件夹中:

       $ python manage.py shell
       >>> from django.contrib.sites.models import Site
       >>> site = Site(domain="yourdomain.com", name="My awesome site")
       >>> site.save()
    

    其他模型条目可以引用旧站点对象。通常,第一个 Site 对象的主键 (id) 是 1。但是您新创建的站点对象有一些其他的 id。大多数时候你不想改变id,因为它会破坏关系。但我们试图恢复破裂的关系,所以我们开始吧:

       >>> print(site.id)  
       2  # The id of the current site object.
       >>> site.id = 1  
       >>> site.save()  
       >>> print(site.id)  
       1  
    

    或者只是打开一个数据库会话并使用 SQL 语句创建这个对象。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多