1. ホーム
  2. python

django のシェルからユーザを作成する方法

2023-08-09 06:25:13

質問

からのユーザーを作成する場合 django-admin からユーザを作成すると、ユーザのパスワードは暗号化されます。 しかし、django シェルからユーザを作成した場合、ユーザパスワードは平文で保存されます。 例.

{
    "date_joined": "2013-08-28T04:22:56.322185",
    "email": "",
    "first_name": "",
    "id": 5,
    "is_active": true,
    "is_staff": false,
    "is_superuser": false,
    "last_login": "2013-08-28T04:22:56.322134",
    "last_name": "",
    "password": "pbkdf2_sha256$10000$iGKbck9CED0b$6hWrKYiMPNGKhcfPVGal2YP4LkuP3Qwem+2ydswWACk=",
    "resource_uri": "/api/v1/user/5/",
    "username": "user4"
},
{
    "date_joined": "2013-08-29T01:15:36.414887",
    "email": "test@ophio",
    "first_name": "",
    "id": 6,
    "is_active": true,
    "is_staff": true,
    "is_superuser": true,
    "last_login": "2013-08-29T01:15:36.414807",
    "last_name": "",
    "password": "123test",
    "resource_uri": "/api/v1/user/6/",
    "username": "test3"
} 

私はシンプルなブログアプリのためにRESTスタイルのAPIを作ろうとしています。 Postリクエストでユーザーを挿入しようとすると [ JSONを渡す ] パスワードがプレーンテキストとして保存されます。 この動作をどのようにオーバーライドするのでしょうか。

どのように解決するのですか?

ユーザーを作成する際に、通常の User(...) 構文でユーザを作成してはいけません。常に User.objects.create_user() を使うべきです。

user@host> manage.py shell
>>> from django.contrib.auth.models import User
>>> user=User.objects.create_user('foo', password='bar')
>>> user.is_superuser=True
>>> user.is_staff=True
>>> user.save()