백엔드 개발 파이썬 튜토리얼 Django의 auth 모듈(사용자 인증)에 대한 자세한 설명

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

Apr 17, 2018 am 10:41 AM
auth django 사용자

이 글은 주로 Django의 auth 모듈(사용자 인증)에 대한 자세한 설명을 소개하고 있으니 참고하시기 바랍니다. 함께 살펴보겠습니다

auth 모듈은 로그인 인증 방법을 캡슐화한 것입니다. 이전에는 사용자가 입력한 사용자 이름과 비밀번호를 얻은 후 사용자 테이블에 쿼리하여 해당 개체가 있는지 확인해야 했습니다. 사용자 이름과 비밀번호가 일치합니다.

인증 모듈을 사용하면 사용자의 로그인 정보가 데이터베이스에 존재하는지 쉽게 확인할 수 있습니다.

또한 인증은 사용자가 로그인했는지 여부를 쉽게 확인할 수 있도록 세션을 캡슐화합니다.

auth의 메서드

인증 모듈 방법을 사용하려면 먼저 인증 모듈을 가져와야 합니다

from django.contrib import auth
로그인 후 복사

django.contrib.auth는 다양한 방법을 제공하며 여기서는 주로 그 중 4가지 방법을 소개합니다:

1, authenticate()

사용자 인증, 즉 사용자 이름과 비밀번호가 올바른지 확인하는 기능 제공 , 일반적으로 두 개의 키워드 매개변수인 사용자 이름과 비밀번호가 필요합니다.

인증 정보가 유효하면 사용자 개체가 반환됩니다. authenticate()는 사용자를 인증한 인증 백엔드를 식별하기 위해 User 객체에 속성을 설정하며, 이 정보는 후속 로그인 프로세스에서 필요합니다. authenticate() 없이 데이터베이스에서 직접 가져온 User 객체에 로그인하려고 하면 오류가 보고됩니다! !

user = authenticate(username='someone',password='somepassword')
로그인 후 복사

2, login(HttpRequest, user)

이 함수는 HttpRequest 개체와 인증된 User 개체를 허용합니다.

이 함수는 Django의 세션 프레임워크를 사용하여 인증된 사용자 업로드 세션 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 객체를 받아들이고 반환 값이 없습니다. 이 함수가 호출되면 현재 요청에 대한 모든 세션 정보가 지워집니다. 사용자가 로그인하지 않은 경우에도 이 기능을 사용할 때 오류가 보고되지 않습니다.

from django.contrib.auth import logout
  
def logout_view(request):
  logout(request)
 # Redirect to a success page.
로그인 후 복사

4.is_authenticated() of the user object

Requirements:

1 사용자는 로그인 후에 특정 페이지에만 접근할 수 있습니다.

2 사용자가 로그인하지 않고 페이지에 접근하면, 로그인 페이지로 바로 이동합니다

3 사용자가 리디렉션된 로그인 인터페이스에서 로그인을 완료하면 액세스가 자동으로 이전에 방문한 주소로 이동합니다

방법 1:

인증의 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가 데코레이터를 설계했습니다. 이 상황에서는 login_requierd( )

from django.contrib.auth.decorators import login_required
   
@login_required
def my_view(request):
 ...
로그인 후 복사

사용자가 로그인하지 않은 경우 Django의 기본 로그인 URL '/accounts/login/'으로 이동합니다. (이 값은 다음을 통해 설정 파일에서 수정할 수 있습니다. 로그인_URL). 그리고 현재 액세스 URL의 절대 경로를 전달합니다(로그인에 성공하면 이 경로로 리디렉션됩니다).

사용자 개체

사용자 개체 속성: 사용자 이름, 비밀번호(필수) 비밀번호는 해시 알고리즘을 사용하여 데이터베이스에 저장됩니다.

is_staff: 사용자에게 웹사이트에 대한 관리 권한이 있는지 여부

is_active: 여부. user는 로그인이 허용됩니다. ``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를 반환합니다.

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)
로그인 후 복사

Create User 테이블을 직접

위의 모든 작업은 django가 자동으로 생성한 auth_user 테이블에 대한 것이라는 점에 유의하세요. 이 테이블의 구조를 살펴보세요

이는 django가 자동으로 생성한 사용자 테이블이며, 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)
  ......
로그인 후 복사

需要注意的是,UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密

2、这样写完之后,还需要在setting.py文件里配置:

AUTH_USER_MODEL = 'blog.UserInfo'
로그인 후 복사

这样,django就知道从blog项目下的models去查找UserInfo这张表了

相关推荐:

Django的cookie使用详解

Django中的Ajax使用方法

위 내용은 Django의 auth 모듈(사용자 인증)에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Xiaohongshu 계정을 사용하여 사용자를 찾는 방법은 무엇입니까? 내 휴대폰 번호를 찾을 수 있나요? Xiaohongshu 계정을 사용하여 사용자를 찾는 방법은 무엇입니까? 내 휴대폰 번호를 찾을 수 있나요? Mar 22, 2024 am 08:40 AM

소셜 미디어의 급속한 발전으로 Xiaohongshu는 가장 인기 있는 소셜 플랫폼 중 하나가 되었습니다. 사용자는 Xiaohongshu 계정을 만들어 자신의 개인 신원을 표시하고 다른 사용자와 소통하고 상호 작용할 수 있습니다. 사용자의 Xiaohongshu 번호를 찾으려면 다음의 간단한 단계를 따르세요. 1. Xiaohongshu 계정을 사용하여 사용자를 찾는 방법은 무엇입니까? 1. Xiaohongshu 앱을 열고 오른쪽 하단에 있는 "검색" 버튼을 클릭한 다음 "메모" 옵션을 선택합니다. 2. 노트 목록에서 찾고자 하는 사용자가 게시한 노트를 찾아보세요. 클릭하시면 메모 세부정보 페이지로 이동합니다. 3. 노트 상세페이지에서 해당 사용자의 아바타 아래 '팔로우' 버튼을 클릭하여 해당 사용자의 개인 홈페이지로 진입합니다. 4. 이용자 개인 홈페이지 우측 상단의 점 3개 버튼 클릭 후 '개인정보' 선택

슈퍼유저로 Ubuntu에 로그인 슈퍼유저로 Ubuntu에 로그인 Mar 20, 2024 am 10:55 AM

Ubuntu 시스템에서는 루트 사용자가 일반적으로 비활성화되어 있습니다. 루트 사용자를 활성화하려면 passwd 명령을 사용하여 비밀번호를 설정한 다음 su- 명령을 사용하여 루트로 로그인할 수 있습니다. 루트 사용자는 무제한 시스템 관리 권한을 가진 사용자입니다. 그는 파일, 사용자 관리, 소프트웨어 설치 및 제거, 시스템 구성 변경에 액세스하고 수정할 수 있는 권한을 가지고 있습니다. 루트 사용자와 일반 사용자 사이에는 분명한 차이가 있습니다. 루트 사용자는 시스템에서 가장 높은 권한과 더 넓은 제어 권한을 갖습니다. 루트 사용자는 일반 사용자가 할 수 없는 중요한 시스템 명령을 실행하고 시스템 파일을 편집할 수 있습니다. 이 가이드에서는 Ubuntu 루트 사용자, 루트로 로그인하는 방법, 일반 사용자와 어떻게 다른지 살펴보겠습니다. 알아채다

튜토리얼: Ubuntu 시스템에서 일반 사용자 계정을 삭제하는 방법은 무엇입니까? 튜토리얼: Ubuntu 시스템에서 일반 사용자 계정을 삭제하는 방법은 무엇입니까? Jan 02, 2024 pm 12:34 PM

Ubuntu 시스템에 많은 사용자가 추가되었습니다. 더 이상 사용하지 않는 사용자를 삭제하고 싶습니다. 아래의 자세한 튜토리얼을 살펴보겠습니다. 1. 터미널 명령줄을 열고 userdel 명령을 사용하여 지정된 사용자를 삭제합니다. 2. 삭제 시 반드시 일반 사용자 디렉터리에 있어야 합니다. 아래 그림과 같이 이 권한이 없습니다. 3. 삭제 명령을 실행한 후 실제로 삭제되었는지 어떻게 판단할 수 있나요? 다음으로 아래 그림과 같이 cat 명령을 사용하여 passwd 파일을 엽니다. 4. 삭제된 사용자 정보가 더 이상 passwd 파일에 없는 것을 볼 수 있으며 이는 아래 그림과 같이 사용자가 삭제되었음을 증명합니다. 5. 그런 다음 홈 파일을 입력합니다.

sudo란 무엇이며 왜 중요한가요? sudo란 무엇이며 왜 중요한가요? Feb 21, 2024 pm 07:01 PM

sudo(수퍼유저 실행)는 일반 사용자가 루트 권한으로 특정 명령을 실행할 수 있도록 하는 Linux 및 Unix 시스템의 핵심 명령입니다. sudo의 기능은 주로 다음 측면에 반영됩니다. 권한 제어 제공: sudo는 사용자에게 일시적으로 수퍼유저 권한을 얻을 수 있는 권한을 부여하여 시스템 리소스와 민감한 작업을 엄격하게 제어합니다. 일반 사용자는 필요할 때만 sudo를 통해 임시 권한을 얻을 수 있으며, 항상 슈퍼유저로 로그인할 필요는 없습니다. 향상된 보안: sudo를 사용하면 일상적인 작업 중에 루트 계정을 사용하지 않아도 됩니다. 모든 작업에 루트 계정을 사용하면 올바르지 않거나 부주의한 작업에는 전체 권한이 부여되므로 예기치 않은 시스템 손상이 발생할 수 있습니다. 그리고

Django와 Flask: Python 웹 프레임워크 비교 분석 Django와 Flask: Python 웹 프레임워크 비교 분석 Jan 19, 2024 am 08:36 AM

Django와 Flask는 모두 Python 웹 프레임워크의 리더이며 둘 다 고유한 장점과 적용 가능한 시나리오를 가지고 있습니다. 이 기사에서는 이 두 프레임워크를 비교 분석하고 구체적인 코드 예제를 제공합니다. 개발 소개 Django는 모든 기능을 갖춘 웹 프레임워크이며, 주요 목적은 복잡한 웹 애플리케이션을 신속하게 개발하는 것입니다. Django는 ORM(Object Relational Mapping), 양식, 인증, 관리 백엔드 등과 같은 다양한 내장 기능을 제공합니다. 이러한 기능을 통해 Django는 대규모 처리를 수행할 수 있습니다.

Django 프레임워크의 장점과 단점: 알아야 할 모든 것 Django 프레임워크의 장점과 단점: 알아야 할 모든 것 Jan 19, 2024 am 09:09 AM

Django는 웹 개발 라이프사이클의 모든 측면을 포괄하는 완전한 개발 프레임워크입니다. 현재 이 프레임워크는 전 세계적으로 가장 인기 있는 웹 프레임워크 중 하나입니다. Django를 사용하여 자신만의 웹 애플리케이션을 구축하려는 경우 Django 프레임워크의 장점과 단점을 이해해야 합니다. 특정 코드 예제를 포함하여 알아야 할 모든 것이 여기에 있습니다. Django의 장점: 1. 빠른 개발 - Djang은 웹 애플리케이션을 빠르게 개발할 수 있습니다. 풍부한 라이브러리와 내부 기능을 제공합니다.

Linux 시스템의 사용자 비밀번호 저장 메커니즘 분석 Linux 시스템의 사용자 비밀번호 저장 메커니즘 분석 Mar 20, 2024 pm 04:27 PM

Linux 시스템의 사용자 비밀번호 저장 메커니즘 분석 Linux 시스템에서 사용자 비밀번호 저장은 매우 중요한 보안 메커니즘 중 하나입니다. 이 기사에서는 암호화된 비밀번호 저장, 비밀번호 확인 프로세스, 사용자 비밀번호를 안전하게 관리하는 방법을 포함하여 Linux 시스템의 사용자 비밀번호 저장 메커니즘을 분석합니다. 동시에 특정 코드 예제를 사용하여 비밀번호 저장의 실제 작업 프로세스를 보여줍니다. 1. 비밀번호의 암호화된 저장 Linux 시스템에서 사용자 비밀번호는 시스템에 일반 텍스트로 저장되지 않고 암호화되어 저장됩니다. 엘

Django 버전을 업그레이드하는 방법: 단계 및 고려 사항 Django 버전을 업그레이드하는 방법: 단계 및 고려 사항 Jan 19, 2024 am 10:16 AM

Django 버전 업그레이드 방법: 단계 및 고려 사항, 필요한 특정 코드 예제 소개: Django는 더 나은 성능과 더 많은 기능을 제공하기 위해 지속적으로 업데이트되고 업그레이드되는 강력한 Python 웹 프레임워크입니다. 그러나 이전 버전의 Django를 사용하는 개발자의 경우 Django를 업그레이드하는 데 몇 가지 어려움이 있을 수 있습니다. 이 글에서는 Django 버전을 업그레이드하는 방법에 대한 단계와 주의 사항을 소개하고 구체적인 코드 예제를 제공합니다. 1. Djan을 업그레이드하기 전에 프로젝트 파일을 백업하세요.

See all articles