Django 의 auth 모듈 에 대한 자세 한 설명(사용자 인증)

7527 단어 Djangoauth
auth 모듈 안내
auth 모듈 은 로그 인 인증 방법 에 대한 패키지 입 니 다.이전에 사용자 가 입력 한 사용자 이름과 비밀 번 호 를 얻 은 후에 사용자 표 에서 사용자 이름과 비밀번호 가 일치 하 는 대상 이 있 는 지 확인 해 야 합 니 다.
auth 모듈 이 있 으 면 사용자 의 로그 인 정보 가 데이터베이스 에 존재 하 는 지 쉽게 검증 할 수 있 습 니 다.
그 밖 에 auth 는 session 에 대해 서 봉인 을 해서 사용자 가 로그 인 했 는 지 확인 할 수 있 습 니 다.
auth 리 방법
auth 모듈 을 사용 하려 면 auth 모듈 을 먼저 가 져 와 야 합 니 다.

from django.contrib import auth
django.contrib.auth 에서 많은 방법 을 제 공 했 습 니 다.여기 서 주로 네 가 지 를 소개 합 니 다.
1 、authenticate()  
사용자 인증 을 제공 합 니 다.즉,사용자 이름과 비밀번호 가 정확 한 지 검증 하 는 것 입 니 다.일반적으로 username 이 필요 합 니 다.  password 두 키워드 매개 변수
인증 정보 가 유효 하면 되 돌려 줍 니 다.  User  대상authenticate()는 user 대상 에 속성 표 지 를 설정 합 니 다.인증 백 엔 드 는 이 사용 자 를 인증 하고 이 정 보 는 뒤의 로그 인 과정 에서 필요 합 니 다.데이터베이스 에서 authenticate()를 거치 지 않 은 사용자 대상 을 직접 꺼 내 려 고 하면 오류 가 발생 합 니 다!!

user = authenticate(username='someone',password='somepassword')
2 、login(HttpRequest, user)
이 함 수 는 HttpRequest 대상 과 인 증 된 User 대상 을 받 습 니 다.
이 함 수 는 django 의 session 프레임 워 크 를 사용 하여 인 증 된 사용자 에 게 session 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 대상 을 받 아들 입 니 다.이 함 수 를 호출 할 때 현재 요청 한 session 정 보 는 모두 삭 제 됩 니 다.이 사용 자 는 로그 인하 지 않 았 더 라 도 이 함 수 를 사용 하면 잘못 보고 하지 않 습 니 다.

from django.contrib.auth import logout
  
def logout_view(request):
  logout(request)
 # Redirect to a success page.
4.user 대상 의 isauthenticated()
요청:
1  사용자 가 로그 인 한 후에 야 일부 페이지 에 접근 할 수 있 습 니 다.
2  사용자 가 로그 인하 지 않 고 이 페이지 에 접근 하면 로그 인 페이지 로 바로 이동 합 니 다.
3  사용 자 는 점프 하 는 로그 인 인터페이스 에서 로그 인 을 완료 한 후,이전에 방문 한 주소 로 자동 으로 이동 합 니 다.
방법 1:
직접 auth 의 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 는 이러한 상황 에 사용 할 장식 기 를 설계 하 였 습 니 다:loginrequierd()

from django.contrib.auth.decorators import login_required
   
@login_required
def my_view(request):
 ...
사용자 가 로그 인하 지 않 으 면 django 기본 로그 인 URL'/acounts/login/'로 이동 합 니 다.(이 값 은 settings 파일 에서 LOGIN 을 통과 할 수 있 습 니 다.URL 수정).전달  현재 url 에 접근 하 는 절대 경로(로그 인 성공 후 이 경로 로 다시 설정 합 니 다).
사용자 개체
사용자 대상 속성:username,password(필수 항목)password 는 해시 알고리즘 으로 데이터베이스 에 저장 합 니 다.
is_staff:사용자 가 사이트 의 관리 권한 을 가지 고 있 습 니까?
is_active:사용자 로그 인 을 허용 할 지 여부 입 니 다.'False'로 설정 하면 사용자 로그 인 을 삭제 하지 않 아 도 됩 니 다.
2.1 、is_authenticated()
실제 User 대상 이 라면 반환 값 은 항상 True 입 니 다.사용자 가 인증 을 통 과 했 는 지 확인 하 는 데 사용 합 니 다.
인증 을 통과 한 다 는 것 은 사용자 가 어떠한 권한 을 가 진 다 는 것 을 의미 하지 않 고 심지어 이 사용자 가 활성화 상태 에 있 는 지 검사 하지 않 는 다.이것 은 사용자 가 인증 을 성공 적 으로 통과 했다 는 것 을 나타 낸다.이 방법 은 매우 중요 합 니 다.배경 에서 request.user.is 를 사용 합 니 다.authenticated()는 사용자 가 로그 인 했 는 지 여 부 를 판단 합 니 다.true 라면 프론트 데스크 에 request.user.name 을 보 여줄 수 있 습 니 다.
2.2 사용자 생 성
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 사용비밀번호 수정

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)
사용자 시트 만 들 기
주의해 야 할 것 은,이상 의 모든 조작 은 django 를 대상 으로 자동 으로 생 성 된 auth 입 니 다.user 표 의,우 리 는 이 표 의 구 조 를 볼 수 있다.

이것 은 django 가 자동 으로 만 든 user 표 입 니 다.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)
  ......

주의해 야 할 것 은 User Info 표 에 auth 가 필요 없다 는 것 입 니 다.user 에서 중복 되 는 필드,예 를 들 어 username 과 password 등 이 있 지만 이 필드 를 직접 사용 할 수 있 습 니 다.그리고 django 는 자동 으로 password 를 암호 화 합 니 다.
2.이렇게 다 쓴 후에 setting.py 파일 에 설정 해 야 합 니 다.

AUTH_USER_MODEL = 'blog.UserInfo'
이렇게 해서 django 는 블 로그 프로젝트 의 models 에서 User Info 시 계 를 찾 을 줄 알 았 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기