下面是关于Django自带的用户验证系统实现的完整攻略。
1. 创建Django项目和应用
首先,我们需要使用Django在本地创建一个项目和应用,可以使用以下命令:
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
其中,myproject
是项目名称,myapp
是我们创建的应用名称。
2. 配置Django中的用户认证系统
Django自带的用户认证系统非常方便,我们只需在settings.py
文件中进行简单的配置即可。在INSTALLED_APPS
中添加以下应用:
INSTALLED_APPS = [
# ...
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
# ...
]
然后,在MIDDLEWARE
中添加以下中间件:
MIDDLEWARE = [
# ...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# ...
]
最后,在urls.py
中配置以下路由:
from django.urls import path, include
urlpatterns = [
# ...
path('accounts/', include('django.contrib.auth.urls')),
]
这样我们就完成了Django中用户认证系统的配置。
3. 创建用户注册和登录页面
接下来,我们需要创建用户注册和登录界面,在项目中的某一个app的templates
文件夹下面创建一个名为registration
的文件夹。
然后在registration
文件夹下添加login.html
和register.html
文件,并在urls.py
中配置路由:
from django.urls import path
from . import views
urlpatterns = [
# ...
path('login/', views.login_view, name='login'),
path('register/', views.register_view, name='register'),
]
在views.py中添加以下函数:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('/')
return render(request, 'registration/login.html')
def register_view(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(request, username=username, password=password)
login(request, user)
return redirect('/')
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
这里我们使用了django.contrib.auth.forms.UserCreationForm
表单来创建用户,同时也创建了登录视图和注册视图,当用户注册成功后会进行自动登录。
4.创建登录后的页面
接下来我们需要创建登录后的页面,可以在某一个app的模板文件夹下创建一个名为account
的文件夹,在其下添加一个名为dashboard.html
的文件。
然后在该应用的views.py
中,添加登录后的视图函数:
from django.contrib.auth.decorators import login_required
@login_required
def dashboard_view(request):
return render(request, 'account/dashboard.html')
同时,我们需要在urls.py
中配置以下路由:
from django.urls import path
from . import views
urlpatterns = [
# ...
path('dashboard/', views.dashboard_view, name='dashboard'),
]
5.完整示例
下面是一个完整的示例,在该应用中,我们创建了一个简单的博客,并使用了Django自带的用户认证系统来实现用户注册和登录。
# views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.decorators import login_required
from .models import Post
def home_view(request):
posts = Post.objects.all()
return render(request, 'app/home.html', {'posts': posts})
@login_required
def dashboard_view(request):
return render(request, 'app/dashboard.html')
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('/')
return render(request, 'registration/login.html')
def register_view(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(request, username=username, password=password)
login(request, user)
return redirect('/')
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
@login_required
def new_post_view(request):
if request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
post = Post(title=title, content=content, author=request.user)
post.save()
return redirect('home')
return render(request, 'app/new_post.html')
# models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home_view, name='home'),
path('dashboard/', views.dashboard_view, name='dashboard'),
path('login/', views.login_view, name='login'),
path('register/', views.register_view, name='register'),
path('new_post/', views.new_post_view, name='new_post'),
]
在该应用中,我们创建了一个Post
模型,用于存储博客文章的标题、内容和作者。同时,我们还创建了一个home_view()
视图函数,用于渲染首页,还有一个new_post_view()
视图函数,用于创建新博客文章。
最后,我们在urls.py
中配置了四个路由,分别用于登录、注册、发布新博客和查看仪表板。在login_view()
和register_view()
中,我们使用了django.contrib.auth
中的authenticate()
和login()
函数来进行用户认证和自动登录。只有在用户已认证的情况下,才能访问dashboard_view()
和new_post_view()
视图函数,否则系统将重定向至登录页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django自带的用户验证系统实现 - Python技术站