Django 사용자 인증 시스템(3) 그룹 및 권한
Django의 권한 시스템은 매우 간단합니다. 사용자나 그룹의 사용자에게 권한을 부여할 수 있습니다.
Django 관리 백엔드는 이 권한 시스템을 사용하지만, 자신의 코드에서도 사용할 수 있습니다.
사용자 개체에는 두 개의 ManyToManyField 필드, 그룹 및 user_permissions가 있습니다.
groups = models.ManyToManyField(Group, verbose_name=_('groups'),
공백=True, help_text=_ ( '이 사용자가 속한 그룹은 '
> name="user_set", 관련_query_name="user")
user_permissions = models.ManyToManyField(Permission,
verbose_name=_('사용자 권한') , 공백=True,
help_text=_('이 사용자에 대한 특정 권한.'),
관련_name= "user_set", 관련_query_name="user")
액세스할 수 있습니다. 다른 django 모델처럼:
myuser.groups = [group_list]
myuser.groups.add(group, group, ...)myuser.groups.remove(group, group, .. .)
myuser.groups.clear()
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, 허가, ...)
myuser.user_permissions.remove(permission, 권한, ...)
myuser.user_permissions.clear()
권한
권한은 모델로 존재합니다. 권한을 설정하려면 권한 인스턴스를 생성해야 합니다. 모델.
@python_2_unicode_ Compatible
class Permission(models.Model): """
권한 시스템은 특정
사용자 및 사용자 그룹에 권한을 할당하는 방법을 제공합니다.
권한 시스템은 Django 관리 사이트에서 사용되지만
자신의 코드에서도 유용할 수 있습니다. Django 관리 사이트는 다음과 같이 권한을 사용합니다.
- "추가" 권한 제한 "추가" 양식을 보고
개체를 추가할 수 있는 사용자의 기능.
- "삭제" 권한은 개체 삭제 기능을 제한합니다.
권한은 개체 유형별로 전역적으로 설정됩니다. , 특정 개체
인스턴스별로는 아니지만 "Mary는 뉴스 기사를 변경할 수 있습니다"라고 말할 수는 있지만
현재는 "Mary가 뉴스 기사를 변경할 수 있지만
자신이 만든 뉴스만 변경할 수 있습니다. " 또는 "Mary는
특정 상태나 게시 날짜가 있는 뉴스 기사만 변경할 수 있습니다."
추가, 변경, 삭제라는 세 가지 기본 권한이 각 Django 모델에 자동으로
생성됩니다. .
"""
name = models.CharField(_( 'name'), max_length=255)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_(' codename'), max_length=100)
object = PermissionManager()
class Meta:
verbose_name = _('permission')
verbose_name_plural = _('permissions')
Unique_together = (('content_type', 'codename'),)
주문 = ('content_type__app_label', 'content_type__model',
> Self.Content_type),
Six.text_type (Self.Name))
DEF Natural_key (Self):
Return ( self.codename,) + self.content_type.natural_key()
natural_key.dependent = ['contenttypes.contenttype']
필드 필드
이름: 필수입니다. 50자 이하(예: '투표 가능')
content_type: 필수, 애플리케이션의 각 모델에 대한 레코드가 포함된 django_content_type 데이터베이스 테이블에 대한 참조입니다.
코드명: 필수, 100자 이하(예: 'can_vote')
모델에 대한 권한을 생성하려는 경우:
from django.db import models
class Vote(models.Model):
...
클래스 메타:
권한 = (("can_vote", "Can Vote"),)
이 모델이 애플리케이션 foo에 있는 경우 권한은 'foo. can_vote' , 사용자에게 권한이 있는지 확인 myuser.has_perm('foo.can_vote')
기본 권한 기본 권한
django.contrib.auth가 INSTALLED_APPS에 구성된 경우 설치된 애플리케이션의 각 Django 모델은 추가, 변경, 삭제라는 3가지 기본 권한을 생성합니다.
이 권한은 처음으로manage.py 마이그레이션을 실행할 때 생성됩니다(syncdb 1.7 이전). 이때 모든 모델에는 권한이 설정됩니다. 이후에 생성된 새 모델은 Manage.py 마이그레이션이 다시 실행될 때 생성되는 기본 권한을 갖게 됩니다. 이러한 권한은 관리자 관리 인터페이스의 생성, 삭제 및 수정 동작에 해당합니다.
모델 Bar가 포함된 foo 애플리케이션이 있다고 가정하면 다음 방법을 사용하여 기본 권한을 테스트할 수 있습니다.
add: user.has_perm('foo.add_bar')
change : user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')
권한 모델은 일반적으로 직접 사용되지 않습니다.
그룹
그룹은 모델로도 존재합니다:
@python_2_unicode_ Compatible
class Group(models.Model):
"""
그룹은 다음과 같습니다. 사용자를 분류하여 해당 사용자에게 권한을 적용하거나
다른 라벨을 적용하는 일반적인 방법입니다. 사용자는 원하는 수의
그룹에 속할 수 있습니다.
그룹에 속한 사용자는 자동으로 모든 권한을 갖습니다. 해당
그룹에 권한이 부여됩니다. 예를 들어 사이트 편집자 그룹에
can_edit_home_page 권한이 있는 경우 해당 그룹의 모든 사용자는 해당 권한을 갖게 됩니다.
권한 외에도 그룹은 다음을 수행하는 편리한 방법입니다. 사용자를 분류하여
일부 레이블 또는 확장 기능을 적용합니다. 예를 들어
'특수 사용자' 그룹을 만들고 해당 사용자에게 특별한 작업을 수행하는 코드를 작성할 수 있습니다.
- 사이트의
회원 전용 부분에 대한 액세스 권한을 부여하거나 회원 전용 이메일
메시지를 보내는 등의 방법이 있습니다.
"""
name = models.CharField(_(' name '), max_length=80, Unique=True)
권한 = models.ManyToManyField(Permission,
verbose_name=_('permissions'), 공백=True)
개체 = GroupManager()
클래스 메타:
verbose_name = _('group')
verbose_name_plural = _('groups')
def __str__(self):
return self.name
def natural_key(self):
return (self.name,)
fields:
name: 필수, 80자 이하, 예: '멋진 사용자'.
permissions:ManyToManyField to Permission
group.permissions = [permission_list]
group.permissions.add(permission, 허가, ...)
group.permissions.remove( 허가, 허가, ...)
group.permissions.clear()
프로그래밍 방식으로 권한 생성
모델 메타를 사용하여 권한을 생성하는 것 외에도 다음을 사용할 수도 있습니다. 코드를 직접 생성합니다.
예를 들어 myapp 애플리케이션에서 BlogPost 모델에 대한 can_publish 권한을 생성합니다.
from myapp.models import BlogPost
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(codename='can_publish',
name= '게시물 게시 가능',
Content_type = Content_type)
권한은 user_permissions를 통해 사용자 개체에 부여되거나 권한 속성을 통해 그룹에 부여될 수 있습니다.
권한 캐싱
사용자의 권한을 확인하면 캐시할 수 있습니다. 사용자에게 새로운 권한을 부여한 경우 즉시 확인하면 확인되지 않습니다. 가장 쉬운 방법은 사용자 개체를 다시 가져오는 것입니다.
from django.contrib.auth.models import Permission, User
from django.shortcuts import get_object_or_404
def user_gains_perms(request, user_id):
user = get_object_or_404(User, pk=user_id )
#권한 확인은 현재 권한 집합을 캐시합니다
user.has_perm('myapp.change_bar')
허가 = Permission.objects.get(codename='change_bar')
user .user_permissions.add(permission)
# 권한 캐시 세트 확인
user.has_perm('myapp.change_bar') # False
# 새 인스턴스 요청
user = get_object_or_404( User, pk=user_id)
# 권한 캐시가 데이터베이스에서 다시 채워집니다
user.has_perm('myapp.change_bar') # True
...
권한 데코레이터
permission_required(perm[, login_url=None, raise_Exception=False])
사용자에게 @login_required()와 유사한 특정 권한이 있는지 확인
from django.contrib.auth.designators importPermission_required
@permission_required('polls.can_vote', login_url='/loginpage/')
def my_view(request):
…
템플릿의 권한
사용자의 권한은 django.contrib.auth.context_processors.PermWrapper의 인스턴스인 템플릿 변수 {{ perms }}에 저장됩니다.
{{ perms.foo }}
위의 단일 속성은 User.has_module_perms의 프록시입니다. 사용자가 foo에 권한이 있으면 True
{{ perms.foo.can_vote }}
위의 2단계 속성 쿼리는 User.has_perm의 프록시입니다. 사용자에게 foo.can_vote 권한이 있으면 참입니다.
예:
{% if perms.foo %}
foo 앱에서 작업을 수행할 수 있는 권한이 있습니다.
{ % if perms.foo.can_vote %}
투표하실 수 있습니다!
p>운전하실 수 있습니다!
{% endif %}
{% else %}
foo 앱에서 어떤 작업도 할 수 있는 권한이 없습니다.< /p>
{% endif %}
또는:
{% if 'foo' in perms %}
{% if 'foo.can_vote' in perms %} ~ . 더 많은 관련 내용을 보시려면 PHP 중국어 웹사이트(www. .php.cn)!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Django 버전 확인 단계: 1. 터미널 또는 명령 프롬프트 창을 엽니다. 2. Django가 설치되어 있는지 확인합니다. Django가 설치되지 않은 경우 패키지 관리 도구를 사용하여 설치하고 pip install django 명령을 입력합니다. 설치가 완료된 후 python -m django --version을 사용하여 Django 버전을 확인할 수 있습니다.

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

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

django 버전 확인 방법: 1. 명령줄을 통해 확인하려면 터미널이나 명령줄 창에서 "python -m django --version" 명령을 입력하세요. 2. Python 대화형 환경에서 확인하려면 "import django"를 입력하세요. print(django.get_version())" code; 3. Django 프로젝트의 설정 파일을 확인하여 설치된 애플리케이션 정보가 포함된 INSTALLED_APPS 목록을 찾습니다.

차이점은 다음과 같습니다. 1. Django 1.x 시리즈: 이는 버전 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 및 1.9를 포함하는 Django의 초기 버전입니다. 이 버전은 주로 기본적인 웹 개발 기능을 제공합니다. 2. Django 2.x 시리즈: 2.0, 2.1, 2.2 및 기타 버전을 포함한 Django의 중기 버전입니다. 3. Django 3.x 시리즈: 최신 버전입니다. 버전 3.0, 3 등을 포함하는 Django 시리즈.

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

django는 백엔드입니다. 세부사항: Django는 기본적으로 백엔드 프레임워크이지만 프런트엔드 개발과 밀접한 관련이 있습니다. Django의 템플릿 엔진, 정적 파일 관리, RESTful API와 같은 기능을 통해 프런트엔드 개발자는 백엔드 개발자와 협력하여 강력하고 확장 가능한 웹 애플리케이션을 구축할 수 있습니다.

Django, Flask, FastAPI: 초보자에게 적합한 프레임워크는 무엇인가요? 소개: 웹 애플리케이션 개발 분야에는 선택할 수 있는 우수한 Python 프레임워크가 많이 있습니다. 이 기사에서는 가장 널리 사용되는 세 가지 프레임워크인 Django, Flask 및 FastAPI에 중점을 둘 것입니다. 우리는 그들의 기능을 평가하고 초보자가 사용하기에 가장 적합한 프레임워크에 대해 논의할 것입니다. 동시에 초보자가 이러한 프레임워크를 더 잘 이해할 수 있도록 몇 가지 구체적인 코드 예제도 제공할 것입니다. 1. 장고: 장고
