構築されたジャンゴ認証モジュール

認定は、上陸した
。それは、書き込みコードにある場合は、最初にユーザーが入力したユーザ名がデータベースに存在するかどうかを確認するために、データベースを照会する必要があり、ユーザのログイン検証中に
、ユーザーがデータベースに存在する場合、その後、ユーザーが入力したパスワードを確認しますその結果として、あなたは、コードを自分の多くを書く必要があります。
実際には、Djangoは組み込みのユーザー認証機能を提供してきました。
使用中"python manage.py makemigrationss"、及び"python manage.py migrate"移行データベースの完了後
のプロファイルに基づいて、settings.pyセグメント・データ・テーブルを生成するために、データベースがすでにそれぞれ、6つの表認証データを含みます、

  • AUTH_USER
  • auth_group
  • auth_group_permissions
  • auth_permission
  • auth_user_groups
  • auth_user_user_permissions

ユーザ認証データテーブルは、auth_user
認証機能ジャンゴ、最初のインポートとして使用するauthモジュール

from django.contrib import auth         #导入auth模块

django.contrib.auth私たちは三つの方法を使用、多くの方法を提供します:
認証を()
ユーザ名とパスワードが正しい検証し、ユーザー認証を提供し、それは通常2つのキーワード引数のユーザ名とパスワードを受け取り
、認証場合、authenticate()この関数はユーザオブジェクトを返します。 。
authenticate()ユーザーオブジェクトの識別プロパティを設定する機能は、この属性の識別には、データベースのユーザー名とパスワードによって検証。
私たちは経由せずに直接データベースからテイクを上陸しようとしたときにauthenticate()ユーザーオブジェクトエラーの時間。
使用します。

    user=authenticate(username="uaername",password="password")
    
    login(HttpResponse,user)

この関数は、かかるHttpRequest目的をを通してauthenticate()機能認定ユーザオブジェクト
ランディング・ユーザ・ログイン(リクエスト)
この関数は使用し、追加で認証されたユーザにフレームワークを情報。使用します。Djangosessionsession_id

    from django.shortcuts import render,redirect,HttpResponse
    
    from django.contrib.auth import authenticate,login
    
    def auth_view(request):
        username=request.POST.GET("usernmae")       # 获取用户名
        password=request.POST.GET("password")       # 获取用户的密码
    
        user=authenticate(username=username,password=password)  # 验证用户名和密码,返回用户对象
    
        if user:                        # 如果用户对象存在
            login(request,user)         # 用户登陆
            return redirect("/index/")
    
        else:
            return HttpResponse("用户名或密码错误")

ログアウト(リクエスト)ログアウト
この関数かかりHttpResponse、ターゲット値を返しません。
関数が呼び出されると、現在の要求のすべてのセッション情報がクリアされます。
現在のユーザーがログインしていない場合でも、エラーが関数を呼び出しません。
使用します。

    from django.shortcuts import render,redirect,HttpResponse
    
    from django.contrib.auth import authenticate,login,logout
    
    def logout_view(request):
        
        logout(request)     # 注销用户
        
        return redirect("/index/")

is_authenticatedユーザオブジェクトは、()
が必要です。

  • 着陸後の特定のページにアクセスするユーザー
  • ユーザがアクセスし、ログインしている必要がありランディングページへのアクセス権を持っていない場合は、ログインページに直接ジャンプします
  • ランディングページを着陸前に訪問したユーザーの後、ページが自動的にジャンプします

この方法の一つ:

    def view1(request):
        
        if not request.user.is_authenticated():
            return redirect("/login/")

方法2:
使用Djangoのlogin_requierd()デコレータを
使用します。

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def views(request):
        pass

ユーザーがログインしていない場合は、DjangoのデフォルトのランディングのURLにジャンプします"/accountss/login/"

login视图函数可以在settings.py文件中通过LOGIN_URL修改默认值

ログインに成功すると、あなたは、元のパスにリダイレクトされます。
ユーザーは、オブジェクトを
ユーザーオブジェクトのプロパティを:ユーザ名、パスワードが必要です。

password用哈希算法保存到数据库中
  • is_staff:ユーザーが管理者権限のウェブサイトを持っているかどうかを判断します
  • is_active:ユーザーが着陸からユーザーを防ぐために「偽」を削除することはできませんときに、ユーザのログイン、セットを許可するかどうかを判断します

メソッドのユーザーオブジェクト
is_authenticated()
それが通過された場合auth、関数trueを返し、ユーザオブジェクト、戻り値は本当でした。ユーザーが認証を通過しているかどうかをこのメソッドをチェックします。
is_authenticated()関数の戻り値は、ユーザーが認証成功を示す、真です。
ユーザーを作成し
使用してcreate_userユーザーを作成します。ヘルパーを

from django.contrib.auth.models import User
user=User.objects.create_user(username="username",password="password")

set_password(パスワード)

パスワードを変更するには、このメソッドを使用して、
使用します:

    from django.contrib.auth.models import User
    
    user=User.objects.get(username="username")      # 获取用户对象
    user.set_password(password="password")          # 设置对象的密码
    
    user.save()

check_password(パスワード)
ユーザーは、ユーザーが最初に古いパスワードを入力しなければならない時にパスワードを変更したいです。
パスワード認証による古いパスワードを入力した場合、Trueを返します。

新しいユーザーを作成します。

    from django.shortcuts import render,redirect,HttpResponse
    from django.contrib.auth.models import User
    
    def create_user(request):
    
        msg=None
    
        if request.method=="POST":
            username=request.POST.get("username"," ")           # 获取用户名,默认为空字符串
            password=request.POST.get("password"," ")           # 获取密码,默认为空字符串
            confirm=request.POST.get("confirm_password"," ")    # 获取确认密码,默认为空字符串
    
            if password == "" or confirm=="" or username=="":   # 如果用户名,密码或确认密码为空
                msg="用户名或密码不能为空"
            elif password !=confirm:                            # 如果密码与确认密码不一致
                msg="两次输入的密码不一致"
            elif User.objects.filter(username=username):        # 如果数据库中已经存在这个用户名
                msg="该用户名已存在"
            else:
                new_user=User.objects.create_user(username=username,password=password)  #创建新用户 
                new_user.save()
            
                return redirect("/index/")
        
        return render(request,"login.html",{"msg":msg})

例として第二に、使用login_required装饰器パスワード変更へ

    from django.shortcuts import render,redirect,HttpResponse
    from django.contrib.auth import authenticate,login,logout
    from django.contrib.auth.decorators import login_required
    from django.contrib.auth.models import User
    
    @login_required
    def change_passwd(request):
        user=request.user       # 获取用户名
        msg=None
    
        if request.method=='POST':
            old_password=request.POST.get("old_password","")    # 获取原来的密码,默认为空字符串
            new_password=request.POST.get("new_password","")    # 获取新密码,默认为空字符串
            confirm=request.POST.get("confirm_password","")     # 获取确认密码,默认为空字符串
    
            if user.check_password(old_password):               # 到数据库中验证旧密码通过
                if not (new_password and confirm):                     # 新密码或确认密码为空
                    msg="新密码不能为空"   
                elif new_password != confirm:                   # 新密码与确认密码不一样
                    msg="两次密码不一致"
    
                else:
                    user.set_password(new_password)             # 修改密码
                    user.save()
    
                    return redirect("/index/")
            else:
                msg="旧密码输入错误"
    
        return render(request,"change_passwd.html",{"msg":msg})

おすすめ

転載: www.cnblogs.com/zhaogang0104/p/11906748.html