详解 django auth 并且举出实例说明
时间: 2023-08-02 15:05:48 浏览: 165
django的auth认证,authenticate和装饰器功能详解
Django auth 是 Django 自带的认证系统,它提供了用户认证、权限管理和用户会话管理等功能,可以方便地为 Django 应用添加用户认证和权限控制功能。
首先,在 Django 项目中需要在 settings.py 文件中配置 auth 应用:
```
INSTALLED_APPS = [
...
'django.contrib.auth',
'django.contrib.contenttypes',
...
]
```
接着,在 Django 项目的 urls.py 文件中添加 auth 的 URL 配置:
```
from django.contrib.auth import views as auth_views
urlpatterns = [
...
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
...
]
```
这里使用了 Django 自带的 LoginView 和 LogoutView 来处理用户登录和注销,可以通过重写这两个视图来自定义登录和注销的行为。
在 Django auth 中,用户模型是通过 auth.User 类来实现的,可以通过以下代码获取当前登录的用户:
```
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
user = request.user
...
```
这里使用了 Django 自带的 login_required 装饰器来限制只有登录用户才能访问 my_view 视图。
除了用户认证外,Django auth 还提供了权限管理功能,可以通过以下代码来控制用户的权限:
```
from django.contrib.auth.decorators import permission_required
@permission_required('myapp.can_view')
def my_view(request):
...
```
这里使用了 Django 自带的 permission_required 装饰器来限制只有拥有 myapp.can_view 权限的用户才能访问 my_view 视图。
举个实例,假设我们要实现一个博客应用,只有登录用户才能发表文章和评论,并且只有文章的作者和管理员才能编辑和删除文章。可以通过以下代码来实现:
```
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404, render, redirect
from django.contrib import messages
from django.contrib.auth.models import User
from .models import Post, Comment
@login_required
def new_post(request):
if request.method == 'POST':
title = request.POST['title']
content = request.POST['content']
author = request.user
post = Post.objects.create(title=title, content=content, author=author)
messages.success(request, 'Post created successfully!')
return redirect('post_detail', post.id)
return render(request, 'new_post.html')
@login_required
def new_comment(request, post_id):
post = get_object_or_404(Post, id=post_id)
if request.method == 'POST':
content = request.POST['content']
author = request.user
comment = Comment.objects.create(post=post, content=content, author=author)
messages.success(request, 'Comment created successfully!')
return redirect('post_detail', post.id)
return render(request, 'new_comment.html', {'post': post})
@login_required
@permission_required('blog.change_post', raise_exception=True)
def edit_post(request, post_id):
post = get_object_or_404(Post, id=post_id)
if request.method == 'POST':
title = request.POST['title']
content = request.POST['content']
post.title = title
post.content = content
post.save()
messages.success(request, 'Post updated successfully!')
return redirect('post_detail', post.id)
return render(request, 'edit_post.html', {'post': post})
@login_required
@permission_required('blog.delete_post', raise_exception=True)
def delete_post(request, post_id):
post = get_object_or_404(Post, id=post_id)
post.delete()
messages.success(request, 'Post deleted successfully!')
return redirect('post_list')
```
这里使用了 Django auth 的登录限制和权限管理功能来保护博客应用中的敏感操作,只有登录用户才能发表文章和评论,并且只有文章的作者和管理员才能编辑和删除文章。
阅读全文