• 首先要设置settings
# 上传文件
MEDIA_ROOT = 'media' # 项目下的目录
MEDIA_URL = "/media/" # 跟STATIC_URL类似,指定用户可以通过这个url找到文件
  • setting 设置模板中使用MEDIA_URL
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.template.context_processors.media',
],
},
},
]

模板中使用MEDIA_URL

  • url中要设置
from django.conf import settings
from django.conf.urls.static import static urlpatterns = [
#省略中间url
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • models设置图片字段和保存位置
class UserProfile(models.Model):
username = models.ForeignKey(User, related_name='User_Profiles', on_delete=models.CASCADE)
avatar = models.FileField(upload_to='avatar', blank=True,null=True, verbose_name='头像')

如上将会保存在/media/avatar目录下

  • HTML页面
                        <form role="form" enctype="multipart/form-data" action="{% url 'upload_avatar' %}"
method="POST">
{% csrf_token %}
<div>
{% for img in imgs %}
<img src="{{ user.User_Profiles.first.avatar }}" alt="">
{% endfor %}
</div>
<div>
<input class="btn-success" type="file" name="img">
<button class="btn btn-success" type="submit">变成头像</button>
</div>
</form>

HTML代码

  • views后端保存图片
def upload(request):
if request.method == 'POST':
# 如果有头像,先删除照片再删除数据库
if not UserProfile.objects.filter(username=request.user, avatar=''):
project_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
media_path = os.path.join(project_path, 'media')
print(media_path)
try:
avatar_name = request.user.User_Profiles.first().avatar.name
avatar_path = os.path.join(media_path, avatar_name)
os.remove(avatar_path)
except Exception as e:
print(e)
UserProfile.objects.filter(username=request.user).delete() new_img = UserProfile(username=request.user, avatar=request.FILES.get('img'))
new_img.save()
return redirect('my_account')

后端保存图片

关于Django图片上传的更多相关文章

  1. 配置django图片上传与保存展示

    近来在研究django,发现有好多好玩的功能,比如图片上传,以前处理这个比较麻烦,现在我们来看看如何来处理图片上传与保存 1.在数据库设计的时候需要配置upload_to image = models ...

  2. django 图片上传与显示

    由于图片上传的需要,学习了一波上传 1. 上传 前端代码 <form action="写上相应的定向位置" method="post" enctype=& ...

  3. django图片上传修改图片名称

    storage.py # 给上传的图片重命名 from django.core.files.storage import FileSystemStorage from django.http impo ...

  4. Django 图片上传到数据库 并调用显示

    环境:Django2.0 Python3.6.4 建立项目,数据库设置,就不说了. 直接上代码: 在models.py中,需要建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继 ...

  5. Django图片上传和前端展示

    1 - 模型 class Book(models.Model): #定义图书模型 book_name = models.CharField(max_length=100,verbose_name='书 ...

  6. django 图片上传 前段+后端

    1.前台<form method="post" action="./writerApply" enctype="multipart/form-d ...

  7. Django 图片上传、存储与显示

    参考博客:http://www.cognize.me/2016/05/09/djangopic 开始之前要先安装python图像处理库:pip install --use-wheel Pillow 一 ...

  8. Django中怎么做图片上传--图片展示

    1.首先是html页面的form表单的三大属性,action是提交到哪,method是提交方式,enctype只要有图片上传就要加这个属性 Django框架自带csrf_token ,所以需要在前端页 ...

  9. Django配置图片上传

    本文首先实现django中上传图片的过程,然后解决富文本编辑器文件上传的问题. 一. 上传图片 1.在 settings.py 中配置MEDIA_URL  和 MEDIA_ROOT 在 D:\blog ...

随机推荐

  1. ES6 - 基础学习(3): 变量的解构赋值

    解构赋值概述 1.解构赋值是对赋值运算符的扩展. 2.它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值. 3.代码书写上显得简洁且易读,语义更加清晰明了:而且还方便获取复杂对象中的数据字 ...

  2. 嗅探、DNS劫持配合CS钓鱼

    本章节讲述的是嗅探和DNS劫持的利用 嗅探:同一个局域网下,原本应该丢弃的包,被保留下来,即使不开双向欺骗 Driftnet工具:Driftnet监视网络流量,抓取网络流量中的JPEG和GIF图像.这 ...

  3. 分布式配置中心:Spring Cloud Config

    最近在学习Spring Cloud的知识,现将分布式配置中心:Spring Cloud Config的相关知识笔记整理如下.[采用 oneNote格式排版]

  4. Burp Suite 实战指南--说明书

       burp使用指南 网址:https://t0data.gitbooks.io/burpsuite/content/

  5. LeetCode刷题专题

    1. https://leetcode-cn.com/problems/container-with-most-water/ 思想:左右边界  i,j   向中间收敛 ,左右夹逼 方法一: 一维数组的 ...

  6. python函数的使用

    python函数的使用 制作人:全心全意 函数的定义 def 函数名(参数): 函数体 参数的使用 def 函数名(a): 函数体 函数名(5) 默认函数 def 函数名(a=5): 函数体 函数名( ...

  7. 37.Python自定义过滤器

    自定义模板过滤器 1.首先在某个app中,创建一个python包,叫做"templatetags",注意,这个包的名字一定要是"templatetags",否者 ...

  8. C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)

    C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535) 一:报错 Invalid row ...

  9. Lodash是什么?

    lodash:是一个一致性.模块化.高性能的 JavaScript 实用工具库.(也就是相当于自己封装的私有方法) node里引入 // Load the full build. var _ = re ...

  10. grid 布局(2)

    目录 grid 布局(2) grid区域属性 网格线名称 grid-template-areas 属性 grid-auto-flow 容器内子元素的属性 grid 布局(2) grid区域属性 网格线 ...