ユーザープロファイル:長所、短所、落とし穴

Djangoでユーザープロファイルを操作することは不幸にすぎないことは秘密ではありません。 私たちはみな、 auth.Userモデルのモノリシック性、その中の不適切なフィールドセット、および使用しなければならないすべてのトリックに直面しました。

誰もが倒錯しなければなりませんでした。dzhangaのユーザーだけでなく、中核となる開発者自身に対してもです。 たとえば、Django 1.2では、 usernameフィールドで犬の文字(@)とusernameを使用できるようになったのを覚えていusernameか? 理由を知っていますか? メールアドレスをログインとして使用できるようにします

私たち一般のユーザーも苦労しました。 ユーザーにいくつかの興味深いフィールドを追加してユーザーのプロファイルを変更するために-一見普通のことですよね? -さまざまな方法で行動しなければなりませんでした。

サルといえば......


伝説的なsorl.thumbnailを世界に与えた男たちは、再び卓越し、アカウントで別のキラーなものを作りました。 出会い: django- auth.Userメソッドを使用するアプリケーション(霊長類とサル、相関関係を感じられますか?)自分のモデルをauth.User に非常に簡単に変えることができます。 つまり、ロシア語では、目的のフィールドのプロファイルを作成します。

始めるのは簡単です。 まず、django-primateを配置する必要があります。 PyPIで可能です:

 pip install django-primate 

...また、リポジトリから最新バージョンを取得することもできます。

 pip install -e git+https://github.com/aino/django-primate.git#egg=django-primate 

起動時にパッチを呼び出す必要があります。 作成者は、 manage.py使用することをお勧めします

 #!/usr/bin/env python from django.core.management import setup_environ, ManagementUtility import imp try: imp.find_module('settings') # Assumed to be in the same directory. except ImportError: import sys sys.stderr.write( "Error: Can't find the file 'settings.py' in the directory " "containing %r. It appears you've customized things.\nYou'll have to " "run django-admin.py, passing it your settings module.\n" % __file__ ) sys.exit(1) import settings if __name__ == "__main__": setup_environ(settings) import primate primate.patch() ManagementUtility().execute() 

あとは、使用するモデルsettingsクラスをsettings指定するだけです

 AUTH_USER_MODEL = 'users.models.User' 

...そして、あなたはモデルを考え出すことができます:

 # users.models from django.db import models from primate.models import UserBase, UserMeta class User(UserBase): __metaclass__ = UserMeta birthday = models.DateField() #    ? 


これで、プロジェクトコンポーネントdjango.contrib.auth.models.User users.models.User django.contrib.auth.models.Userたびに、 users.models.Userモデルを受け取ります。 逆もまた真です。 管理パネルには自動的にパッチが適用され、接続には特別な手順は必要ありません。

デフォルトでは、django- auth.Userユーザーモデルにはauth.User次の違いがあります。

それ以外の場合、霊長類のユーザーモデルはアヒルのように歩き、アヒルのように泳ぎ、アヒルのように鳴きます。それは、ジャンゴフスキーのソースと非常によく似ています。

もちろん、絶対に任意のフィールドセットを使用できますが、この場合、サードパーティアプリケーション間で互換性がなくなるリスクがあるため、 usernamepassword 、およびemailフィールドの名前を変更しないことをお勧めします。

別のポイント:jungaとの互換性のために、霊長類はapp_labelusersはなく(例のように) authなるようにモデルをダウンロードします。 これは、しばらくの間理由を理解できないかもしれない南のユーザーに特に当てはまります。

 ./manage.py schemamigration users --auto 

移行は作成されません。

しかし、誰もが私が非常に自由に翻訳したREADMEに精通することができます。 私が何かを見逃したり、間違えたり、不正確にしたりした場合は、コメントを書いたり、あなたの考えを共有してください。

ご清聴ありがとうございました:)

Source: https://habr.com/ru/post/J118468/


All Articles