11

信頼できるユーザーの特定のグループがプロファイル情報を編集できる django サイトを構築したいと考えています。信頼できる各ユーザーに django 管理インターフェースを通過させることは理にかなっていますか? 私は彼らが自分の情報を見たり編集したりできるようにしたいだけです(明らかに)。これは、djangoの人々が「信頼」を定義する方法、特に太字のビットに適合していないようです...

Django Book の第 18 章から:

管理者は、開発者であるあなたが信頼する人が使用するように設計されています。これは単に「認証された人」という意味ではありません。これは、コンテンツ編集者が正しいことを行うと信頼できると Django が想定していることを意味します。

これは、コンテンツを編集するための「承認」プロセスがないことを意味します。ユーザーを信頼していれば、編集を承認する必要はありません。また、パーミッション システムは強力ですが、オブジェクトごとのアクセス制限をサポートしていないことも意味します。誰かが自分のストーリーを編集することを信頼している場合、その人が他の人のストーリーを許可なく編集しないことを信頼していることになります。

これは、django の管理モジュールに適合するユース ケースの 1 つですか、それとも、信頼されていないユーザー向けの特殊なビューですか?

4

6 に答える 6

17

いいえ、Django 管理者は個々のユーザー プロファイルには適していません。各ユーザーは他のすべてのユーザー プロファイルを表示および編集できます。これは、一度にすべてのユーザーを管理する必要がある管理者に適しています。

作成する必要があるのは、ユーザー プロファイル ページです。Django には、django.contrib.auth モジュールの好意による優れたログイン システムが既にあります。これをページに簡単に統合できます。これは、まさに Django 管理者がユーザーを認証するために使用するものです。

次に、User モデルに基づいて特定のユーザーのプロファイル情報を公開する簡単なページを作成する必要があります。必要なビューとテンプレートは 1 つだけで、テンプレートは ModelForms を利用できるため、これは比較的簡単です。

于 2009-01-31T04:48:35.287 に答える
5

User モデル (管理サイト User モデル) に OneToOneField を含む Person モデルを作成することをお勧めします。いくつかは、このような..

from django.contrib.auth.models import User

    class Person(models.Model):
        """The person class FKs to the User class and contains additional user information
        including userImage, country, etc"""

        user = models.OneToOneField(User, related_name='person_fk')
        url = models.URLField(max_length=255, blank=True)
        country = models.CharField(max_length=2, blank=True)
        state = models.CharField(max_length=50, blank=True)
        zipCode = models.IntegerField(max_length=7, blank=True, null=True)
        userImage = models.ImageField(upload_to=generate_filename, blank=True, null=True)
于 2009-01-31T18:40:48.323 に答える
3

Django の承認モデルは少し単純すぎます。モデル全体の許可をチェックするだけです。

この種の場合、追加のチェックを処理する独自のビュー関数を作成する必要があります。

1 つまたは 2 つ書いた後、パターンが表示されます。次に、これを処理する独自のデコレータを作成することを考えることができます。

def profileView( request, object_id ):
    p= Profile.objects.get( id=int(object_id) )
    if request.session['user'] != p.get_user():
        # respond with a 401 not authorized or a helpful message
    # process normally, since the session['user'] is the user for the Profile.

上記を機能させるには、セッションを有効にする必要があります。また、ユーザーがログインに成功したときにセッションにユーザーを記録する必要があります。また、ログアウト時にセッションを根絶する必要があります。

于 2009-01-31T16:50:16.330 に答える
3

Web サイトで自分の個人プロファイルを編集することを管理タスクとは考えません。django-profilesが探しているものだと思います。

于 2009-01-31T04:43:32.600 に答える
1

管理モデルで行レベルのアクセス許可を許可する django プラグイン可能なアプリがいくつかあります。ただし、ユーザーがアプリケーション内から実行できるようにする独自のビューを作成する傾向があります。

私が現在取り組んでいるアプリを設計するときに、(admin contrib を使用して) 同様の願望を持っていましたが、管理アプリは実際には管理者が使用するものであり、通常のユーザーには作業とカスタマイズを行うための独自のページを提供する必要があると判断しました (もし必要なら)。

一般的なビューとモデルフォームを使用して特定のモデルの CRUD ビューを簡単に生成し、スタイル シートを適用するだけで、アプリケーションの残りの部分と一貫した外観にすることができます。

于 2009-02-04T12:15:25.977 に答える
1

参考までに、Django admin でこの効果を非常に簡単に実現する方法を示すスニペットを次に示します (ユーザーは自分の「自分の」オブジェクトのみを編集できます)。警告: ユーザー プロファイルに対してこれを行うことはお勧めしません。ModelForm を使用して独自の編集ビューを作成する方が簡単で柔軟性があります。

于 2009-02-01T19:13:49.423 に答える