27 Django 用户注册与登录实战教程

27 Django 用户注册与登录实战教程

在本节中,我们将介绍如何在 Django 中实现用户注册与登录功能。通过实例代码,你将了解如何使用 Django 的内置用户模型和认证框架来处理用户注册和登录。

创建 Django 项目和应用

首先,确保你安装了 Django。如果未安装,可以使用以下命令:

1
pip install django

然后,创建一个新的 Django 项目和应用:

1
2
3
django-admin startproject myproject
cd myproject
django-admin startapp accounts

settings.py 中,添加 accounts 应用到 INSTALLED_APPS:

1
2
3
4
INSTALLED_APPS = [
...
'accounts',
]

用户注册

创建用户注册表单

accounts 应用中,创建一个表单用于用户注册。我们将使用 Django 表单来处理用户输入。首先在 accounts/forms.py 中创建一个 UserRegistrationForm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from django import forms
from django.contrib.auth.models import User

class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
password_confirm = forms.CharField(widget=forms.PasswordInput)

class Meta:
model = User
fields = ['username', 'email', 'password']

def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
password_confirm = cleaned_data.get("password_confirm")

if password != password_confirm:
raise forms.ValidationError("Passwords do not match.")

创建视图处理注册逻辑

接下来,在 accounts/views.py 中创建注册视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.shortcuts import render, redirect
from .forms import UserRegistrationForm

def register(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data['password'])
user.save()
return redirect('login')
else:
form = UserRegistrationForm()
return render(request, 'registration/register.html', {'form': form})

创建注册模板

accounts/templates/registration/register.html 中,添加注册表单的 HTML 代码:

1
2
3
4
5
6
<h2>User Registration</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>

更新 URL 配置

accounts/urls.py 中添加注册视图的 URL:

1
2
3
4
5
6
from django.urls import path
from .views import register

urlpatterns = [
path('register/', register, name='register'),
]

在项目的主 URL 配置中包含 accounts.urls

1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('accounts.urls')),
]

用户登录

创建登录视图

accounts/views.py 中,添加登录视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm

def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('home') # 重定向到主页面
else:
form = AuthenticationForm()
return render(request, 'registration/login.html', {'form': form})

创建登录模板

accounts/templates/registration/login.html 中,添加登录表单的 HTML 代码:

1
2
3
4
5
6
<h2>User Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>

更新 URL 配置

accounts/urls.py 中添加登录视图的 URL:

1
2
3
4
5
6
7
from django.urls import path
from .views import register, user_login

urlpatterns = [
path('register/', register, name='register'),
path('login/', user_login, name='login'),
]

测试功能

现在,你的 Django 应用已经实现了用户注册与登录的基本功能。确保你的数据库迁移已经完成:

1
python manage.py migrate

然后,启动开发服务器并测试注册和登录功能:

1
python manage.py runserver

访问以下 URL 来进行测试:

  • 注册页面: http://127.0.0.1:8000/accounts/register/
  • 登录页面: http://127.0.0.1:8000/accounts/login/

总结

在本节中,我们实现了 Django 中的用户注册与登录功能。通过使用 Django 的 User 模型和 AuthenticationForm,我们的工作变得轻松而高效。你可以进一步扩展功能,比如添加邮箱验证、密码重置等,实现更复杂的用户管理系统。

27 Django 用户注册与登录实战教程

https://zglg.work/django/27/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议