Django的權限系統很簡單,它可以賦予users或groups中的users權限。
Django admin後台就使用了該權限系統,不過也可以用到你自己的程式碼中。
User物件有兩個ManyToManyField字段,groups和user_permissions
groups = models.ManyToManyField(Group, ver name=_('Trs'),
user> s 片to. A user will '
'get all permissions granted to each of '? 'their groups.'),
related_name="user_set", related_query_name="user")
user_permissions = models.ManyToManyField(Permission,username permissions = models.ManyToManyField(Permission,username_Permissions = name= ) permissions'), blank=True,
help_text=_('Specific permissions for this user.'),
related_name="user_set", related_djryname="şoango", relateds"
myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.clear()
myuser. user_permissions = [permission_list]myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions..權限是作為一個Model存在的,建立一個權限就是建立一個Permission Model的實例。
@python_2_unicode_compatible
class Permission(models.Model):
"""
The permissions system PRovides a way to assign permissions to specus 🜎 The permission system is used by the Django admin site, but may also be
useful in your own code. The Django admin site uses permissions as follows:
- The "add" permission
- The "add" permission- The "add" permission
及an object. - The "change" permission limits a user's ability to view the change
list, view the "change" form and change an object.
- The "delete permission mission 錯誤 - The "delete permission mission mis值set globally per type of object, not per specific object
instance. It is possible to say "Mary may change news stories," but it's
not currently possible to say "Mary may change news stories, but only the
ones she created herself" or "Mary may only change news stories。 CharField(_('name '), max_length=255)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_('codename'), max_length=100)
Managermis
verbose_name = _( 'permission')
verbose_name_plural = _('permissions')
unique_together = (('content_type', 'codename'),) __% _p 'codename')
def __str__( 。 six.text_type(self.name))
def natural_key(self):
return (self.codename,) + self.content_type.natural_key()
natural_key.dependencies = ['contenttypes。 50個字元或更少,例如,’Can Vote‘
content_type:必需,一個對於django_content_type資料庫table的引用,table中含有每個應用中的Model的記錄。
codename:必需,100個字元或更少,例如,'can_vote'。
如果要為某個Model建立權限:
from django.db import models
class Vote(models.Model):
...
class Mmiscan:"mis misd "),)
如果這個Model在應用foo中,則權限表示為'foo.can_vote',檢查某個使用者是否具有權限myuser.has_perm('foo.can_vote')
預設權限如果已經在INSTALLED_APPS配置了django.contrib.auth,它會保證為installed applications中的每個Django Model建立3個缺省權限:add, change 和delete。
這些權限會在你第一次執行 manage.py migrate(1.7之前為syncdb) 時建立。當時所有的models都會建立權限。在這之後創建的新models會在再次運行 manage.py migrate時創建這些預設權限。這些權限與admin管理介面中的創建,刪除,修改行為是一一對應的。
假設你有一個應用foo ,其中有一個模型Bar, 你可以用下述方法來測試基本權限:
add: user.has_perm('foo.add_bar')
change: user.has_perm('foo. change_bar')delete: user.has_perm('foo.delete_bar')
權限模型( Permission model)一般不直接使用。
組Groups
組也存在的Model:
@python_2_unicode_compatible
class Group(models.Model):"""
geneation """。 some other label, to those users. A user can belong to any number of
groups.
A user in a group automatically has all the permissions granted to that
group mis at the mission orat, coonectronw misnable Smission Smisity, 錯誤edit_home_page, any user in that group will have that permission.
Beyond permissions, groups are a convenient way to categorize users to
apply some label, or extended functionals function functionalh. and you could write code that would
do special things to those users -- such as giving them access to a
members-only portion of your site, or sending them s-only email name = models.CharField(_ ('name'), max_length=80, unique=True)
permissions = models.ManyToManyField(Permission,
verbose_name=_('permissions'), verbose_name=_('permissions'), .
class Meta:
verbose_name = _('group')
verbose_name_plural = _('groups')
def __str__(self):
selfself : return (self.name,)
字段fields:
name:必需,80個字元或更少,例如, 'Awesome Users'。
permissions:ManyToManyField to Permission
permissions:ManyToManyField to Permission
group.permissions = [permission_list]
group.permissions.add(permission, permission, ...)
group.permission.removemission. .clear()
Programmatically creating permissions
除了可以使用Model meta來建立權限,也可以直接用程式碼建立。
例如,為myapp應用中的BlogPost模型建立一個can_publish權限:
from myapp.models import BlogPost
from django.contrib.auth.models import Group, Permissionfrom django.contrib.auth.models importb. content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(codename='can_publish',
Can Publish Posts',
content_type=content_type)
from django.contrib.auth.models import Permission, User
from django.shortcuts import get_object_or_404
def user_gains_perms(request, user_id):user_obpid #權限檢查會快取現在的權限集合
user.has_perm('myapp.change_bar')
permission = Permission.objects.get(codename='change_bar')
user.user_permissions.user(permission) 緩存has_perm(' myapp.變bar') # 真
. ..
權限裝飾器
permission_required(perm[, login_url=None, raise_exception=False])
檢查使用者是否具有某個權限,類似於@login_required()
檢查使用者是否具有某個權限,類似於@login_required()
. import permission_required
@permission_required('polls.can_vote', login_url='/loginpage/')
在模板中的權限
. { perms }}中,是django.contrib.auth.context_processors.PermWrapper實例。
{{ perms.foo }}
上面的單一屬性是User.has_module_perms的代理。如果user擁有foo中的任一權限,則為True
上面的兩層屬性查詢是User.has_perm的代理,如果用戶擁有foo.can_vote權限則為True 。
例如:
You have permission to do something in the foo app.
com{% if perms.foo.can permp. vote! {% endif %}
{% if perms.foo.can_drive %}
You can drive!
{% endif %}
{% else %}
You don't have permission to do anything in the foo app.
{% endif %}
或:
{% if 'foo' in perms %}
{% if 'foo' in perms %}
% if ' in perms %}
In lookup works, too.
{% endif %}
中文網(www.php.cn)!

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

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

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

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

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

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

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


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器