django通过权限控制返回不同数据,请给出例子
时间: 2023-12-08 16:03:34 浏览: 65
Django–权限Permissions的例子
好的,我可以给您举一个简单的例子。
假设我们有一个博客网站,有两类用户:普通用户和管理员。普通用户只能查看博客文章,而管理员可以查看和编辑博客文章。
首先,在 Django 中,我们可以使用内置的 `User` 模型来管理用户。然后,我们可以使用 Django 内置的权限系统来控制用户的访问权限。
在我们的博客应用中,我们可以创建两个权限:`view_post` 和 `change_post`。`view_post` 权限允许用户查看博客文章,`change_post` 权限允许用户编辑博客文章。
接下来,我们可以在我们的视图函数中使用 `@permission_required` 装饰器来限制用户访问。
例如,我们可以创建一个视图函数来显示博客文章:
```python
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render
from myapp.models import Post
@login_required
@permission_required('myapp.view_post', raise_exception=True)
def show_post(request, post_id):
post = Post.objects.get(id=post_id)
return render(request, 'post.html', {'post': post})
```
在上面的代码中,我们使用了 `@login_required` 装饰器来确保用户已经登录,然后使用 `@permission_required` 装饰器来确保用户有 `view_post` 权限。如果用户没有这个权限,将会抛出一个 `PermissionDenied` 异常。
同样的,我们可以创建一个视图函数来编辑博客文章:
```python
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render, redirect
from myapp.forms import PostForm
from myapp.models import Post
@login_required
@permission_required('myapp.change_post', raise_exception=True)
def edit_post(request, post_id):
post = Post.objects.get(id=post_id)
if request.method == 'POST':
form = PostForm(request.POST, instance=post)
if form.is_valid():
form.save()
return redirect('post_detail', post_id=post_id)
else:
form = PostForm(instance=post)
return render(request, 'edit_post.html', {'form': form})
```
在上面的代码中,我们同样使用了 `@login_required` 装饰器来确保用户已经登录,然后使用 `@permission_required` 装饰器来确保用户有 `change_post` 权限。如果用户没有这个权限,将会抛出一个 `PermissionDenied` 异常。如果用户有权限,我们就可以显示一个表单来让管理员编辑博客文章。
阅读全文