关于 Django Sites 模块和 manage.py syncdb
Auth 模块可以在 .\manage.py syncdb 期间提示询问管理站点的默认超级用户。我希望看到默认站点域名发生类似的事情。目前它是 example.com,硬编码,除非我使用管理网站来更改它。我想在syncdb期间更改它。
关于 Django Sites 模块和 manage.py syncdb
Auth 模块可以在 .\manage.py syncdb 期间提示询问管理站点的默认超级用户。我希望看到默认站点域名发生类似的事情。目前它是 example.com,硬编码,除非我使用管理网站来更改它。我想在syncdb期间更改它。
我制作了一个可以插入和播放的小型 django 应用程序。将其插入:
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
您可以自己执行此操作:
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 的错误跟踪器之类的地方,则会获得奖励积分。