文章目录
一、Django如何实现文件上传?
Django是python用于开发网站的一种常用框架,因此不可避免的会遇到文件及图片上传的相关问题,下面我来简单讲解通过POST表单上传文件的实现过程。
二、使用步骤
1.在setting.py中添加如下代码
代码如下(示例):
MEDIA_URL ='/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
文件上传之后都会存储在该路径下,直接copy就好
2.models.py中新建包含FileField的model
代码如下(示例):
import uuid
import datetime
from django.db import models
def image_upload_to(instance, filename):#文件的时间戳
#print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
id = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S").replace('-','').replace(' ','').replace(':','')
filename = filename.replace('.csv','_')+id+'.csv'#print(filename)return'file/+{filename}'.format(uuid=uuid.uuid4().hex, filename=filename)
class Processlog(models.Model):'''日志单模型类'''
file_name = models.FileField(upload_to=image_upload_to,null=False,blank=False)
upload_time = models.DateTimeField(auto_now_add=True)
download_time = models.DateTimeField(null=True,blank=True)
username = models.ForeignKey(User, on_delete=models.CASCADE, to_field='username')
image_upload_to修改了文件上传之后的文件名(在文件末尾加上时间戳),以及上传的路径(file/)。
必须包含FileField的字段,该字段用于记录文件上传的位置,upload_to也可以直接指定,例如(upload_to=‘file/’)
3.urls.py中指定上传文件根目录
代码如下(示例):
from django.conf.urls import url
from processes import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^uploadFileSubmit$', views.uploadFileSubmit),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #这是关键
4.在HTML文件中添加上传文件的控件
代码如下(示例):
<form class="am-form am-form-horizontal" action="uploadFileSubmit" method="post" style="padding-top: 30px;" enctype="multipart/form-data">
{% csrf_token %}{{form.as_p}}
<input value="504" name="roleId" type="hidden">
<div class="am-form-group">
<label for="rep-no" class="am-u-sm-3 am-form-label">
文件
</label>
<div class="am-u-sm-9">
<input id="file_name" required="" placeholder="" value="{{file_name}}" name="file_name" type="file">
</div>
</div>
<div class="am-form-group">
<div class="am-u-sm-9 am-u-sm-push-3">
<button id="addRole" class="am-btn am-btn-success"type="submit">上传</button>
</div>
</div>
</form>
enctype=“multipart/form-data”
{% csrf_token %}{{form.as_p}}
这两句是关键,一定要有,不然无法传到后台
5.在views.py中获取参数并写入数据库
代码如下(示例):
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from processes.models import Processlog
def uploadFileSubmit(request):
if 'username' in request.COOKIES:
# 获取记住的用户名
username = request.COOKIES['username']
else:
username = ''
print(username)
file = request.FILES.get('file_name')
try:
if file:
Processlog.objects.create(file_name=file,username_id=username)
return render(request,'processes/uploadFile.html',{'message': 1})
else:
return render(request, 'processes/uploadFile.html',
{'message': 0})
except Exception as e:
print(e)
# 2.使用模板
return render(request, 'processes/uploadFile.html',
{'message': 0})
file = request.FILES.get(‘file_name’)
这一步很重要,一定要是FILES.get
获取前端传过来的文件
6.最后就可以下面的位置上看到传过来的传文件了
总结
以上就是Django上传文件的全部内容啦
本店承接python相关网站的定制开发需,数据分析及答疑等需求,如有需要欢迎前往闲鱼进行咨询
版权归原作者 今生缘劫 所有, 如有侵权,请联系我们删除。