关于Django图片上传
- 首先要设置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图片上传的更多相关文章
- 配置django图片上传与保存展示
近来在研究django,发现有好多好玩的功能,比如图片上传,以前处理这个比较麻烦,现在我们来看看如何来处理图片上传与保存 1.在数据库设计的时候需要配置upload_to image = models ...
- django 图片上传与显示
由于图片上传的需要,学习了一波上传 1. 上传 前端代码 <form action="写上相应的定向位置" method="post" enctype=& ...
- django图片上传修改图片名称
storage.py # 给上传的图片重命名 from django.core.files.storage import FileSystemStorage from django.http impo ...
- Django 图片上传到数据库 并调用显示
环境:Django2.0 Python3.6.4 建立项目,数据库设置,就不说了. 直接上代码: 在models.py中,需要建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继 ...
- Django图片上传和前端展示
1 - 模型 class Book(models.Model): #定义图书模型 book_name = models.CharField(max_length=100,verbose_name='书 ...
- django 图片上传 前段+后端
1.前台<form method="post" action="./writerApply" enctype="multipart/form-d ...
- Django 图片上传、存储与显示
参考博客:http://www.cognize.me/2016/05/09/djangopic 开始之前要先安装python图像处理库:pip install --use-wheel Pillow 一 ...
- Django中怎么做图片上传--图片展示
1.首先是html页面的form表单的三大属性,action是提交到哪,method是提交方式,enctype只要有图片上传就要加这个属性 Django框架自带csrf_token ,所以需要在前端页 ...
- Django配置图片上传
本文首先实现django中上传图片的过程,然后解决富文本编辑器文件上传的问题. 一. 上传图片 1.在 settings.py 中配置MEDIA_URL 和 MEDIA_ROOT 在 D:\blog ...
随机推荐
- 联合索引在B+树上的存储结构及数据查找方式
能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了B ...
- JMeter接口测试-循环读取库的用户信息
前言 如何实现循环读取数据库的用户信息,并传递到下一个登录请求呢,下面我们一起来学习吧!在之前我们已经学会了利用JMeter连接数据库了,具体操作可以看我之前的随笔JMeter接口测试-JDBC测试 ...
- WebSocket以及socketIO的使用
简介 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久 ...
- 第10章 DOM
第10章 DOM 10.1 节点层次 10.1.1 Node 类型 10.1.2 Document 类型 10.1.3 Element 类型 10.1.4 Text 类型 10.1.5 Comment ...
- B样条曲线方程和C++实现
功能:根据参数u值和k(大小为阶数值)与节点矢量,计算第i个k次B样条基数 输入参数: u—参数值:k—大小值为阶数:i—第i个k次B样条的支撑区间左端节点的下标:aNode为节点向量. 输出参数:返 ...
- 10maven依赖继承、统一版本/编码
A > B > C A依赖于B,B依赖于C,如果A想间接依赖C,那么B和C之间的依赖范围必须是compile,不然A依赖不了C 但是有点麻烦,因为每次A想依赖于C都要确认B和C之间的 ...
- navicate premium连接sqlserver时报08001错误的解决方法
---恢复内容开始--- navicate premium连接sqlserver时报08001错误的解决方法 1.自己一直使用navicate连接sqlserver,但是自从自己的电脑安装了sqlse ...
- P1217 [USACO1.5]回文质数 Prime Palindromes(stringstream,sizeof(num)/sizeof(num[0]),打表)
题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)( 一亿)间 ...
- 如何在CentOS上安装Tensorflow的gpu版本?
系统配置 系统版本: Centos7.6 语言: Python3.5(anaconda3 4.2) 框架: Tensorflow 安装依赖 sudo yum install openjdk-8-jdk ...
- QPixmap和QImage
1.QPixmap QPixmap的设计本来就是用来加速显示,用paint绘图时用QPixmap会比其他类的效果好很多.一般小图片用QPixmap. 2.QImage 依赖软件,直接像素访问,适合大图 ...