Django Auth 인증 모듈

5722 단어
본문 목록
1 Auth 모듈은 무엇입니까2 auth 모듈의 일반적인 방법3 기본 auth 확장사용자 테이블디렉토리로 돌아가기
1 Auth 모듈은 무엇입니까?
Auth 모듈은 Django의 사용자 인증 모듈입니다.
우리는 웹 사이트를 개발할 때 웹 사이트를 실현하는 사용자 시스템을 설계하는 것을 피할 수 없다.이때 우리는 사용자 등록, 사용자 로그인, 사용자 인증, 취소, 비밀번호 수정 등 기능을 실현해야 한다. 이것은 정말 번거로운 일이다.
Django는 완벽주의자의 궁극적인 틀로서 당연히 사용자의 이런 문제점을 생각할 것이다.강력한 사용자 인증 시스템 - auth를 내장하고 있으며 기본적으로auth 를 사용합니다사용자 데이터를 저장하는 사용자 테이블입니다.
디렉토리로 돌아가기
2 auth 모듈 공통 방법
from django.contrib import auth

authenticate()
사용자 인증 기능을 제공합니다. 즉, 사용자 이름과 비밀번호가 정확한지 검증하는 것입니다. 일반적으로username,password 두 개의 키워드 파라미터가 필요합니다.
인증에 성공하면 User 객체가 반환됩니다.
authenticate () 는 이 User 대상에 백엔드가 이 사용자를 인증했고 이 정보는 후속 로그인 과정에서 필요합니다.
사용법:
user = authenticate(username='usernamer',password='password')

login(HttpRequest, user)
이 함수는 HttpRequest 객체와 인증된 User 객체를 수락합니다.
이 함수는 사용자가 로그인하는 기능을 실현한다.이것은 본질적으로 백엔드에서 사용자를 위해 관련session 데이터를 생성합니다.
사용법:
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.

    ...

logout(request)
이 함수는 반환 값이 없는 HttpRequest 객체를 받아들입니다.
이 함수를 호출하면 현재 요청한session 정보가 모두 삭제됩니다.이 사용자는 로그인하지 않아도 이 함수를 사용하면 오류가 발생하지 않습니다.
사용법:
from django.contrib.auth import logout

   

def logout_view(request):

  logout(request)

  # Redirect to a success page.

is_authenticated()
현재 요청이 인증을 통과했는지 판단하는 데 사용됩니다.
사용법:
def my_view(request):

  if not request.user.is_authenticated():

    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

login_requierd()
auth에서 제공하는 장식기 도구로 보기에 로그인 검사를 빠르게 추가할 수 있습니다.
사용법:
from django.contrib.auth.decorators import login_required

      

@login_required

def my_view(request):

  ...

사용자가 로그인하지 않으면django의 기본 로그인 URL '/accounts/login/' 으로 이동하여 현재 방문한 URL의 절대 경로를 전달합니다. (로그인이 성공하면 이 경로로 다시 지정됩니다.)
사용자 정의 로그인 URL이 필요하면 settings에서 로그인해야 합니다.py 파일에서 LOGIN을 통해URL을 수정합니다.
예:
LOGIN_URL = '/login/'  #                

create_user()
auth에서 제공하는 새로운 사용자를 만드는 방법은 필요한 인자 (username,password) 등을 제공해야 합니다.
사용법:
from django.contrib.auth.models import User

user = User.objects.create_user(username='   ',password='  ',email='  ',...)

create_superuser()
auth에서 제공하는 새로운 슈퍼 사용자를 만드는 방법은 필요한 인자 (username,password) 등을 제공해야 합니다.
사용법:
from django.contrib.auth.models import User

user = User.objects.create_superuser(username='   ',password='  ',email='  ',...)


check_password(password)
auth에서 제공하는 암호가 정확한지 확인하는 방법은 현재 요청한 사용자의 암호를 제공해야 합니다.
암호가 True로 올바르게 반환되지 않으면 False가 반환됩니다.
사용법:
ok = user.check_password('  ')


set_password(password)
auth에서 제공하는 암호를 수정하는 방법으로 설정할 새 암호를 매개 변수로 수신합니다.
주의: 설정이 완료되면 반드시 사용자 대상을 호출하는save 방법!!!
사용법:
user.set_password(password='')

user.save()


암호 수정의 간단한 예
@login_required

def set_password(request):

    user = request.user

    err_msg = ''

    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:

                err_msg = '       '

            elif new_password != repeat_password:

                err_msg = '       '

            else:

                user.set_password(new_password)

                user.save()

                return redirect("/login/")

        else:

            err_msg = '       '

    content = {

        'err_msg': err_msg,

    }

    return render(request, 'set_password.html', content)


User 객체의 속성
User 객체 속성:username,password
is_staff: 사용자가 사이트의 관리 권한을 가지고 있는지 여부.
is_active: 사용자의 로그인을 허용할 지 여부입니다.false로 설정하면 사용자를 삭제하지 않는 전제에서 사용자의 로그인을 금지할 수 있습니다.
디렉토리로 돌아가기
3 기본 auth 확장사용자 테이블
이 내장된 인증 시스템은 이렇게 사용하기 쉽지만auth사용자 테이블 필드는 모두 고정된 몇 개입니다. 프로젝트에서 직접 사용할 수 없습니다.
예를 들어, 나는 사용자의 휴대전화 번호를 저장하는 필드를 추가하고 싶은데, 어떻게 해야 합니까?
똑똑한 당신은 다른 시계를 새로 만들고 일대일과 내장된auth 를 통해사용자 테이블 연결, 이렇게 하면 요구를 충족시킬 수 있지만 더 좋은 실현 방식은 없을까요?
답은 있지.
내장된 AbstractUser 클래스를 계승하여 모델 클래스를 정의할 수 있습니다.
이렇게 하면 프로젝트 수요에 따라 유연하게 사용자 표를 디자인할 수 있을 뿐만 아니라 Django의 강력한 인증 시스템도 사용할 수 있다.
from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):

    """

         

    """

    nid = models.AutoField(primary_key=True)

    phone = models.CharField(max_length=11, null=True, unique=True)

    

    def __str__(self):

        return self.username

참고:
내장된 auth 를 위의 방식으로 확장합니다.user표 다음에settings에 있어야 합니다.py에서 Django에게 내가 새로 정의한 UserInfo표를 사용하여 사용자 인증을 하고 있다고 알려주었다.쓰기 방법은 다음과 같습니다.
#   Django   User ,         

AUTH_USER_MODEL = "app .UserInfo"

다시 참고:
새 인증 시스템에 사용할 테이블을 지정하면 데이터베이스에 이 테이블을 다시 만들어야 합니다. 기본적인auth 를 계속 사용할 수 없습니다.user표입니다.

좋은 웹페이지 즐겨찾기