使用Django框架实现音频上传功能

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

数据库筹划(models.py)

  1. class Music(models.Model):
  2.     """ 音乐 """
  3.     name = models.CharField(verbose_name="音乐名字", max_length=32)
  4.     singer = models.CharField(verbose_name="歌手", max_length=32)
  5.     # 本质上数据库也是CharField,自动保存数据。
  6.     music = models.FileField(verbose_name="音频", max_length=128)
复制代码
链接(urls.py)

  1. # 音频上传
  2.     path('music/upload/', music.music_upload),
  3.     path('music/add/', music.music_add),
复制代码
处置惩罚代码(music.py)

  1. from django.shortcuts import render, redirect
  2. from app01 import models
  3. def music_upload(request):
  4.     queryset = models.Music.objects.all()
  5.     return render(request, 'music_upload.html', {'queryset': queryset})
  6. from app01.utils.bootstrap import BootStrapModelForm
  7. class UpModelForm(BootStrapModelForm):
  8.     bootstrap_exclude_fields = ['music']
  9.     class Meta:
  10.         model = models.Music
  11.         fields = "__all__"
  12. def music_add(request):
  13.     """ 上传文件和数据 """
  14.     title = "音频上传"
  15.     if request.method == "GET":
  16.         form = UpModelForm()
  17.         return render(request, 'upload_form.html', {"form": form, "title": title})
  18.     form = UpModelForm(data=request.POST, files=request.FILES)
  19.     if form.is_valid():
  20.         # 对于文件:自动保存;
  21.         # 字段 + 上传路径写入到数据库
  22.         form.save()
  23.         return redirect("/music/upload/")
  24.     return render(request, 'upload_form.html', {"form": form, "title": title})
复制代码
前端页面(music_upload.html)

  1. {% extends 'layout.html' %}
  2. {% block content %}
  3.     <div class="container">
  4.         <div style="margin-bottom: 10px">
  5.             <a class="btn btn-success" href="/music/add/" target="_blank">
  6.                 <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
  7.                 音频上传
  8.             </a>
  9.         </div>
  10.         <div class="panel panel-default">
  11.             <!-- Default panel contents -->
  12.             <div class="panel-heading">
  13.                 <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
  14.                 音频列表
  15.             </div>
  16.             <!-- Table -->
  17.             <table class="table table-bordered">
  18.                 <thead>
  19.                 <tr>
  20.                     <th>音频</th>
  21.                     <th>音乐名称</th>
  22.                     <th>歌手</th>
  23.                 </tr>
  24.                 </thead>
  25.                 <tbody>
  26.                 {% for obj in queryset %}
  27.                     {% if obj.music.name|slice:'-4:' == ".mp3" %}
  28.                         <tr>
  29.                             <td>
  30.                                 {% if obj.music.name|slice:'-4:' == ".png" %}
  31.                                     <img src="/media/{{ obj.music }}" style="height: 80px;">
  32.                                 {% else %}
  33.                                     <audio controls>
  34.                                         <source src="/media/{{ obj.music }}">
  35.                                     </audio>
  36.                                 {% endif %}
  37.                             </td>
  38.                             <td>{{ obj.name }}</td>
  39.                             <td>{{ obj.singer }}</td>
  40.                         </tr>
  41.                     {% endif %}
  42.                 {% endfor %}
  43.                 </tbody>
  44.             </table>
  45.         </div>
  46.         <div class="clearfix">
  47.             <ul class="pagination" style="float:left;">
  48.                 {{ page_string }}
  49.             </ul>
  50.         </div>
  51.     </div>
  52. {% endblock %}
复制代码
前端页面(upload_form.html)

  1. {% extends 'layout.html' %}
  2. {% block content %}
  3.     <div class="container">
  4.         <div class="panel panel-default">
  5.             <div class="panel-heading">
  6.                 <h3 class="panel-title">{{ title }}</h3>
  7.             </div>
  8.             <div class="panel-body">
  9.                 <form method="post" enctype="multipart/form-data" novalidate>
  10.                     {% csrf_token %}
  11.                     {% for field in form %}
  12.                         <div class="form-group">
  13.                             <label>{{ field.label }}</label>
  14.                             {{ field }}
  15.                             <span style="color: red;">{{ field.errors.0 }}</span>
  16.                         </div>
  17.                     {% endfor %}
  18.                     <button type="submit" class="btn btn-primary">提 交</button>
  19.                 </form>
  20.             </div>
  21.         </div>
  22.     </div>
  23. {% endblock %}
复制代码
页面展示




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表