django实现图片上传和展示

  • 设置settings.py
    配置上传文件路径
# 配置静态文件
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
# 配置上传文件路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • 设置上传图片数据库模型
class StudentInfo(models.Model):
    i_addr = models.CharField(max_length=30)
    #在用ImageField类型前要在虚拟环境里(pip install Pillow)
    # 设置上传图片的数据类型(ImageField)  (upload_to='upload')表示上传的url路径的文件名
    i_image = models.ImageField(upload_to='upload', null=True)
    s = models.OneToOneField(Student)

    class Meta:
        db_table = 'student_info'
  • 处理上传图片的view方法为
def add_stu_info(request, stu_id):
    if request.method == 'GET':
        return render(request, 'addStuInfo.html', {'stu_id': stu_id})

    # 添加头像图片,接收到img的url
    img = request.FILES.get('img')

    if request.method == 'POST':
        stu_id = request.POST.get('stu_id')
        addr = request.POST.get('addr')
        # 把图片的路径保存在数据库中
        StudentInfo.objects.create(i_addr=addr, s_id=stu_id, i_image=img)

        return HttpResponseRedirect('/stu/index/')
  • 返回数据的view方法
def index(request):
    if request.method == 'GET':
    stuinfos = StudentInfo.objects.all()
        return render(request, 'index.html', {'stuinfos': stuinfos})
  • 现在返回还无法显示图片,因为这些要在静态文件下才能显示出来,设置总项目的urls.py
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.staticfiles.urls import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'stu/', include('stu.urls', namespace='s')),
    url(r'^uauth/', include('uauth.urls'))
]
# 把media设置为静态文件夹
from day51 import settings
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • 返回数据的html页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>所有学生信息</title>
</head>
<body>

{% for stuinfo in stuinfos %}
    姓名:{{ stuinfo.s.s_name }}
    电话:{{ stuinfo.s.s_tel }}
    地址:{{ stuinfo.i_addr }}
    头像:
    {% if stuinfo.i_image %}
        <img src="/media/{{ stuinfo.i_image }}" width="100" height="100">
    {% endif %}
    <br>
{% endfor %}


<a href="{% url 's:add' %}">添加学生</a>

</body>
</html>

提交图片的html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加学生详情页面</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="hidden" value="{{ stu_id }}" name="stu_id">
    地址:<input type="text" name="addr"> <br>
    头像:<input type="file" name="img"> <br>
    <input type="submit" value="提交">
</form>
</body>
</html
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。 这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。 平时不明白的知识点,放在项目里去理解就恍然大悟了。   一、融汇贯通 本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。   二、贴近实战 本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django实现针对数据的增删改查的接口、在Vuejs实现前端增删改查的调用、实现文件的上传、实现表格的分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格的批量化操作等等,所有的功能都通过演示完成、贴近了实战   三、课程亮点 在本案例中,最大的亮点在于前后端做了分离,真正理解前后端的各自承担的工作。前端如何和后端交互   适合人群: 1、有Python语言基础、web前端基础,想要深入学习Python Web框架的朋友; 2、有Django基础,但是想学习企业级项目实战的朋友; 3、有MySQL数据库基础的朋友  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值