django文件——django + jquery-file-upload上传篇(一)-- 插件实现文件上传

Bertha 。 2022-01-13 05:05 396阅读 0赞

django + jquery-file-upload 插件实现文件上传

1.model.py

  1. class Fujian(models.Model):
  2. name = models.CharField(max_length=32,verbose_name="附件名称")
  3. file = models.FileField(upload_to="upload/%Y/%m/%d/")
  4. uploaded_at = models.DateTimeField(auto_now_add=True)
  5. def __str__(self):
  6. return self.name

2.forms.py

  1. class FujianForm(forms.ModelForm):
  2. class Meta:
  3. model = Fujian
  4. fields = ('file',)

3.views.py

  1. def fujian_add(request):
  2. if request.method == 'POST':
  3. form = FujianForm(request.POST,request.FILES)
  4. if form.is_valid():
  5. fujian = form.save()
  6. data = {'is_valid':True,'name':fujian.file.name,'url':fujian.file.url}
  7. else:
  8. data = {'is_valid':False}
  9. return JsonResponse(data)
  10. if request.method == 'GET':
  11. return render(request,"fujian_add.html")

4.fujian_add.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>附件上传</title>
  6. <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
  7. <script src="/static/js/jquery.min.js"></script>
  8. <script src="/static/js/jquery-ui.min.js"></script>
  9. <script src="/static/bootstrap/js/bootstrap.js"></script>
  10. <script src="/static/jquery-file-upload/vendor/jquery.ui.widget.js"></script>
  11. <script src="/static/jquery-file-upload/jquery.iframe-transport.js"></script>
  12. <script src="/static/jquery-file-upload/jquery.fileupload.js"></script>
  13. <script src="/static/js/base.js"></script>
  14. </head>
  15. <body>
  16. <div class="container">
  17. <h1>图片上传</h1>
  18. <form method="post" action="">
  19. {% csrf_token %}
  20. <input type="hidden" name="next" value="{
  21. { request.path }}">
  22. <button type="submit" class="btn btn-danger pull-right">
  23. <span class="glyphicon glyphicon-trash"></span> 清空数据
  24. </button>
  25. </form>
  26. <div>
  27. <div style="margin-bottom: 20px;">
  28. {# 1. 添加附件的按钮 #}
  29. <button type="button" class="btn btn-primary js-upload-photos">
  30. <span class="glyphicon glyphicon-cloud-upload"></span> 上传附件
  31. </button>
  32. {# 2. 上传图片的插件 #}
  33. <input id="fileupload" type="file" name="file" multiple
  34. style="display: none;"
  35. data-url="/fujian/add/"
  36. data-form-data='{"csrfmiddlewaretoken": "{
  37. { csrf_token }}"}'>
  38. </div>
  39. {# 3. 显示上传的文件 #}
  40. <table id="gallery" class="table table-bordered">
  41. <thead>
  42. <tr>
  43. <th>Photo</th>
  44. </tr>
  45. </thead>
  46. <tbody>
  47. </tbody>
  48. </table>
  49. </div>
  50. </div>
  51. </body>
  52. </html>

页面效果:

1483079-20190508152655370-1868773314.png

5.需要引入jquery-file-upload的js文件

  1. <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
  2. <script src="/static/js/jquery.min.js"></script>
  3. <script src="/static/js/jquery-ui.min.js"></script>
  4. <script src="/static/bootstrap/js/bootstrap.js"></script>
  5. <script src="/static/jquery-file-upload/vendor/jquery.ui.widget.js"></script>
  6. <script src="/static/jquery-file-upload/jquery.iframe-transport.js"></script> <script src="/static/jquery-file-upload/jquery.fileupload.js"></script> <script src="/static/js/base.js"></script>

``

6.urls.py文件

from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^fujian/add/$', views.fujian_add), ]

7.base.js文件

  1. $(function () {
  2. /* 1. OPEN THE FILE EXPLORER WINDOW */
  3. $(".js-upload-photos").click(function () {
  4. $("#fileupload").click();
  5. });
  6. /* 2. INITIALIZE THE FILE UPLOAD COMPONENT */
  7. $("#fileupload").fileupload({ //fileupload
  8. dataType: 'json',
  9. done: function (e, data) { /* 3. PROCESS THE RESPONSE FROM THE SERVER 这里的data来自于JsonResponse传来的data*/
  10. if (data.result.is_valid) {
  11. $("#gallery tbody").prepend(
  12. "<tr><td><a href='" + data.result.url + "'>" + data.result.name + "</a></td></tr>"
  13. )
  14. }
  15. }
  16. });
  17. });

补充:

django 的 FileField字段upload参数控制上传的文件存放位置:

1.django在upload_to上内置了strftime()函数,将upload_to设置成 upload_to=”upload/%Y/%m/%d”,上传的文件将存放为 upload/2019/05/08/test.png

2.将upload_to 设置成 upload_to = “upload/“,上传的文件将存放为 upload/test.png

3.更加高级的设置,django还允许你重写一个upload_to函数,重定义上传文件的路径前缀:

  1. #让上传的文件路径动态地与user的名字有关
  2. def upload_to(instance, fielname):
  3. return '/'.join([MEDIA_ROOT, instance.user_name, filename])
  4. class User(models.Model):
  5. avatar = ImageField(upload_to = upload_to)
  6. user_name = CharField(max_length = 250)

转载于:https://www.cnblogs.com/pyghost/p/10832268.html

发表评论

表情:
评论列表 (有 0 条评论,396人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Django 文件

    在django开发网页中经常会遇到需要将本地的文件上传到服务器,这里我们就需要通过post请求将数据推送到服务器上去 1 ,定义视图 def upLoadP

    相关 django文件

    一、静态资源配置 什么是静态资源:css、js、images 需要从外部导入的资源 1.1创建static文件夹(通常放在根目录下) 1.2需要在setting