Django 登录注册功能实现

项目整体结构

复制代码
student_system/                  # 项目根目录
├── accounts/                    # 处理用户账号的应用
│   ├── templates/               # 存放HTML模板
│   │   ├── accounts/            # 登录注册相关模板
│   │   │   ├── login.html       # 登录页面
│   │   │   └── register.html    # 注册页面
│   │   └── home.html            # 首页
│   ├── __init__.py
│   ├── admin.py                 # 管理员配置
│   ├── apps.py                  # 应用配置
│   ├── forms.py                 # 表单定义
│   ├── models.py                # 数据模型
│   ├── tests.py                 # 测试文件
│   ├── urls.py                  # 应用路由配置
│   └── views.py                 # 视图函数
├── student_system/              # 项目核心配置
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py              # 项目设置
│   ├── urls.py                  # 主路由配置
│   └── wsgi.py
└── manage.py                    # Django命令行工具

实现步骤详解

1. 环境准备与项目创建

首先确保你已经安装了 Django(如果没有安装,使用pip install django命令)。然后通过以下命令创建项目和应用:

复制代码
# 创建项目
django-admin startproject student_system

# 进入项目目录
cd student_system

# 创建处理用户账号的应用
python manage.py startapp accounts

2. 配置项目设置(settings.py

打开student_system/settings.py文件,我们需要做这些配置:

  • INSTALLED_APPS中添加我们创建的accounts应用

  • 配置登录和注销后的跳转页面

  • 设置语言为中文(方便显示)

    应用注册

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # ... 其他默认应用
    'accounts', # 添加我们的应用
    ]

    登录/注销后跳转页面配置

    LOGIN_REDIRECT_URL = '/' # 登录后跳转到首页
    LOGOUT_REDIRECT_URL = '/login/' # 注销后跳转到登录页

    语言设置为简体中文

    LANGUAGE_CODE = 'zh-hans'

3. 创建用户注册表单(forms.py

accounts目录下创建forms.py文件,用于定义注册表单。我们扩展 Django 自带的用户创建表单,增加邮箱字段:

复制代码
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class RegisterForm(UserCreationForm):
    # 增加邮箱字段,设为必填
    email = forms.EmailField(required=True)

    class Meta:
        model = User  # 使用Django内置的User模型
        # 注册时需要填写的字段
        fields = ['username', 'email', 'password1', 'password2']

    # 保存用户信息,特别是邮箱(Django默认不保存邮箱)
    def save(self, commit=True):
        user = super().save(commit=False)  # 先不保存到数据库
        user.email = self.cleaned_data['email']  # 获取表单中的邮箱
        if commit:
            user.save()  # 保存用户信息到数据库
        return user

4. 实现视图函数(views.py

视图函数用于处理用户的请求,我们在accounts/views.py中实现注册功能:

复制代码
from django.shortcuts import render, redirect
from django.contrib.auth import login  # 用于登录用户
from .forms import RegisterForm  # 导入我们创建的注册表单

def register(request):
    # 如果是POST请求(用户提交表单)
    if request.method == 'POST':
        form = RegisterForm(request.POST)  # 获取表单数据
        if form.is_valid():  # 验证表单数据是否有效
            user = form.save()  # 保存用户到数据库
            login(request, user)  # 注册后自动登录
            return redirect('home')  # 跳转到首页
    else:
        # 如果是GET请求,显示空表单
        form = RegisterForm()
    # 渲染注册页面,传递表单数据
    return render(request, 'accounts/register.html', {'form': form})

5. 创建模板文件

模板文件就是用户看到的网页,我们需要创建三个关键模板:

注册页面(register.html)

accounts/templates/accounts/目录下创建register.html

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>注册</title>
</head>
<body>
    <h2>注册</h2>
    <form method="post">
        {% csrf_token %}  <!-- 安全机制,必须添加 -->
        
        <!-- 显示表单字段,as_p表示每个字段用<p>标签包裹 -->
        {{ form.as_p }}
        
        <button type="submit">注册</button>
    </form>

    <!-- 显示错误信息(如果有) -->
    {% if form.errors %}
        <div style="color: red;">
            {% for field in form %}
                {% for error in field.errors %}
                    {{ field.label }}: {{ error }}
                {% endfor %}
            {% endfor %}
        </div>
    {% endif %}
</body>
</html>
登录页面(login.html)

同样在accounts/templates/accounts/目录下创建login.html

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <h2>登录</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}  <!-- 显示登录表单 -->
        <button type="submit">登录</button>
    </form>

    <!-- 显示错误信息 -->
    {% if form.username.errors %}
    <p style="color: red;">{{ form.username.errors.0 }}</p>
    {% endif %}

    <!-- 注册链接 -->
    <p>还没有账号?<a href="{% url 'register' %}">注册</a></p>
</body>
</html>
首页(home.html)

accounts/templates/目录下创建home.html,用于显示用户登录后的页面:

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>首页</title>
</head>
<body>
    {% if user.is_authenticated %}  <!-- 判断用户是否已登录 -->
        <h1>欢迎,{{ user.username }}!</h1>  <!-- 显示用户名 -->
        <p>邮箱:{{ user.email }}</p>  <!-- 显示邮箱 -->
        
        <!-- 登出表单 -->
        <form action="{% url 'logout' %}" method="post" style="display: inline;">
            {% csrf_token %}
            <button type="submit">退出登录</button>
        </form>
    {% else %}  <!-- 未登录状态 -->
        <h1>请先登录</h1>
        <a href="{% url 'login' %}">登录</a>
        <a href="{% url 'register' %}">注册</a>
    {% endif %}
</body>
</html>

6. 配置 URL 路由

路由用于将 URL 地址映射到对应的视图函数,我们需要配置两处路由:

应用路由(accounts/urls.py)

创建accounts/urls.py文件,定义登录、注册、注销的路由:

复制代码
from django.urls import path
from django.contrib.auth import views as auth_views  # 导入Django内置的认证视图
from . import views  # 导入我们的视图

urlpatterns = [
    # 注册路由,对应views.register函数
    path('register/', views.register, name='register'),
    # 登录路由,使用Django内置的LoginView,指定模板
    path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
    # 注销路由,使用Django内置的LogoutView,指定注销后跳转页面
    path('logout/', auth_views.LogoutView.as_view(next_page='/login/'), name='logout'),
]
主项目路由(student_system/urls.py)

修改项目根目录的urls.py,将 accounts 应用的路由包含进来:

复制代码
from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView  # 用于显示首页

urlpatterns = [
    path('admin/', admin.site.urls),
    # 包含accounts应用的路由
    path('', include('accounts.urls')),
    # 首页路由,使用TemplateView直接显示模板
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
]

7. 数据库迁移

Django 使用 ORM 管理数据库,我们需要执行迁移命令来创建用户相关的数据表:

复制代码
# 生成迁移文件
python manage.py makemigrations

# 执行迁移,创建数据表
python manage.py migrate

8. 运行项目并测试

一切准备就绪,运行开发服务器:

复制代码
python manage.py runserver

在浏览器中访问以下地址进行测试:

在浏览器中访问以下地址进行测试:

功能流程总结

  1. 注册流程

    • 用户访问注册页面填写信息
    • 表单验证通过后,保存用户信息到数据库
    • 自动登录用户并跳转到首页
  2. 登录流程

    • 用户访问登录页面输入账号密码
    • 验证通过后跳转到首页
    • 首页显示用户信息和退出登录按钮
  3. 注销流程

    • 已登录用户点击退出登录按钮
    • 系统清除登录状态,跳转到登录页面

通过这个项目,我们学习了如何使用 Django 的内置用户系统快速实现登录注册功能,包括表单处理、视图逻辑、模板渲染和 URL 配置等关键知识点。对于小白来说,理解这些基础流程后,可以尝试扩展更多功能,如密码重置、个人信息修改等。

效果图

创建超级管理员账号

复制代码
python manage.py createsuperuser

未登录home页

登录页面

注册页面

登录后的home页面

注册的用户在管理后台查看

Django 登录注册功能实现-样式优化-CSDN博客

相关推荐
weixin_4250230015 分钟前
Spring Boot + MyBatis Plus JOIN 分页多表查询项目文档
spring boot·后端·mybatis
sxlishaobin32 分钟前
Spring Bean生命周期详解
java·后端·spring
肉丸滚球1 小时前
飞算 JavaAI 转 SpringBoot 项目沉浸式体验:高效开发在线图书借阅平台
java·spring boot·后端
清水白石0082 小时前
《深入 Python 上下文管理器:contextlib.contextmanager 与类实现方式的底层差异全景解析》
开发语言·python
程序员佳佳2 小时前
GPT-4时代终结?GPT-5.2与Banana Pro实测数据公开,普通开发者如何接住这泼天富贵
开发语言·python·gpt·chatgpt·重构·api·midjourney
问道飞鱼3 小时前
【Rust编程语言】Rust数据类型全面解析
开发语言·后端·rust·数据类型
Blossom.1183 小时前
多模态大模型LoRA微调实战:从零构建企业级图文检索系统
人工智能·python·深度学习·学习·react.js·django·transformer
小钻风33663 小时前
软件测试: 从入门到实践 (接口测试)
软件测试·python
泉城老铁3 小时前
目前开源架构需要注意的安全问题
spring boot·后端
ZoeGranger3 小时前
【Spring】IoC 控制反转、DI 依赖注入、配置文件和bean的作用域
后端