6

Ruby on Rails と Python を使用する EdX クラスを受講しています。そのおかげで、Apache、mod_wsgi、および PostgreSQL を使用して Django をインストールして学習する勇気が湧いてきました。詳細なインストール手順に従って、最初に Apache をインストールし、次に mod_wsgi、次に PostgreSQL をインストールしました。ソースからそれぞれをインストールし、それぞれについて少しチュートリアルを行い、正しくインストールされていることを確認しました。PostgreSQL サーバーを実行するための postgres ユーザー設定があり、自分用のユーザー「ロール」と、データベースなどを作成できるロールが継承する管理者ロールを作成できました。いくつかの SQL を試しましたテーブルなどを作成するためのチュートリアルに従ってpsqlを実行します。特定のロールに権限を付与する方法を知っています。

とにかく、ソースから実際に Django をインストールするステップにかなり近づいていますが、インストール手順からこのアドバイスに従う方法がわかりません。

Django の manage.py syncdb コマンドを使用してモデルのデータベース テーブルを自動的に作成する場合は、使用しているデータベースでテーブルを作成および変更する権限が Django にあることを確認する必要があります。テーブルを手動で作成する場合は、Django の SELECT、INSERT、UPDATE、および DELETE パーミッションを付与するだけです。

手順に従って実際に Django をインストールし、いくつかのチュートリアルを実行すると、Django にこれらのアクセス許可を付与するために PostgreSQL で何をセットアップする必要があるかを正確に理解できるようになりますが、インストール手順を順番に実行すると、 Django をインストールする前に、これらの権限を設定する必要があります。Django のインストールを行う前に、ここでの方法を誰かに教えてもらえれば幸いです。

4

3 に答える 3

9

djangoプロジェクトのsettings.pyファイルには、次のようなスニペットがあります。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproj_db',
        'USER': 'myproj_user',
        'PASSWORD': '123',
        'HOST': '',
        'PORT': '',
    },
}

これは、Djangoにどのユーザー(この場合はpostgresユーザー)とデータベースがdjangoプロジェクトと組み合わせて使用​​されているかを通知することです。

myproj_user通常、これは。と一緒に作成する必要がありますmyproj_db

このユーザーを作成するときに、次のような権限をユーザーに付与することを選択できます。

CREATE USER myproj_user WITH PASSWORD '123' SUPERUSER CREATEDB CREATEROLE LOGIN;

これにより、myproj_userwithスーパーユーザー、createdbm createrole、ユーザーに許可されたログイン権限が作成されます。

そして、データベースは次のようになります。

CREATE DATABASE myproj_db WITH OWNER myproj_user TEMPLATE=template1 ENCODING='utf-8';

于 2012-11-12T06:38:46.603 に答える
0

あなたは、与えられた役割に特権を与える方法を知っていると言います。これは、Djangoをインストールする(syncdbを実行する)前に行う必要があることです。

これは、Djangoで使用するためのデータベースのセットアップの一部です。これは、各Djangoプロジェクトを作成する前に実行する手順です。各Djangoプロジェクトは、Djangoで構築したサイトに対応しており、別のDjangoプロジェクトから完全に分離されています。各プロジェクトにはデータベースが属します。*Djangoフレームワークはそれ自体では何も実行しないため、データベースをセットアップする前にDjangoフレームワークをインストールできます。

Djangoにテーブルを作成する権限を与えるか、その場合は(を使用してmanage.py syncdb)テーブルを作成できます。または、manage.py sqlall <app>必要なテーブルを作成するために自分で実行するSQLを取得するために使用します(これは、セキュリティについて偏執的である場合に便利です)。

Postgresの特定のデータベース(オプション1)のすべての権限をユーザーに付与するには、次のコマンドを使用します(from psql):

GRANT ALL PRIVILEGES ON DATABASE <db-name> TO <username>;

*技術的には、同じデータベースを使用するように構成するだけで、データベースを共有できます。

于 2012-11-12T02:38:57.407 に答える
0

DjangoはORM(Object Relational Mapper)を使用しています。つまり、クエリを実行するためにデータベーステーブルを直接処理するのではなく、データベースを処理する特定のクラスを処理します。これは非常に便利で、手動でSQLを実行するよりもはるかにユーザーフレンドリーです。次の例を考えてみましょう。

SELECT * FROM foo WHERE field="value"

vs

Foo.objects.filter(field='value')

ORMでは、特定のクラス(Djangoではモデルと呼びます)を作成してテーブルを記述します。これらのモデルはdbのテーブルに対応し、それらのフィールドはdbテーブルの列に対応します。以下は非常に似ています。

CREATE TABLE foo (
    title        varchar(50),
    description  text,
    likes        integer
);

class Foo(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField()
    likes = models.IntegerField()

ただし、開発者がテーブルを作成し、Pythonでそれらのテーブルをモデルとして記述するためのSQLステートメントを作成するのは時間の無駄です。そうしないでください。Djangoでは、すべてのモデルを定義すると、dbテーブルを作成できます。syncdbそれがコマンドの目的です。インストールされているすべてのアプリとモデルを取得し、データベース内にそれらのテーブルを作成します。ただし、質問ですでに述べたように、データベースにはロールがあり、それらのロールには権限があります。たとえば、権限の1つはここでCREATE説明されているとおりです。つまり、Djangoのドキュメントに書かれていることは、Djangoが必要なdbテーブルを作成したり、後で変更したりできるようにするために、Djangoがdbと対話するために使用するロールに必要なすべての権限を付与することです。

于 2012-11-12T02:41:39.177 に答える