Django实现学生信息注册与图片上传显示完整教程

Finn
Finn
发布时间:2026-10-15| 5人浏览过
原创

本文详细讲解如何使用Django框架实现学生信息的注册、图片上传及数据库存储功能。内容涵盖模型类定义、settings配置、路由映射、视图逻辑处理以及HTML模板的编写,最终实现从前端表单提交到后端保存并在前端列表页面展示学生信息及头像的完整流程。

本文介绍基于Django框架的文件上传功能实现,旨在提供一份完整的技术参考方案。

核心需求分析

系统需满足以下具体功能要求: 1. 实现学生信息的注册交互界面。 2. 将录入的学生数据持久化存储至数据库。 3. 确保上传的文件被安全存放至项目目录下的media文件夹中。 4. 在前端页面展示所有已注册的学生详细信息。

模型类定义


class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30)
    photo = models.ImageField(upload_to='imgs')
    <!--内部类写法 数据库中的名字-->
    class Meta:
        db_table = 't_stu'

    def __str__(self):
        return self.sname

在settings.py配置文件中,需完成与文件上传相关的参数设置,包括应用注册、数据库连接信息及媒体文件路径配置。


INSTALLED_APPS = [
    ...
    'stu'
]

DATABASES = {
     'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django22',
        'USER': 'root',
        'PASSWORD': '123321',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

MEDIA_URL = '/media/'
<!--设置MEDIA_ROOT 默认为空  模型类中图片上传地址 MEDIA_ROOT+up_load -->
<!--BASE_DIR 为项目录 -->
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

数据库表映射


#在终端中敲命令
python manage.py makemigrations test
python manage.py migrate

URL路由配置

主路由配置


from django.contrib import admin
from django.urls import path, re_path,include

from djurls.settings import MEDIA_ROOT
from stu import urls
from .import views

#配置路由读取后台上传文件
from django.views.static import serve
urlpatterns = [
     path('test/',include('test.urls')),

re_path(r'^media/(?P<path>.*)/$', serve, {"document_root": MEDIA_ROOT}),
#server 视图函数 将MEDIA的路径和正则匹配的模板路径 显示图片

子路由配置


from django.urls import path

from test import views


urlpatterns = [
    path('test/',views.index.as_view()),
    path('show/',views.show)

]

视图函数开发

在stu/views.py中实现业务逻辑。


import os

from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
from django.views import View

from djurls.settings import BASE_DIR
from test.models import Student
<!--通过as_view处理自动获取请求方式-->
class index(View):
    def get(self,request):
        return render(request,'load.html')
    def post(self,request):
        name=request.POST.get('sname','')
        photo=request.FILES.get('photo','')
        age=request.POST.get('age','')
        <!--进行校验 将文件名的后缀字符串分割 判断-->
        extenedname=photo.name[photo.name.rindex('.')+1:]
        allowedname=['jpg','png']
        if extenedname not in  allowedname:
            return Http404()
        stu=Student.objects.create(sname=name,age=20,photo=photo)
        if stu:
            return HttpResponse('注册成功')
        else:
            return HttpResponseRedirect('/test/test/')


def show(request):
    stulist=Student.objects.all()
    return render(request,'show.html',{'stulist':stulist})

模板文件创建

templates/index.html用于构建注册界面。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/test/test/"  method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p>姓名<input type="text" name="sname"></p>
        <p>年龄 <input type="number" name="age"></p>
        <p>照片 <input type="file" name="photo"></p>
        <input type="submit" value="注册">
    </form>
</body>
</html>

show.html用于数据展示及图片加载。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1px solid black" cellspacing="0px" width="500px" align="center">

        <tr height="100px" align="center">
            <td >编号</td>
            <td >姓名 </td>
            <td >年龄</td>
            <td >头像</td>
        </tr>
        {% for stu in stulist %}
        <tr height="100px" align="center">
            <td >{{ forloop.counter }} </td>
            <td >{{ stu.sname }}</td>
            <td >{{ stu.age }}</td>
            <td ><img src="/media/{{ stu.photo }}" alt=""></td>
            <!--读取photo的路径 在主路由访问 通过server处理并显示-->
        </tr>
        {% endfor %}
    </table>
</body>
</html>

以上内容涵盖了Django实现图片上传与显示的核心步骤,希望能为读者的学习与实践提供有效帮助,欢迎持续关注本站获取更多技术资源。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。