长春网站设计公司,南宁手机网站建设,网站都是怎么做的,广州建设厅官方网站文件上传
1 定义场景 定义#xff1a;用户可以通过浏览器将图片等文件上传至网站。 场景#xff1a; 用户上传头像。 上传流程性的文档[pdf#xff0c;txt等]
2 上传规范-前端[html] 文件上传必须为POST提交方式 表单 form 中文件上传时必须带有 enctype…文件上传
1 定义场景 定义用户可以通过浏览器将图片等文件上传至网站。 场景 用户上传头像。 上传流程性的文档[pdftxt等]
2 上传规范-前端[html] 文件上传必须为POST提交方式 表单 form 中文件上传时必须带有 enctypemultipart/form-data 时才会包含文件内容数据。 表单中用 input typefile namexxx 标签上传文件。
3 上传规范-后端[Django] 视图函数中用request.FILES取文件框的内容 filerequest.FILES[xxx]
说明 FILE的key对应页面中file框的name值。 file绑定文件流对象。 file.name文件名。 file.file文件的字节流数据。
配置文件的访问路径和存储路径 在settings.py中设置MEDIA相关配置Django把用户上传的文件统称为media资源需要与静态资源static进行区分。 # file:settings.py
MEDIA_URL /media/
MEDIA_ROOT os.path.join(BASE_DIR, media) MEDIA_URL 和 MEDIA_ROOT 需要手动绑定。 方法主路由中添加路由。 # 说明等价于做了MEDIA_URL开头的路由Django接到该特征请求后去MEDIA_ROOT路径查找资源
from django.conf impot settings
from django.conf.urls.static import static
urlpatterns static(settings.MEDIA_URL, document_rootsettings.MEDIA_ROOT)
文件写入方案1传统的open方式
csrf_exempt
def file_upload(request):if request.method GET:return render(request, file_upload.html)elif request.method POST:upload_file request.FILES[myfile]print(上传的文件名是, upload_file.name)file_path os.path.join(settings.MEDIA_ROOT, upload_file.name)with open(file_path, wb) as f:data upload_file.file.read()f.write(data)return HttpResponse(接收文件 upload_file.name 成功)
文件写入方案2ORM
# 字段名FileField(upload子目录名)
csrf_exempt
def file_upload(request):if request.method GET:return render(request, file_upload.html)elif request.method POST:upload_title request.POST[title]upload_file request.FILES[myfile]Content.objects.create(descupload_title, myfileupload_file)return HttpResponse(接收文件 upload_file.name 成功)
文件上传代码测试 配置上传文件的访问路径和存储路径。 # settings.py
# 存储的路由
MEDIA_URL /media/
# 存储的位置
MEDIA_ROOT os.path.join(BASE_DIR, media) 编写html静态文件。 # apps/templates
!DOCTYPE html
html langen
headmeta charsetUTF-8title文件上传/title
/head
bodyform action/file/upload/ methodpost enctypemultipart/form-data{% csrf_token %}pinput typetext nametitle/ppinput typefile namemyfile/ppinput typesubmit value上传/p/form
/body
/html 编写model模型文件。 from django.db import models
# Create your models here.
class Content(models.Model):文件存储对象title models.CharField(文件名, max_length11)#子目录的名称即为upload_to所指定的字段picture models.FileField(子目录名称, upload_topicture) 编写view视图文件。 port render
from django.http import HttpResponse
from .models import *
# Create your views here.
def file_upload(request):
if request.method GET:return render(request, file_upload.html)elif request.method POST:title request.POST[title]myfile request.FILES[myfile]Content.objects.create(titletitle, picturemyfile)return HttpResponse(文件上传成功)else:return HttpResponse(请求方法错误) 编写url路由文件。 from django.urls import path, re_path
from . import views
urlpatterns [path(upload/, views.file_upload, namefile_upload)
] 请求测试。 文件上传成功。 使用URL进行访问。