3

关于 Django Sites 模块和 manage.py syncdb

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

4

2 回答 2

6

我制作了一个可以插入和播放的小型 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
于 2010-02-23T23:12:03.460 回答
4

您可以自己执行此操作:

  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 code 或 django 的错误跟踪器之类的地方,则会获得奖励积分。

于 2010-02-23T22:12:37.193 回答