"Django"제 N+1절 Django 자체 인증 시스템 - auth

7817 단어
개인 홈페이지:lipeiguan.앞으로 개인 홈페이지로 천천히 이동하도록 하겠습니다.
앞에 쓰다
우리는 웹 사이트를 개발할 때 자주 웹 사이트의 사용자 시스템을 실현해야 한다.이때 우리는 사용자 등록, 사용자 로그인, 사용자 인증, 취소, 비밀번호 수정 등 일련의 기능을 실현해야 한다.만약 우리가 모두 스스로 실현한다면, 안 되는 것이 아니라, 단지 약간의 시간을 낭비할 뿐이다.Django는 사용자 인증 시스템 --> auth를 내장하고 기본적으로 auth 를 사용합니다사용자 테이블은 사용자의 데이터를 저장합니다.그럼 이 강력한 사용자 인증 시스템에 대해 알아보겠습니다.
auth 모듈
auth 가져오기
이 모듈을 사용하려면 먼저 그것을 가져와야 한다.
from django.contrib import auth

auth 모듈의 각종 방법
authenticate()
  • 사용자 이름과 암호가 정확한지 확인
  • 이 함수는 사용자 인증 기능을 제공합니다. 일반적으로username,password 두 개의 키워드 인자가 필요합니다.사용자 이름과 비밀번호가 정확하면 User 대상을 되돌려줍니다. authenticate () 는 이 User 대상에 속성을 설정하여 백엔드에서 사용자를 인증했고, 이 정보는 후속 로그인 과정에서 필요합니다.구체적인 용도:
    user = auth.authenticate(request, username="username", password="password")

    login(HttpRequest, user)
  • 로그인
  • 이 함수는 HttpRequest 객체와 인증된 User 객체를 수락합니다.주로 한 사용자가 로그인하는 기능을 실현했는데, 이것은 백엔드에서 이 사용자에게 관련된session 데이터를 생성할 것이다.구체적인 용도:
    from django.shortcuts import render, redirect
    from django.contrib import auth
    
    
    def my_login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            user = auth.authenticate(request, username=username, password=password)
            if user:
                auth.login(request, user)
                # Redirect to a success page.
            else:
                # Return an "invalid login" error message.
        return render(request, "login.html")

    logout(request)
  • 로그아웃 사용자
  • 이 함수는 반환 값이 없는 HttpRequest 객체를 받아들입니다.이 함수를 호출하면 현재 요청한session 정보가 모두 삭제됩니다.이 사용자는 로그인하지 않아도 이 함수를 사용하면 오류가 발생하지 않습니다.구체적인 용도:
    from django.authenticate import auth
    
    
    def logout(request):
        auth.logout(request)
        # Redirect to a success page.
        return redirect('/login/')

    is_authenticated()
  • 현재 요청이 인증을 통과했는지 판단
  • 만약에 한 페이지가 로그인을 해야 접근할 수 있다면 한 사용자가 로그인하지 않은 상태에서 이 페이지를 방문하면 바로 로그인 페이지로 넘어가고 로그인이 완료되면 자동으로 이전 페이지로 넘어갑니다.구체적인 용도:
    def login(request):
        if not request.user.is_authenticated();
            return redirect("%s?next=%s" % (settings.LOGIN_URL, requedt.path))

    Django도 우리를 위해 이 상황에 사용할 장식기를 설계했다.login 참조required()
    login_required()
  • 로그인 체크
  • auth는 어떤 보기에 로그인 검사를 빠르게 추가할 수 있는 장식기 도구를 제공합니다.구체적인 용도:
    from django.contrib.auth.decorators import login_required
    
    
    @login_required
    def index(request):
        ...

    사용자가 로그인하지 않으면 Django의 기본 로그인 URL: 'accounts/login' 으로 이동하여 현재 방문 URL의 절대 경로를 전달합니다. (로그인이 성공하면 이 경로로 다시 지정됩니다.)
    물론 settings에서 로그인할 URL을 사용자 정의할 수 있습니다.py 파일에 다음 코드 추가
    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 = request.user.check_password("  ")

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

    로그인, 암호 수정, 등록, 로그아웃 기능의 예
    로그인:
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            user_obj = auth.authenticate(request, username=username, password=password)
            if user_obj:
                #       
                auth.login(request, user_obj)
                next = request.GET.get("next")
                if next:
                    return redirect(next)
                return redirect('/index/')
        return render(request, "login.html")

    암호를 수정하려면 다음과 같이 하십시오.
    @login_required
    def set_password(request):
        user = request.user
        error_message = ""
        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:
                    error_message = "       "
                elif new_password != repeat_password:
                    error_message = "       "
                else:
                    user.set_password(new_password)
                    user.save()
                    return redirect('/login/')
            else:
                error_message = "       "
                return render(request, "set_password.html", {"error_message": erroe_message})
        return render(request, "set_password.html")

    등록:
    def reg(request):
        error_message = ""
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            repeat_password = request.POST.get("repeat_password")
            if password:
                if password != repeat_password:
                    error_message = "       "
                else:
                    User.objects.create_user(username=username, password=password)
                    return redirect('/login/')
            else:
                error_message = "      "
        return render(request, "reg.html")

    로그아웃:
    def logout(request):
        auth.logout(request)
        return redirect('/login/')

    User 객체의 속성
  • id
  • username: 사용자 이름
  • password: 비밀번호
  • email: 메일박스
  • is_staff: 사용자가 사이트의 관리 권한을 가지고 있는지 여부
  • is_active: 사용자가 로그인할 수 있는지 여부입니다.False로 설정하여 사용자를 삭제하지 않고 로그인을 금지할 수 있음
  • is_superuser: 슈퍼유저인지 여부
  • last_login: 마지막 로그인 시간
  • first_name:명
  • last_name: 성
  • date_joined 확장 기본auth사용자 테이블 Django에 내장된 인증 시스템은 사용하기 좋으나 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표를 사용하여 사용자 인증을 하고 있다고 알려 줍니다.settings에서.py에 다음 코드가 추가됩니다.
    #   Django   User ,        
    AUTH_USER_MODEL = "app .UserInfo"

    주의: 새로운 인증 시스템에 사용할 테이블을 지정하면 데이터베이스에 테이블을 다시 만들어야 합니다. 기본적인auth 를 계속 사용할 수 없습니다.user표입니다.
    전재 대상:https://www.cnblogs.com/BlameKidd/p/11124044.html

    좋은 웹페이지 즐겨찾기