3

Django Sitesモジュールとmanage.py syncdbについて

Auth モジュールは、.\manage.py syncdb. デフォルトのサイト ドメイン名でも同様のことが起こることを期待しています。現在、管理 Web サイトを使用して変更しない限り、ハードコードされた example.com です。syncdb 中に変更したい。

4

2 に答える 2

6

プラグインして再生できる小さな django アプリを作成しました。プラグインするには:

  1. プロジェクトディレクトリまたはプロジェクトが見つけられる場所にダウンロードします。
  2. settings.py INSTALLED_APPS で、依存する "django.contrib.sites" の末尾または後に "site_default" (アプリ名) を追加します。
  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
于 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コードやdjangoのバグトラッカーなどの場所にアプリを投稿すると、ボーナスポイント.

于 2010-02-23T22:12:37.193 に答える