django如果要限制用户student对appwork下模型homework的增删改查,在代码或视图函数中应该如何定义
时间: 2024-02-25 09:51:20 浏览: 111
在Django中,限制用户对模型的增删改查可以通过权限控制来实现。具体步骤如下:
1. 在`models.py`中定义模型`Homework`,并在其下方添加相关的权限信息,如下所示:
```python
from django.db import models
from django.contrib.auth.models import User
class Homework(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
permissions = [
("view_homework", "Can view homework"),
("add_homework", "Can add homework"),
("change_homework", "Can change homework"),
("delete_homework", "Can delete homework"),
]
```
2. 在`views.py`中定义视图函数`homework_list`,并在函数中使用`@permission_required`装饰器进行权限控制,如下所示:
```python
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render
from .models import Homework
@login_required
@permission_required('appwork.view_homework', raise_exception=True)
def homework_list(request):
homeworks = Homework.objects.all()
return render(request, 'homework_list.html', {'homeworks': homeworks})
```
在上面的代码中,`@login_required`装饰器用于限制未登录用户的访问,`@permission_required`装饰器用于限制用户的访问权限,`raise_exception=True`表示如果用户没有访问权限,则直接抛出异常。
3. 类似地,你也可以在其他的视图函数中添加权限控制,例如:
```python
@permission_required('appwork.add_homework', raise_exception=True)
def add_homework(request):
# 添加作业
pass
@permission_required('appwork.change_homework', raise_exception=True)
def edit_homework(request, homework_id):
# 编辑作业
pass
@permission_required('appwork.delete_homework', raise_exception=True)
def delete_homework(request, homework_id):
# 删除作业
pass
```
通过以上的步骤,就可以限制用户`student`对`appwork`下的模型`homework`的增删改查权限。需要注意的是,以上代码中的`permission_required`装饰器需要与用户模型(`User`)和权限模型(`Permission`)进行关联,因此你需要在`settings.py`中配置`AUTH_USER_MODEL`和`AUTH_PERMISSION_MODEL`参数。
阅读全文