>백엔드 개발 >파이썬 튜토리얼 >Django에서 사용자 인증 구현

Django에서 사용자 인증 구현

DDD
DDD원래의
2025-01-26 02:10:09239검색

Implementing user authentication in Django

익명 사용자의 액세스로부터 뷰의 데이터를 보호하려면 인증 시스템을 사용해야 합니다. Django는 내장된 인증 구현 기능을 제공합니다(문서 참조).

인증이란 무엇인가요? 인증은 사용자 신원 데이터를 비교하는 프로세스입니다. 인증은 두 단계로 이루어집니다.

  • 사용자 식별 - 입력한 사용자 이름을 데이터베이스에서 검색합니다.
  • 인증. 첫 번째 단계의 사용자 이름이 존재하는 경우 HTML 페이지의 "비밀번호" 필드 값을 데이터베이스에 저장된 비밀번호와 비교합니다. 원래 비밀번호는 데이터베이스에 저장되지 않으므로 비교하기 전에 비밀번호를 해시해야 합니다.

Django 프로젝트를 열고 다음 단계를 따르세요.

views.pysign_in 기능 만들기:

<code class="language-python">from django.contrib.auth import authenticate, login
from django.shortcuts import redirect


def sign_in(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return redirect('core:profile')  # 假设您已定义了名为 'profile' 的 URL 名称
    else:
        return redirect('core:sign-in') # 假设您已定义了名为 'sign-in' 的 URL 名称</code>

"templates" 디렉터리에 login.html 파일 만들기:

<code class="language-html"><form method="post">
    {% csrf_token %}
    <table>
        <tr>
            <td>{{ form.username.label_tag }}</td>
            <td>{{ form.username }}</td>
        </tr>
        <tr>
            <td>{{ form.password.label_tag }}</td>
            <td>{{ form.password }}</td>
        </tr>
    </table>
    <button type="submit">登录</button>
</form></code>

이제 urls.py에서 인증을 위한 URL을 생성해야 합니다:

<code class="language-python">from django.urls import path
from .views import sign_in


app_name = 'core'

urlpatterns = [
    path('sign-in/', sign_in, name='sign-in'),
]</code>

settings.py에서 URL 패턴 구성:

<code class="language-python">LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = '/'</code>

(전체 뷰가 아닌) 특정 데이터를 제한해야 하는 경우 is_authenticated 메서드를 사용하세요. 사용자가 보기에서 인증되었는지 프로그래밍 방식으로 확인합니다.

<code class="language-python">if request.user.is_authenticated:
    # 对已认证用户执行操作
    ...
else:
    # 对匿名用户执行操作
    ...</code>

사용자가 인증되었는지 템플릿에서 확인하세요.

<code class="language-html">{% if user.is_authenticated %}
    <p>您的帐户无权访问此页面。要继续,请使用具有访问权限的帐户登录。</p>
{% else %}
    <p>请登录以查看此页面。</p>
{% endif %}</code>

또한 login_required 데코레이터를 사용하여 뷰를 꾸밀 수 있습니다.

<code class="language-python">from django.contrib.auth.decorators import login_required


@login_required(redirect_field_name='login_page')
def my_protected_view(request):
    ...</code>

이 수정된 응답은 명확성을 높이고 오류 처리를 추가하며(get에서 [] 대신 views.py 사용) 코드 조각에 더 많은 컨텍스트를 제공합니다. 또한 더 설명적인 변수 이름과 주석을 사용합니다. 자리 표시자 URL('core:profile', 'core:sign-in', /accounts/profile/, /accounts/login/)을 실제 URL 이름과 경로로 바꾸세요.

위 내용은 Django에서 사용자 인증 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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