它是django的一套权限机制,URL与权限相关,不同权限访问一个受保护的URL会产生不同反馈。初触django可能在django Auth方面碰到一些困难。
django Auth对数据库表的结构有何要求
entity.py
向Django描述数据表的结构,这个文件的文件名无限制,甚至不是单个文件也可以。
class Permission(Model):
id = PositiveBigIntegerField(verbose_name='权限', primary_key=True)
name = CharField(verbose_name='权限名', max_length=8, null=False)
url = CharField(verbose_name='访问路径', max_length=64, null=False)
class Meta:
db_table = 'permission'
class Role(Model):
id = PositiveSmallIntegerField(verbose_name='角色编号', primary_key=True)
name = CharField(verbose_name='角色名', max_length=8, null=False)
class Meta:
db_table = 'role'
class RolePermission(Model):
id = AutoField(verbose_name='流水号', primary_key=True)
role_id = PositiveSmallIntegerField(verbose_name='角色编号', null=False)
permission_id = PositiveIntegerField(verbose_name='权限', null=False)
class Meta:
unique_together = (("role_id", "permission_id"),)
db_table = 'role_permission'
class RoleUser(Model):
id = AutoField(verbose_name='流水号', primary_key=True)
role_id = PositiveSmallIntegerField(verbose_name='角色编号', null=False)
user_id = PositiveBigIntegerField(verbose_name='账号', null=False)
class Meta:
unique_together = (("role_id", "user_id"),)
db_table = 'role_user'
class User(Model):
id = AutoField(verbose_name='账号', primary_key=True)
password = CharField(verbose_name='密码', max_length=30, null=False)
phone = CharField(verbose_name='手机号', null=False,
unique=True, max_length=15)
lock = BooleanField(verbose_name='挂失标志', null=False, default=False)
... # 可以在这里写更多字段,按照需求设置字段
class Meta: # 指定表名
db_table = 'user'
... # 更多表
settings.py
默认都已经设置好了,不需要修改。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
... # 自定义
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_demo', # 自定义数据库名字
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'POST': 3306,
}
}
...
admin.py
配置文件之一,Django Admin中的表和自定义的表在这里联系起来。
from django.contrib import admin
from Demo.entity import User, Role, Permission
class RoleConfig(admin.ModelAdmin):
"""封装给定模型的所有管理选项和功能。
"""
list_display = ['name', 'id'] # 设置列表可显示的字段
list_filter = ['name', 'id', ] # 设置过滤选项
list_per_page = 5 # 每页显示条目数
list_editable = ['name', ] # 设置可编辑字段
ordering = ['id', ] # 按哪个字段排序
search_fields = ['name', 'id'] # 查询索引
list_display_links = ["id"]
class PermissionConfig(admin.ModelAdmin):
list_display = ["id", "name", "url"]
# 剩下的不写也行
admin.site.register(User)
admin.site.register(Role, RoleConfig) # 在给定的管理类中注册给定的模型
admin.site.register(Permission, PermissionConfig)
然后在项目所在目录cmd控制台敲python manage.py createsuperuser
,然后它提示我表未迁移:
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
然后又敲python manage.py migrate
,Django自己给我建了一大堆表。
不过这表挺详细的了。