장고의 인증 모듈

장고는 내장 auth사용자가 등록, 로그인, 로그 아웃을 달성하고 개발자들이 많은 노력을 절약 할 수 있도록 암호 및 기타 기능을 변경할 수 있도록 모듈을.

인증 모듈

당신이 모델을 만들 때, 장고 내부라는 이름의 파일이 생성됩니다 auth_user사용자 인증 정보를 저장하기위한 데이터 테이블을.

auth 모듈, 방법의 일련의 제공은 사용하기 전에 가져와야합니다 :

from django.contrib import auth

인증 () 方法

사용자 인증을 제공, 사용자 이름과 암호 등 올 바르고 확인합니다. 성공하면, 그것은 반환 User개체를.

from django.contrib import auth

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

         # 用户认证,验证用户名、密码是否正确,并返回一个 user 对象
         # username、password 字段对应 auth_user 表中相应字段
        user_obj = auth.authenticate(username=username, password=password)

로그인 () 메소드

사용자가 배경에 로그인을 구현할 사용자 로그인 기능 생성 session데이터.

from django.contrib import auth
auth.login(request, user_obj)

from django.contrib.auth import login
login(request, user_obj)

두 개의 매개 변수, 제 중 하나를 수용 HTTPRequest객체와 타겟 인증 된 사용자 (즉, authenticate()인증 된 사용자 객체).

from django.contrib import auth

def login(request):
    """登录"""
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 用户认证,验证用户名、密码是否正确,并返回一个 user 对象
        user_obj = auth.authenticate(username=username, password=password)
        if user_obj:
            # 将验证成功的用户封装到 request.user 对象中
            auth.login(request, user_obj)
            return redirect('home')
        else:
            return '错误信息'
    return render(request, 'login.html')

성공적인 사용자 인증 개체는 실행 login()그렇지 않으면 오류 메시지를 반환합니다, 로그인 기능을 구현, 방법.

실행 된 login()사용자 개체의 방법은 통과 할 수 request.user그렇지 않으면 익명 사용자 개체를 할 것이라고는 현재, 따라서 사용자에 대한 정보를 제거, 사용자 개체에 기록 얻을 AnonymounsUser Object.

login(request, user_obj)
# 获得当前登录用户对象
user = request.user
# 获得当前登录用户对象的用户名
username = request.user.username

아웃 () 메소드

상기 방법은, 취소 기능을 가능 현재 로그인 된 사용자 데이터베이스 취소 session수신 데이터를 HttpRequest어떤 값도 반환하지 타겟.

from django.contrib import auth

def logout(request):
    """注销"""
    auth.logout(request)
    # 注销后重定向到登录页面
    return redirect('login')

is_authenticated 属性

현재 사용자가 부울 값으로 인증되는지 여부를 결정한다.

def home(request):
    """首页"""
    ret = request.user.is_authenticated
    print(ret)      # True

login_required () 메소드

쉽게보기 위해 로그인 체크를 추가 할 수있는 장식 도구에서 제공하는 인증 템플릿입니다.

  • 사용자가 로그인하지 않은 경우, 디폴트로 이동합니다 accounts/login/, 현재 절대 경로에 액세스 할 수있는 URL을 전달합니다.
  • 사용자 지정 경로를 이동, 간단하게 settings.py추가 :
# 当用户没有登录,访问某个视图时将会跳转到登录页面
LOGIN_URL = '/login/'
from django.contrib.auth.decorators import login_required

# 添加装饰器
@login_required
def home(request):
    """首页"""

    return render(request, 'home.html')

사용자가 액세스 할 때 home페이지, 그렇지 않은 경우 로그인 페이지로 logged'll 점프, 그렇지 않으면 home페이지를.

사용자 관련

모든 관련 전술의 등록 정보, 다음은 만드는 방법을 설명합니다 auth_user, 사용자를 만들고 암호를 변경, 암호를 확인합니다.

create_superuser () 메소드

수신 수퍼 사용자 생성 방법 username、password두 가지 필수 파라미터. 실시 효과 python manage.py createsuperuser등가물.

from django.contrib.auth.models import User

user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

CREATE_USER () 메소드

일반적인 create_superuser()방법은 거의 사용하지 않는 가장 일반적으로 사용되는입니다 create_user()방법, 그것은 종종 등록보기에 사용되는 일반 사용자를 작성합니다.

, 필요한 사용자의 요구 필드 만들기 auth_user테이블 내의 대응 데이터 필드.

from django.contrib.auth.models import User

def signup(request):
    # 创建新用户
    user_obj = User.objects.create_user(username='lila', password='1234')

    return HttpResponse('创建成功')

에 기억 새로 생성 된 사용자 auth_user테이블의 암호 데이터는 암호화됩니다.

은 check_password () 메소드

로그인 사용자 암호가 올바른지 확인, 우리는 현재 사용자의 암호를 요청해야합니다.

from django.contrib.auth.models import User

def signup(request):
    # 创建新用户
    user_obj = User.objects.create_user(username='lila', password='1234')
    
    ret = user_obj.check_password('123456')
    print(ret)      # False
    return HttpResponse('创建成功')

암호는 올바른 반환 참, 그렇지 않으면 False입니다.

또는 사용자에 대한 올바른 원래 암호는 현재 요청을 확인 오브젝트 여부 :

obj = request.user.check_password(raw_password='原始密码')

set_password () 메소드

이 방법은 마지막으로 수행해야하는 인수로 새 암호를 수신하기 위해 암호를 변경하는 데 사용됩니다 save(), 그렇지 않으면 무효, 보존 방법.

def set_password(request):
    """
    修改密码,request.user 中封装了已认证且执行了登录功能的用户对象
    :param request: 
    :return: 
    """
    request.user.set_password('12')
    password = request.user.password
    request.user.save()
    print(password)

    return HttpResponse('修改成功')

암호 예 변경

이 예제는 로그인 한 사용자에게 적용, 내부적으로 암호를 변경, 등록되지 않은 사용자는 로그인 페이지로 이동합니다.

from django.shortcuts import render, redirect, HttpResponse
from django.contrib.auth.decorators import login_required

@login_required
def set_password(request):
    """
    修改密码,request.user 中封装了已认证且执行了登录功能的用户对象
    :param request:
    :return:
    """
    user = request.user
    ret = {'message': 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:
                ret['message'] = '新密码不能为空'
            
            elif new_password != repeat_password:
                ret['message'] = '两次密码输入不一致'
            else:
                user.set_password(new_password)
                user.save()
                return redirect('login')
        else:
            ret['message'] = '原密码不正确'
    return render(request, 'set_password.html', ret)

인증 모듈 확장

정식 템플릿 때문에 auth_user데이터 테이블 필드가 고정되어 우리는 인증 모듈을 사용할 때, 그래서, 당신은 추가 필드를 추가 할, 그들은 확장 될 필요가있다.

두 가지 방법으로 확장 :

  • 새 테이블에서 모델과 auth_user관련된 테이블 하나
  • 내장 상속 AbstractUser클래스 : 공통를
  1. 모델 models.py에서 상속하는 새로운 클래스 AbstractUser:
from django.contrib.auth.models import User, AbstractUser   # 导入 AbstractUser 类


class UserInfo(AbstractUser):
    """
    继承 AbstractUser
    新增字段:phone、addr
    """
    phone = models.CharField(max_length=11, verbose_name='手机号码')
    addr = models.CharField(max_length=128, verbose_name='家庭地址')
  1. 구성 settings.py

새로운 클래스 상속 AbstractUser, 커버리지 확장됩니다 auth_user구성 할 필요가 있으므로, 테이블을 settings기본 인증의 인증을 사용할 테이블을 알고있다.

# settings.py
# 在最后添加如下代码
AUTH_USER_MODEL = 'app名.新增的类名'

AUTH_USER_MODEL = 'app.UserInfo'    # 示例
  1. 마이그레이션 데이터 시트
python manage.py makemigrations
python manage.py migrate
  1. 사용자 만들기

인증 모듈의 확장 후, 더 이상 원래 사용되지 auth_user테이블,하지만 새 테이블 app.UserInfo테이블, 그렇게 할 때주의해야한다 사용자를 생성합니다.

# 拓展之前
from django.contrib.auth.models import User
user_obj = User.objects.create_user(username='lila', password='1234')

# 拓展之后
from app.models import UserInfo
user_obj = UserInfo.objects.create_user(username='lila', password='1234')

  • 마이그레이션이 모델이 된 경우, 인증 모듈을 확장, 당신은 할 필요가 migrations: (예 : 파일 폴더 0001_initial.py그렇지 않으면보고됩니다, 파일 삭제) ValueError: Related model u'app.model' cannot be resolved.
  • 어떤 마이그레이션 모델 경우, 정상적인 실행이 될 수 있습니다.

추천

출처www.cnblogs.com/midworld/p/10992027.html