이 글은 주로 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의 auth 모듈(사용자 인증)에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!