検索
ホームページバックエンド開発Python チュートリアルDjango ユーザー認証システム (3) グループと権限

Django の権限システムは非常にシンプルで、ユーザーまたはグループ内のユーザーに権限を付与できます。

Django 管理バックエンドはこの権限システムを使用しますが、独自のコードでも使用できます。ユーザーは「

」の各グループに付与されるすべての権限を取得します。 Ermissions = Models.manytomanyField (Permission,

Verbose_name = _ ('ユーザー権限'),blank=True,

help_text=_('これに対する特定の権限user.'),

relationship_name="user_set", relationship_query_name="user")


他の django モデルと同様にアクセスできます:

myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.remove(グループ, グループ, ...)
myuser.groups.clear()
myuser.user_permissions = [permission_list]

myuser.user_permissions.add(許可, 許可, ...)

myuser.user_permissions.remove(permission, Permission, ...)

myuser.user_permissions.clear()



Permissions

権限を確立するには、権限モデルのインスタンスを作成します。

@python_2_unicode_compatibility
class Permission(models.Model):
"""

権限システムは、特定の

ユーザーおよびユーザーのグループに権限を割り当てる方法を提供します。

権限システムは、Django 管理サイトによって使用されますですが、独自のコードでも役立つ可能性があります

。Django 管理サイトでは、次のようなアクセス許可が使用されます。


- 「追加」アクセス許可は、ユーザーが「追加」フォームを表示したり、オブジェクトを追加したりする機能を制限します。
- 「 「変更」権限は、変更
リストの表示、「変更」フォームの表示、オブジェクトの変更を行うユーザーの機能を制限します。
- 「削除」権限は、オブジェクトを削除する機能を制限します。

権限はオブジェクトの種類ごとにグローバルに設定されます。特定のオブジェクト
インスタンスごとではなく、「メアリーはニュース記事を変更するかもしれない」と言うのは可能ですが、「メアリーはニュース記事を変更するかもしれないが、彼女が自分で作成した
ものだけを変更するかもしれない」または「メアリーはニュース記事のみを変更するかもしれない」と言うのは
現時点では不可能です。
特定のステータスまたは公開日を持つニュース記事を変更します。"

3 つの基本的な権限 (追加、変更、削除) が、Django モデルごとに自動的に
作成されます。
"""
name = models.CharField(_( 'name '), max_length=255)
content_type = models.ForeignKey(ContentType)
コードネーム = models.CharField(_('codename'), max_length=100)
オブジェクト = PermissionManager()

class Meta:
verbose_name = _( '許可')
冗長名複数 = _('許可')
unique_together = (('content_type', 'codename'),)
順序付け = ('content_type__app_label', 'content_type__model',
'codename')

def __str__(self):
through ’ s ’ through ’s ’s ’ s ‐‐‐‐ out to 6.text_type(self.content_type),
)

def Natural_key(self):
return (self.コードネーム、) + self.content_type.natural_key()
Natural_key.dependency = ['contenttypes.contenttype']


fields フィールド

name: 必須。 50 文字以下、例: 「Can Vote」

content_type: 必須。アプリケーション内の各モデルのレコードが含まれる django_content_type データベース テーブルへの参照。

コード名: 必須、100 文字以下、例: 「can_vote」。

モデルの権限を作成したい場合:

from django.db import models

class Vote(models.Model):
...

class Meta:
Permissions = (("can_vote", "Can投票 "),)

このモデルがアプリケーション foo にある場合、権限は 'foo.can_vote' として表現され、ユーザーが権限 myuser.has_perm('foo.can_vote') を持っているかどうかを確認します

デフォルトの権限

django.contrib.auth は INSTALLED_APPS で構成されており、インストールされているアプリケーションの Django モデルごとに 3 つのデフォルトのアクセス許可 (追加、変更、削除) が確実に作成されます。

これらの権限は、manage.py merge を初めて実行するときに作成されます (1.7 より前の syncdb)。その時点で、すべてのモデルに権限が確立されます。これ以降に作成される新しいモデルには、manage.py merge が再度実行されるときに作成されるこれらのデフォルトのアクセス許可が設定されます。これらの権限は、管理管理インターフェイスでの作成、削除、および変更の動作に対応します。

モデル Bar を持つアプリケーション foo があると仮定すると、次のメソッドを使用して基本的な権限をテストできます:

add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar' )
delete: user.has_perm('foo.delete_bar')
Permissionモデル(Permissionモデル)は、通常、直接使用されません。

グループ

グループはモデルとしても存在します:

@python_2_unicode_compatibility
class Group(models.Model):
"""
グループは、ユーザーを分類して権限や他のラベルをユーザーに適用する一般的な方法です。ユーザーは、任意の数の
グループに所属できます。

グループ内のユーザーには、その
グループに付与されているすべての権限が自動的に付与されます。

グループは、権限を超えてユーザーを分類するのに便利な方法です。
いくつかのラベルや拡張機能をそれらに適用すると、
グループ「特別ユーザー」を作成し、それらのユーザーに特別な操作を
するコードを作成できます。サイトのメンバー限定部分、またはメンバー限定の電子メール
メッセージを送信します。
"""
name = models.CharField(_ ('name'), max_length=80, unique=True)
権限 = models.ManyToManyField (許可,
)verbose_name=_('permissions'),blank=True)

オブジェクト = GroupManager()

class Meta:
Verbose_name = _ ('グループ')
Verbose_name_plural = _ ('グループ')

DEF __Str __ (Self):
Return Self.name

Def Nature_key (Sel):
Return (SELN f.Name,) フェーズフィールドフィールド:

name: 必須、80 文字以下、例: 'Awesome Users' 。

permissions:ManyToManyFieldからPermissionへ

group.permissions = [permission_list]

group.permissions.add(permission, 許可, ...)

group.permissions.remove(permission, 許可, ...)

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.objeds.create(codename = 'can_publish'、

name = 'can publise "、

content_type = content_type) user_permissions 属性を使用してユーザー オブジェクトを指定するか、permission 属性を使用してグループに割り当てます。


権限のキャッシュ

ユーザーに新しい権限が与えられた場合、すぐにチェックすると、ユーザーの権限はキャッシュされません。最も簡単な方法は、User オブジェクトを再フェッチすることです。

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)
#Permission チェックは現在の権限をキャッシュしますSet
user.has_perm('myapp.change_bar')

Permission = 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

..

Permissiondecorator

permission_required(perm[,login_url=None, raise_Exception=False])

django.contrib.auth の @login_required()

と同様に、ユーザーが特定の権限を持っているかどうかを確認します。デコレータインポート許可_required

@permission_required('polls.can_vote',login_url='/loginpage/')
def my_view(request):
...

テンプレート内の権限

ユーザーの権限はテンプレート変数に保存されます{ { perms }} は django.contrib.auth.context_processors.PermWrapper インスタンスです。

{{ perms.foo }}

上記の 1 つの属性は User.has_module_perms のプロキシです。ユーザーが foo で何らかの権限を持っている場合、それは True

{{ perms.foo.can_vote }}

ユーザーが foo.can_vote 権限を持っている場合、上記の 2 レベルの属性クエリは User.has_perm のプロキシになります。 、 それは本当です 。

例:

{% if perms.foo %}
で何かをする権限があります。 else %}

foo アプリで何もする権限がありません。 </P> PHP 中国語 Web サイト (www.php.cn) に注意してください。




声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
怎么将Django项目迁移到linux系统中怎么将Django项目迁移到linux系统中Jun 01, 2023 pm 01:07 PM

Django项目配置修改我们需要把原先的Django项目进行修改才能更好地进行项目迁移工作,首先需要修改的是settings.py文件。由于项目上线之后不能让用户看到后台的运行逻辑,所以我们要把DEBUG改成False,把ALLOWED_HOSTS写成‘*’,这样是为了允许从不同主机进行访问。由于linux中如果不加这句可能会出现文件找不到的情况,所以我们要把模板的路径进行拼接。由于做Django项目肯定进行过数据库的同步,所以我们要把migrations

centos+nginx+uwsgi部署django项目上线的方法centos+nginx+uwsgi部署django项目上线的方法May 15, 2023 am 08:13 AM

我django项目叫yunwei,主要app是rabc和web,整个项目放/opt/下如下:[root@test-codeopt]#lsdjango_virtnginxredisredis-6.2.6yunwei[root@test-codeopt]#lsyunwei/manage.pyrbacstatictemplatesuwsgiwebyunwei[root@test-codeopt]#lsyunwei/uwsgi/cut_log.shloguwsgi.iniuwsgi.loguwsgi.p

Django框架中的数据库迁移技巧Django框架中的数据库迁移技巧Jun 17, 2023 pm 01:10 PM

Django是一个使用Python语言编写的Web开发框架,其提供了许多方便的工具和模块来帮助开发人员快速地搭建网站和应用程序。其中最重要的一个特性就是数据库迁移功能,它可以帮助我们简单地管理数据库模式的变化。在本文中,我们将会介绍一些在Django中使用数据库迁移的技巧,包括如何开始一个新的数据库迁移、如何检测数据库迁移冲突、如何查看历史数据库迁移记录等等

Django框架中的文件上传技巧Django框架中的文件上传技巧Jun 18, 2023 am 08:24 AM

近年来,Web应用程序逐渐流行,而其中许多应用程序都需要文件上传功能。在Django框架中,实现上传文件功能并不困难,但是在实际开发中,我们还需要处理上传的文件,其他操作包括更改文件名、限制文件大小等问题。本文将分享一些Django框架中的文件上传技巧。一、配置文件上传项在Django项目中,要配置文件上传需要在settings.py文件中进

如何用nginx+uwsgi部署自己的django项目如何用nginx+uwsgi部署自己的django项目May 12, 2023 pm 10:10 PM

第一步:换源输入命令换掉Ubuntu的下载源sudonano/etc/apt/sources.list将以下全部替换掉原文件,我这里用的是阿里的源,你也可以换其他的。debhttp://mirrors.aliyun.com/ubuntu/bionicmainrestricteddebhttp://mirrors.aliyun.com/ubuntu/bionic-updatesmainrestricteddebhttp://mirrors.aliyun.com/ubuntu/bionicunive

使用Django构建RESTful API使用Django构建RESTful APIJun 17, 2023 pm 09:29 PM

Django是一个Web框架,可以轻松地构建RESTfulAPI。RESTfulAPI是一种基于Web的架构,可以通过HTTP协议访问。在这篇文章中,我们将介绍如何使用Django来构建RESTfulAPI,包括如何使用DjangoREST框架来简化开发过程。安装Django首先,我们需要在本地安装Django。可以使用pip来安装Django,具体

Django框架中的多数据库支持技巧Django框架中的多数据库支持技巧Jun 18, 2023 am 10:52 AM

Django是一款流行的Pythonweb框架,其出色的ORM(对象关系映射)机制让开发者能够轻松操作数据库。但是在一些实际项目中,需要连接多个数据库,这时候就需要一些技巧来保证项目的稳定性和开发效率。在Django中,多数据库的支持是基于Django框架自身提供的功能而实现的。在这里,我们将介绍一些多数据库支持的技巧,以帮助你在Django的开发中更好地

使用Python Django框架构建博客网站使用Python Django框架构建博客网站Jun 17, 2023 pm 03:37 PM

随着互联网的普及,博客在信息传播和交流方面扮演着越来越重要的角色。在此背景下,越来越多的人开始构建自己的博客网站。本文将介绍如何使用PythonDjango框架来构建自己的博客网站。一、PythonDjango框架简介PythonDjango是一个免费的开源Web框架,可用于快速开发Web应用程序。该框架为开发人员提供了强大的工具,可帮助他们构建功能丰

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境