認定は、上陸した
。それは、書き込みコードにある場合は、最初にユーザーが入力したユーザ名がデータベースに存在するかどうかを確認するために、データベースを照会する必要があり、ユーザのログイン検証中に
、ユーザーがデータベースに存在する場合、その後、ユーザーが入力したパスワードを確認しますその結果として、あなたは、コードを自分の多くを書く必要があります。
実際には、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()
機能認定ユーザオブジェクト
ランディング・ユーザ・ログイン(リクエスト)
この関数は使用し、追加で認証されたユーザにフレームワークを情報。使用します。Django
session
session_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})