【问题标题】:Automatically prompt to update default site domain name when running Django’s ./manage.py syncdb?运行Django的./manage.py syncdb时自动提示更新默认站点域名?
【发布时间】:2011-01-20 06:37:20
【问题描述】:

关于 Django Sites 模块和 manage.py syncdb

在 .\manage.py syncdb 期间,Auth 模块可以提示询问管理站点的默认超级用户。我希望看到默认站点域名发生类似的事情。目前它是 example.com,硬编码,除非我使用管理网站来更改它。我想在 syncdb 期间更改它。

【问题讨论】:

    标签: python django django-sites


    【解决方案1】:

    我制作了一个可以插入和播放的小型 django 应用程序。插入:

    1. 将其下载到项目目录或您的项目可以找到的位置。
    2. 在 settings.py INSTALLED_APPS 的末尾或它所依赖的“django.contrib.sites”之后添加“site_default”(应用名称)。
    3. 运行manage.py syncdbmanage.py createdefaultsite

    屏幕截图:

    (pinax-dev)>manage.py createdefaultsite
    Site domain name: mydomain.com
    Site display name: My Site!
    (pinax-dev)
    

    它带有一个单元测试。 运行单元测试:

    (pinax-dev)>manage.py test site_default
    

    “site_default”是应用名称。

    源代码: http://github.com/peiwei/pinax/raw/master/pinax/apps/site_default.tgz

    更多截图:

    (pinax-dev)> manage.py syncdb
    Creating table...
    You just installed Django's auth system, which means you don't have any superuse
    rs defined.
    Would you like to create one now? (yes/no): yes
    Username: administrator
    E-mail address: who@who.com
    Password:
    Password (again):
    Superuser created successfully.
    
    Would you like to change the default site domain name? (yes/no)[default:no]: yes
    
    Site domain name: mydomain.com
    Site display name: My Site!
    ...
    Installing index for signup_codes.SignupCode model
    Installing index for signup_codes.SignupCodeResult model
    

    【讨论】:

      【解决方案2】:

      你可以自己做:

      1. 创建管理命令以提示您的新站点
      2. 将其连接到post_syncdb 信号

      该命令可让您从命令行方便地设置站点。将其连接到信号意味着您在安装 sites 应用程序时会收到提示。例如:

      from django.contrib.sites import models as sites_app
      signals.post_syncdb.connect(create_site, sender=sites_app)
      

      在编写create_site 函数(信号处理程序)时,您几乎可以完全复制auth 模块的方法:

      def create_site(app, created_models, verbosity, **kwargs):
      from django.contrib.sites.models import Site
      from django.core.management import call_command
      if Site in created_models and kwargs.get('interactive', True):
          msg = "\nYou just installed Django's sites system, which means you don't have " \
                  "any sites defined.\nWould you like to create one now? (yes/no): "
          confirm = raw_input(msg)
          while 1:
              if confirm not in ('yes', 'no'):
                  confirm = raw_input('Please enter either "yes" or "no": ')
                  continue
              if confirm == 'yes':
                  call_command("createsite", interactive=True)
              break
      

      现在您只需要创建您的管理命令createsite 就可以了。我确实想知道为什么这还没有出现在 Django 中,我讨厌 example.com。

      将所有这些放入一个小应用程序中,并在您所做的每个项目中重复使用它。如果您将应用程序发布到 google 代码或 django 的错误跟踪器之类的地方,则会获得奖励积分。

      【讨论】:

        猜你喜欢
        • 2013-06-06
        • 2010-11-30
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 2017-01-13
        • 2012-05-27
        • 2015-04-25
        • 2014-09-07
        相关资源
        最近更新 更多