django实现图片上传数据库并显示

 更新时间:2021年08月24日 16:40:37   作者:浪荡之徒  
这篇文章主要为大家详细介绍了django实现图片上传数据库并显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Python实现粒子滤波效果

    基于Python实现粒子滤波效果

    这篇文章主要介绍了基于Python实现粒子滤波效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 用Python和MD5实现网站挂马检测程序

    用Python和MD5实现网站挂马检测程序

    系统管理员通常从svn/git中检索代码,部署站点后通常首先会生成该站点所有文件的MD5值,如果上线后网站页面内容被篡改(如挂马)等,可以比对之前生成MD5值快速查找去那些文件被更改,为了使系统管理员第一时间发现,可结合crontab或nagios等工具
    2014-03-03
  • Python中url标签使用知识点总结

    Python中url标签使用知识点总结

    这篇文章主要介绍了Python中url标签使用知识点以及相关实例代码,需要的朋友们参考下。
    2020-01-01
  • PyQt实现计数器的方法示例

    PyQt实现计数器的方法示例

    这篇文章主要介绍了PyQt实现计数器的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python并发之多进程的方法实例代码

    Python并发之多进程的方法实例代码

    这篇文章主要介绍了Python并发之多进程的方法实例代码,文中也提到了进程与线程的共同点,需要的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • 基于Python的关键字监控及告警

    基于Python的关键字监控及告警

    这篇文章主要为大家详细介绍了基于Python的关键字监控及告警,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Python OpenCV处理图像之滤镜和图像运算

    Python OpenCV处理图像之滤镜和图像运算

    这篇文章主要为大家详细介绍了Python OpenCV处理图像之滤镜和图像运算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python操作Sonqube API获取检测结果并打印过程解析

    Python操作Sonqube API获取检测结果并打印过程解析

    这篇文章主要介绍了Python操作Sonqube API获取检测结果并打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Pandas库中iloc[]函数的使用方法

    Pandas库中iloc[]函数的使用方法

    在数据分析过程中,很多时候需要从数据表中提取出相应的数据,而这么做的前提是需要先“索引”出这一部分数据,下面这篇文章主要给大家介绍了关于Pandas库中iloc[]函数的使用方法,需要的朋友可以参考下
    2023-01-01
  • python中使用urllib2伪造HTTP报头的2个方法

    python中使用urllib2伪造HTTP报头的2个方法

    这篇文章主要介绍了python中使用urllib2伪造HTTP报头的2个方法,即伪造http头信息,需要的朋友可以参考下
    2014-07-07

最新评论