mysql> desc auth_permission; +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | content_type_id | int(11) | NO | MUL | NULL | | | codename | varchar(100) | NO | | NULL | | +-----------------+--------------+------+-----+---------+----------------+从上述表结构可以看出,Permission 权限表主要定义了 name、content_type_id、codename 三个字段,其中它的 content_type_id 为外键关联字段,它的各个字段的含义如下:name 表示权限名称,字符最大长度为 255;content_type 表示与 ContentType 是外键关联关系,这张表主要用于记录 App 与 model 的信息,最后一个字段 codename 代表权限的名称编码值,最多允许 100 个字符长度。它的表结构如下:
mysql> desc django_content_type; +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | app_label | varchar(100) | NO | MUL | NULL | | | model | varchar(100) | NO | | NULL | | +-----------+--------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec)
class Permission(models.Model): name = models.CharField(_('name'), max_length=255) content_type = models.ForeignKey( ContentType, models.CASCADE, verbose_name=_('content type'), ) codename = models.CharField(_('codename'), max_length=100) objects = PermissionManager() #元数据项 class Meta: verbose_name = _('permission') verbose_name_plural = _('permissions') #联合唯一即联合约束 unique_together = (('content_type', 'codename'),) ordering = ('content_type__app_label', 'content_type__model', 'codename') def __str__(self): return "%s | %s | %s" % ( self.content_type.app_label, self.content_type, self.name, )
mysql> select * from auth_permission where content_type_id=4; +----+-----------------+-----------------+-------------+ | id | name | content_type_id | codename | +----+-----------------+-----------------+-------------+ | 13 | Can add user | 4 | add_user | | 14 | Can change user | 4 | change_user | | 15 | Can delete user | 4 | delete_user | | 16 | Can view user | 4 | view_user | +----+-----------------+-----------------+-------------+ 4 rows in set (0.01 sec)Model 内置的权限被定义在 Django 如下模块中:
django.db.models.options.Options
在定义的 Options 类中包含了 default_permisssions 属性,它指定了这以上的四种权限,如下所示:default_permissions = ('add', 'change', 'delete', 'view')
这几个权限在实际的开发业务中,可以根据需求进行相应的设置,同时还可以应用到 Django 的后台管理系统中,实现对 Model 的操作,当然这需要用户有访问管理后台的权限。本文链接:http://task.lmcjl.com/news/5330.html