在运行Django的./manage.py syncdb时,自动提示更新默认网站域名?

3 投票
2 回答
1196 浏览
提问于 2025-04-15 19:38

关于Django的站点模块和manage.py的syncdb命令

在执行 .\manage.py syncdb 时,认证模块会提示你输入默认的超级用户信息,用于管理网站。我希望在设置默认网站域名时也能有类似的提示。目前默认的域名是example.com,这个是写死的,除非我通过管理网站去修改它。我想在执行syncdb的时候就能更改这个域名。

2 个回答

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 的 bug 跟踪器上,那就更好了。

6

我做了一个小的 Django 应用,可以直接使用。要使用它,你需要:

  1. 把它下载到你的项目目录,或者放在你的项目能找到的地方。
  2. 在你的 settings.py 文件中的 INSTALLED_APPS 里,最后加上 "site_default"(这个应用的名字),或者在 "django.contrib.sites" 后面加上,因为它依赖这个。
  3. 运行 manage.py syncdb 或者 manage.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

撰写回答