在本节中,我们将介绍如何在 Django 中实现用户注册与登录功能。通过实例代码,你将了解如何使用 Django 的内置用户模型和认证框架来处理用户注册和登录。
创建 Django 项目和应用
首先,确保你安装了 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
,我们的工作变得轻松而高效。你可以进一步扩展功能,比如添加邮箱验证、密码重置等,实现更复杂的用户管理系统。