ホームページ バックエンド開発 Python チュートリアル Djangoのauthモジュール(ユーザー認証)の詳細説明

Djangoのauthモジュール(ユーザー認証)の詳細説明

Apr 17, 2018 am 10:41 AM
auth django ユーザー

この記事では主にDjangoのauthモジュール(ユーザー認証)の詳細な説明を紹介しますので、参考にしてください。一緒に見てみましょう

auth モジュールは、ログイン認証メソッドをカプセル化したものです。以前は、ユーザーが入力したユーザー名とパスワードを取得した後、ユーザー テーブルにクエリを実行して、そのオブジェクトが存在するかどうかを確認する必要がありました。ユーザー名とパスワードが一致します。

認証モジュールを使用すると、ユーザーのログイン情報がデータベースに存在するかどうかを簡単に確認できます。

さらに、auth は、ユーザーがログインしたかどうかを確認しやすくするためにセッションをカプセル化します

auth のメソッド

auth モジュールメソッドを使用したい場合は、最初に auth モジュールをインポートする必要があります

from django.contrib import auth
ログイン後にコピー

django.contrib.auth は多くのメソッドを提供します。ここでは主にそのうちの 4 つを紹介します:

1、authenticate()

はユーザー認証を提供します。つまり、ユーザー名とパスワードが正しいかどうかを検証します。 、通常、ユーザー名とパスワードの 2 つのキーワード パラメーターが必要です

認証情報が有効な場合、User オブジェクトが返されます。 authenticate() は、どの認証バックエンドがユーザーを認証したかを識別するために User オブジェクトに属性を設定します。この情報は後続のログイン プロセスで必要になります。 Authenticate() を使用せずにデータベースから直接取得した User オブジェクトにログインしようとすると、エラーが報告されます。 !

user = authenticate(username='someone',password='somepassword')
ログイン後にコピー

2、login(HttpRequest, user)

この関数は、HttpRequest オブジェクトと認証された User オブジェクトを受け入れます

この関数は、Django のセッション フレームワークを使用して、認証されたユーザーをアタッチし、セッション ID とその他の情報をアップロードします。

from django.contrib.auth import authenticate, login
  
def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...
ログイン後にコピー

3, logout(request) ユーザーをログアウトします

この関数は HttpRequest オブジェクトを受け取り、戻り値はありません。この関数が呼び出されると、現在のリクエストのすべてのセッション情報がクリアされます。ユーザーがログインしていなくても、この機能を使用してもエラーは報告されません。

from django.contrib.auth import logout
  
def logout_view(request):
  logout(request)
 # Redirect to a success page.
ログイン後にコピー

4、ユーザーオブジェクトのis_authenticated()

要件:

1 ユーザーはログイン後に特定のページにのみアクセスできます。

2 ユーザーがログインせずにページにアクセスした場合、ログイン ページに直接ジャンプします

3 ユーザーがリダイレクトされたログイン インターフェイスでログインを完了すると、以前にアクセスしたアドレスに自動的にアクセスします

方法 1:

認証の is_authenticated() メソッドを直接使用して確認します

def my_view(request):
   if not request.user.is_authenticated():
      return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
ログイン後にコピー

方法 2:

request.user.username に基づいて確認します。空の場合は、ログインしていないことを意味します

def my_view(request):
   if not request.user.username:
      return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
ログイン後にコピー

方法 3:

django がデコレーターを設計しました。この状況の場合:login_requierd( )

from django.contrib.auth.decorators import login_required
   
@login_required
def my_view(request):
 ...
ログイン後にコピー

ユーザーがログインしていない場合、Django のデフォルトのログイン URL '/accounts/login/' にジャンプします (この値は LOGIN_URL を通じて設定ファイルで変更できます) 。そして、現在のアクセス URL の絶対パスを渡します (ログインに成功すると、このパスにリダイレクトされます)。

ユーザーオブジェクト

ユーザーオブジェクトの属性: ユーザー名、パスワード (必須) パスワードはハッシュアルゴリズムを使用してデータベースに保存されます

is_staff: ユーザーが Web サイトに対する管理者権限を持っているかどうか

is_active: user is allowed to log in 、``False`` に設定すると、ユーザーを削除せずにユーザーのログインを禁止できます

2.1, is_authenticated()

実際の User オブジェクトの場合、戻り値は常に True です。 ユーザーが認証に合格したかどうかを確認するために使用されます。

認証に合格したことは、ユーザーに権限があることを意味するものではなく、ユーザーがアクティブであるかどうかさえも確認しません。これは、ユーザーが認証に成功したことを意味するだけです。 このメソッドは非常に重要です。バックグラウンドで request.user.is_authenticated() を使用して、ユーザーがログインしているかどうかを確認します。true の場合、request.user.name をフロント デスクに表示できます。 create_user 補助関数を使用してユーザーを作成します:

from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
ログイン後にコピー

2.3 、check_password(passwd)

user = User.objects.get(username=' ')
if user.check_password(passwd):
  ......
ログイン後にコピー

パスワードを変更する必要がある場合、最初に元のパスワードを入力する必要があります。指定された文字列がパスワード チェックに合格した場合、True を返します

set_password() を使用してパスワードを変更します

user = User.objects.get(username='')
user.set_password(password='')
user.save 
ログイン後にコピー

2.5、簡単な例

登録:

def sign_up(request):
 
  state = None
  if request.method == 'POST':
 
    password = request.POST.get('password', '')
    repeat_password = request.POST.get('repeat_password', '')
    email=request.POST.get('email', '')
    username = request.POST.get('username', '')
    if User.objects.filter(username=username):
        state = 'user_exist'
    else:
        new_user = User.objects.create_user(username=username, password=password,email=email)
        new_user.save()
 
        return redirect('/book/')
  content = {
    'state': state,
    'user': None,
  }
  return render(request, 'sign_up.html', content)  
ログイン後にコピー

パスワードの変更:

@login_required
def set_password(request):
  user = request.user
  state = None
  if request.method == 'POST':
    old_password = request.POST.get('old_password', '')
    new_password = request.POST.get('new_password', '')
    repeat_password = request.POST.get('repeat_password', '')
    if user.check_password(old_password):
      if not new_password:
        state = 'empty'
      elif new_password != repeat_password:
        state = 'repeat_error'
      else:
        user.set_password(new_password)
        user.save()
        return redirect("/log_in/")
    else:
      state = 'password_error'
  content = {
    'user': user,
    'state': state,
  }
  return render(request, 'set_password.html', content)
ログイン後にコピー

User テーブルを自分で作成する

上記の操作はすべて、django によって自動的に作成される auth_user テーブルに対するものであることに注意してください

。これは django によって自動的に作成されるユーザー テーブルであり、auth モジュールを使用したい場合は、このテーブルを使用 (または継承) する必要があります。

继承表的好处是我们可以增加一些自己需要的字段,并且同时可以使用auth模块提供的接口、方法

下面就讲一下继承auth的方法:

1、导入AbstractUser类,并且写一个自定义的类,继承AbstractUser类,如下:

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
  """
  用户信息
  """
  nid = models.AutoField(primary_key=True)
  telephone = models.CharField(max_length=11, null=True, unique=True)
  ......
ログイン後にコピー

需要注意的是,UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密

2、这样写完之后,还需要在setting.py文件里配置:

AUTH_USER_MODEL = 'blog.UserInfo'
ログイン後にコピー

这样,django就知道从blog项目下的models去查找UserInfo这张表了

相关推荐:

Django的cookie使用详解

Django中的Ajax使用方法

以上がDjangoのauthモジュール(ユーザー認証)の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか?私の携帯電話番号を見つけることはできますか? Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか?私の携帯電話番号を見つけることはできますか? Mar 22, 2024 am 08:40 AM

ソーシャルメディアの急速な発展に伴い、Xiaohongshuは最も人気のあるソーシャルプラットフォームの1つになりました。ユーザーは、Xiaohongshu アカウントを作成して自分の個人情報を示し、他のユーザーと通信し、対話することができます。ユーザーの小紅樹番号を見つける必要がある場合は、次の簡単な手順に従ってください。 1. Xiaohonshu アカウントを使用してユーザーを見つけるにはどうすればよいですか? 1. 小紅書アプリを開き、右下隅の「検出」ボタンをクリックして、「メモ」オプションを選択します。 2. ノート一覧で、探したいユーザーが投稿したノートを見つけます。クリックしてノートの詳細ページに入ります。 3. ノートの詳細ページで、ユーザーのアバターの下にある「フォロー」ボタンをクリックして、ユーザーの個人ホームページに入ります。 4. ユーザーの個人ホームページの右上隅にある三点ボタンをクリックし、「個人情報」を選択します。

スーパーユーザーとして Ubuntu にログインします スーパーユーザーとして Ubuntu にログインします Mar 20, 2024 am 10:55 AM

Ubuntu システムでは、通常、root ユーザーは無効になっています。 root ユーザーをアクティブにするには、passwd コマンドを使用してパスワードを設定し、su-コマンドを使用して root としてログインします。 root ユーザーは、無制限のシステム管理権限を持つユーザーです。彼は、ファイルへのアクセスと変更、ユーザー管理、ソフトウェアのインストールと削除、およびシステム構成の変更を行う権限を持っています。 root ユーザーと一般ユーザーの間には明らかな違いがあり、root ユーザーはシステム内で最高の権限とより広範な制御権限を持ちます。 root ユーザーは、一般のユーザーでは実行できない重要なシステム コマンドを実行したり、システム ファイルを編集したりできます。このガイドでは、Ubuntu の root ユーザー、root としてログインする方法、および通常のユーザーとの違いについて説明します。知らせ

チュートリアル: Ubuntu システムで通常のユーザー アカウントを削除する方法は? チュートリアル: Ubuntu システムで通常のユーザー アカウントを削除する方法は? Jan 02, 2024 pm 12:34 PM

Ubuntu システムに多くのユーザーが追加されました。使用しなくなったユーザーを削除したいのですが、どうすればよいですか?以下の詳細なチュートリアルを見てみましょう。 1. ターミナルのコマンドラインを開き、userdel コマンドを使用して、指定したユーザーを削除します。下図に示すように、必ず sudo 権限コマンドを追加してください。 2. 削除するときは、必ず管理者ディレクトリにいることを確認してください。一般ユーザー以下の図に示すように、この権限がありません。 3. 削除コマンドを実行した後、本当に削除されたかどうかをどのように判断しますか?次に、下の図に示すように、cat コマンドを使用して passwd ファイルを開きます。 4. 次の図に示すように、削除されたユーザー情報が passwd ファイル内になくなっていることがわかり、ユーザーが削除されたことがわかります。 5. 次に、ホームファイルを入力します

sudo とは何ですか?なぜ重要ですか? sudo とは何ですか?なぜ重要ですか? Feb 21, 2024 pm 07:01 PM

sudo (スーパーユーザー実行) は、一般ユーザーが root 権限で特定のコマンドを実行できるようにする、Linux および Unix システムの重要なコマンドです。 sudo の機能は主に次の側面に反映されています。 権限制御の提供: sudo は、ユーザーにスーパーユーザー権限を一時的に取得することを許可することで、システム リソースと機密性の高い操作を厳密に制御します。一般のユーザーは、必要な場合にのみ sudo を介して一時的な権限を取得できるため、常にスーパーユーザーとしてログインする必要はありません。セキュリティの向上: sudo を使用すると、日常的な操作中に root アカウントの使用を回避できます。すべての操作に root アカウントを使用すると、誤った操作や不注意な操作には完全な権限が与えられるため、予期しないシステムの損傷につながる可能性があります。そして

Django vs. Flask: Python Web フレームワークの比較分析 Django vs. Flask: Python Web フレームワークの比較分析 Jan 19, 2024 am 08:36 AM

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Django フレームワークの長所と短所: 知っておくべきことすべて Django フレームワークの長所と短所: 知っておくべきことすべて Jan 19, 2024 am 09:09 AM

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

Linuxシステムにおけるユーザーパスワード保存メカニズムの分析 Linuxシステムにおけるユーザーパスワード保存メカニズムの分析 Mar 20, 2024 pm 04:27 PM

Linux システムにおけるユーザー パスワードの保存メカニズムの分析 Linux システムでは、ユーザー パスワードの保存は非常に重要なセキュリティ メカニズムの 1 つです。この記事では、パスワードの暗号化された保存、パスワード検証プロセス、ユーザー パスワードを安全に管理する方法など、Linux システムにおけるユーザー パスワードの保存メカニズムを分析します。同時に、具体的なコード例を使用して、パスワード保存の実際の操作プロセスを示します。 1. パスワードの暗号化された保管 Linux システムでは、ユーザーのパスワードは平文でシステムに保管されるのではなく、暗号化されて保管されます。 L

Django バージョンをアップグレードする方法: 手順と考慮事項 Django バージョンをアップグレードする方法: 手順と考慮事項 Jan 19, 2024 am 10:16 AM

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

See all articles