2016-06-01 5 views
0

Djangoでカスタム認証を行う方法をオンラインで検索しているときに、私はthisthisという記事を見ました。これらの記事の両方で同じ指示が指定されています。現在私はこれのようなものを持っています。バックエンドでのカスタム認証 - 保存せずに実行時にユーザを作成する

class Client(models.Model): 
    email = models.EmailField(unique=True, max_length=100) 
    password = models.CharField(max_length=128) 

はその後、別のpythonファイルに私はこれが

from .models import Client 

class ClientAuthBackend(object): 

    def authenticate(self, username=None, password=None): 
     try: 
      user = Client.objects.get(email=username) 
      return user 

      if password == 'master': 
       # Authentication success by returning the user 
       return user 
      else: 
       # Authentication fails if None is returned 
       return None 
     except Client.DoesNotExist: 
      return None 

    def get_user(self, user_id): 
     try: 
      return Client.objects.get(pk=user_id) 
     except Client.DoesNotExist: 
      return None 

私はちょうどジャンゴを使用して開始し、一種の私の現在のプロジェクトであるため、DBの相互作用のためのモデルのセクションをスキップしている必要があり(最初の記事からの引用)I何らかの理由でRAWとカスタムSQLを使用しています。 私の質問はどこ

user = Client.objects.get(email=username) 

からそのユーザーを取得するんです。データベースに登録する必要がありますか? 私は何をしたい、実行時にユーザーを作成し、上記のClient.DoesNotExist例外を返します。この

#The following creates and saves a user in the db 
u =User.objects.create_user('john', '[email protected]', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message") 

をやってみましたdatabase.Iに保存しないことです。

答えて

0

私の質問はどこ

user = Client.objects.get(email=username) 

Clientmodels.Modelで、どうやら

からそのユーザーを取得するんです。これは、関連するsettings.pyの設定に応じて、データベース内の関連するテーブルの単一レコードを表します。

したがって、そのモデルを表すテーブルは、次のDjangoの移行と、Djangoが可能な他の多くの有用なもので作成できます。

したがって、上記のステートメントはDjango ORMに、その特定の電子メールで特定のテーブルのすべてのClientレコードをフェッチするように指示します。そのようなエントリが存在しない場合、何も返されません。

私はあなたが物事を少し複雑に場所です。この

u =User.objects.create_user('john', '[email protected]', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message") 

をやってみました。 create_userメソッドはDjango ORMの一部ではなく、Django default auth model managerdjango.contrib.auth.models.Userの一部です。そのようなメソッドを自分で提供するか、デフォルトのDjangoモデルマネージャーで提供されている標準のcreateメソッドを使用する方が簡単です。

ユーザーモデルを一部のキャッシュに保存しても、ユーザーがログインするたびにユーザーが登録することを意味するので、意味をなさないことはありません。

これまで述べてきたように、公式のDjangoのドキュメントを読むことを強くお勧めします。上記のすべてがカバーされていますが、ドキュメントは非常に包括的であり、それほど長くはありません。あなたは野生のチュートリアルを読んで理解してもいいかもしれませんが、これは正しいかもしれないし、最新のものではありません。

具体的にはCustomizing authentication topicをよく読んでください。初心者の方にとってははるかに簡単な方法です。

関連する問題