美文网首页
后台管理站点 -- 7.视频在线管理

后台管理站点 -- 7.视频在线管理

作者: 爱修仙的道友 | 来源:发表于2019-03-19 18:26 被阅读0次

一、上传视频至百度VOD

1.课程视频上传html代码

<!-- 在templates/admin/course/courses_pub.html文件中 -->

        <div class="form-group">
            <label for="docs-file-url">视频地址</label>
            <div class="input-group">
              {% if course %}
                <input type="text" class="form-control" id="docs-file-url" name="docs-file-url"
                       placeholder="请上传视频或输入视频地址" value="{{ course.video_url }}">
              {% else %}
                <input type="text" class="form-control" id="docs-file-url" name="docs-file-url"
                       placeholder="请上传视频或输入视频地址">
              {% endif %}

              <div class="input-group-btn">
                <label class="btn btn-default btn-file">
                  上传至服务器 <input type="file" id="upload-file-server">
                </label>
              </div>
            </div>
          </div>



<script src="{% static 'node_modules/@baiducloud/sdk/dist/baidubce-sdk.bundle.min.js' %}"></script>

2.百度VOD上传js代码

将云盘datas目录中的node_modules文件夹拷贝到项目static目录

// 在static/js/admin/course/courses_pub.js中添加如下代码:
// 创建static/js/admin/course/courses_pub.js文件
  let sdk = baidubce.sdk;
  let VodClient = sdk.VodClient;

const CONFIG = {
  endpoint: 'http://vod.bj.baidubce.com',                                              //  默认区域名
  credentials: {
    ak: 'caf0ac9c0b0d452fb8dc9ed294744f7b',                                      // 填写你的百度云中ak和sk
    sk: '620c7446966748b78899aeeb02a95c97'
  }
};

let BAIDU_VOD_DOMAIN = 'jasmtyjgmzpkjcbvbtp.exp.bcevod.com';   // 百度云VOD域名
const CLIENT = new VodClient(CONFIG);


$(function () {
    // 其他js代码省略
    // ......

  // ================== 上传文件至服务器 ================
  

  let $upload_file_server = $("#upload-file-server");
  $upload_file_server.change(function () {

    // 先判断课程标题是否为空
    let sTitle = $("#news-title").val();  // 获取课程标题
    if (!sTitle) {
      message.showError('请先填写课程标题之后,再上传视频!');
      return
    }

    // 判断课程简介是否为空
    let sDesc = $("#news-desc").val();  // 获取课程简介
    if (!sDesc) {
      message.showError('请先填写课程描述之后,再上传视频!');
      return
    }

    let video_file = this.files[0];   // 获取文件
    let video_file_type = video_file.type;
    
    // 调用百度云VOD接口
    let blob = new Blob([video_file], {type: video_file_type});

    CLIENT.createMediaResource(sTitle, sDesc, blob)
    // Node.js中<data>可以为一个Stream、<pathToFile>;在浏览器中<data>为一个Blob对象
      .then(function (response) {
        // 上传完成
        message.showSuccess("视频上传成功");
        let sMediaId = response.body.mediaId;
        console.log('媒资ID为:', sMediaId);
        let sVideoUrl = 'http://' + BAIDU_VOD_DOMAIN + '/' + sMediaId + '/' + sMediaId + '.mp4';   //mp4 与百度云上的转码设置有关
        $courseFileUrl.val('');
        $courseFileUrl.val(sVideoUrl);

      })
      .catch(function (error) {
        console.log(error);   // 上传错误
        message.showError(error)
      });

  });


});

后端代码

from courses.models import Course,Teacher,CourseCategory
class CoursesManageView(PermissionRequiredMixin, View):
    """
    route: /admin/courses/
    """
    permission_required = ('course.add_course', 'course.view_course')
    raise_exception = True

    def handle_no_permission(self):
        if self.request.method.lower() != 'get':
            return to_json_data(errno=Code.ROLEERR, errmsg='没有操作权限')
        else:
            return super(CoursesManageView, self).handle_no_permission()

    def get(self, request):
        courses = Course.objects.select_related('category', 'teacher').\
            only('title', 'category__name', 'teacher__name').filter(is_delete=False)
        return render(request, 'admin/course/courses_manage.html', locals())


class CoursesEditView(PermissionRequiredMixin, View):
    """
    route: /admin/courses/<int:course_id>/
    """
    permission_required = ('course.change_course', 'course.delete_course')
    raise_exception = True

    def handle_no_permission(self):
        if self.request.method.lower() != 'get':
            return to_json_data(errno=Code.ROLEERR, errmsg='没有操作权限')
        else:
            return super(CoursesEditView, self).handle_no_permission()

    def get(self, request, course_id):
        """
        """
        course = Course.objects.filter(is_delete=False, id=course_id).first()
        if course:
            teachers = Teacher.objects.only('name').filter(is_delete=False)
            categories = CourseCategory.objects.only('name').filter(is_delete=False)
            return render(request, 'admin/course/courses_pub.html', locals())
        else:
            raise Http404('需要更新的课程不存在!')

    def delete(self, request, course_id):
        course = Course.objects.filter(is_delete=False, id=course_id).first()
        if course:
            course.is_delete = True
            course.save(update_fields=['is_delete'])
            return to_json_data(errmsg="课程删除成功")
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg="需要删除的课程不存在")

    def put(self, request, course_id):
        course = Course.objects.filter(is_delete=False, id=course_id).first()
        if not course:
            return to_json_data(errno=Code.NODATA, errmsg='需要更新的课程不存在')

        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
        # 将json转化为dict
        dict_data = json.loads(json_data.decode('utf8'))

        form = forms.CoursesPubForm(data=dict_data)
        if form.is_valid():
            for attr, value in form.cleaned_data.items():
                setattr(course, attr, value)

            course.save()
            return to_json_data(errmsg='课程更新成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)


class CoursesPubView(PermissionRequiredMixin, View):
    """
    route: /admin/courses/pub/
    """
    permission_required = ('course.add_course', 'course.view_course')
    raise_exception = True

    def handle_no_permission(self):
        if self.request.method.lower() != 'get':
            return to_json_data(errno=Code.ROLEERR, errmsg='没有操作权限')
        else:
            return super(CoursesPubView, self).handle_no_permission()

    def get(self, request):
        teachers = Teacher.objects.only('name').filter(is_delete=False)
        categories = CourseCategory.objects.only('name').filter(is_delete=False)
        return render(request, 'admin/course/courses_pub.html', locals())

    def post(self, request):
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))

        form = forms.CoursesPubForm(data=dict_data)
        if form.is_valid():
            courses_instance = form.save()
            return to_json_data(errmsg='课程发布成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
    path('courses/', views.CoursesManageView.as_view(), name='courses_manage'),
    path('courses/<int:course_id>/', views.CoursesEditView.as_view(), name='courses_edit'),
    path('courses/pub/', views.CoursesPubView.as_view(), name='courses_pub'),
<!-- 创建templates/admin/course/courses_manage.html文件 -->

{% extends 'admin/base/base.html' %}


{% block title %}
  课程管理页
{% endblock %}

{% block content_header %}
  课程管理
{% endblock %}

{% block header_option_desc %}
  课程管理
{% endblock %}


{% block content %}
  <div class="row">
    <div class="col-md-12 col-xs-12 col-sm-12">
      <div class="box box-primary">
{#        <div class="box-header">#}
{#          <button class="btn btn-primary pull-right" id="btn-add-tag">添加课程</button>#}
{#        </div>#}
        <div class="box-body">
          <table class="table table-bordered table-hover">
            <thead>
            <tr>
              <th>课程标题</th>
              <th>课程类别</th>
              <th>讲师名</th>
              <th>操作</th>
            </tr>
            </thead>
            <tbody id="tbody">
            {% for one_course in courses %}
              <tr data-id="{{ one_course.id }}" data-name="{{ one_course.title }}">
                <td>{{ one_course.title }}</td>
                <td>{{ one_course.category.name }}</td>
                <td>{{ one_course.teacher.name }}</td>
                <td>
{#                  <button class="btn btn-xs btn-warning btn-edit">编辑</button>#}
                  <a href="{% url 'admin:courses_edit' one_course.id %}" class="btn btn-xs btn-warning btn-edit">编辑</a>
                  <button class="btn btn-xs btn-danger btn-del">删除</button>
                </td>
              </tr>
            {% endfor %}


            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>
{% endblock %}

{% block script %}
  <script src="{% static 'js/admin/course/courses_manage.js' %}"></script>
{% endblock %}

// 创建static/js/admin/course/courses_manage.js文件

$(function () {

  // 删除标签
  let $courseDel = $(".btn-del");  // 1. 获取删除按钮
  $courseDel.click(function () {   // 2. 点击触发事件
    let _this = this;
    let sCourseId = $(this).parents('tr').data('id');
    // let sCourseTitle = $(this).parents('tr').data('name');
    fAlert.alertConfirm({
      title: "确定删除文档吗?",
      type: "error",
      confirmText: "确认删除",
      cancelText: "取消删除",
      confirmCallback: function confirmCallback() {

        $.ajax({
          url: "/admin/courses/" + sCourseId + "/",  // url尾部需要添加/
          // 请求方式
          type: "DELETE",
          dataType: "json",
        })
          .done(function (res) {
            if (res.errno === "200") {
              message.showSuccess("文档删除成功");
              $(_this).parents('tr').remove();
            } else {
              swal.showInputError(res.errmsg);
            }
          })
          .fail(function () {
            message.showError('服务器超时,请重试!');
          });
      }
    });
  });


  // get cookie using jQuery
  function getCookie(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
      let cookies = document.cookie.split(';');
      for (let i = 0; i < cookies.length; i++) {
        let cookie = jQuery.trim(cookies[i]);
        // Does this cookie string begin with the name we want?
        if (cookie.substring(0, name.length + 1) === (name + '=')) {
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
    return cookieValue;
  }

  function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }

  // Setting the token on the AJAX request
  $.ajaxSetup({
    beforeSend: function (xhr, settings) {
      if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
      }
    }
  });

});

<!-- 创建templates/admin/course/courses_pub.html文件 -->

{% extends 'admin/base/base.html' %}


{% block title %}
  课程发布页
{% endblock %}

{% block content_header %}
  课程发布
{% endblock %}

{% block header_option_desc %}
  书是人类进步的阶梯
{% endblock %}


{% block content %}
  <div class="row">
    <div class="col-md-12 col-xs-12 col-sm-12">
      <div class="box box-primary">
        <div class="box-body">

          <div class="form-group" style="margin-top: 30px;">
            <label for="news-title">课程标题(150个字以内)</label>
            {% if course %}
              <input type="text" class="form-control" id="news-title" name="news-title" placeholder="请输入课程标题"
                     value="{{ course.title }}">
            {% else %}
              <input type="text" class="form-control" id="news-title" name="news-title" placeholder="请输入课程标题"
                     autofocus>
            {% endif %}
          </div>

          <div class="form-group">
            <label for="news-desc">课程简介</label>
            {% if course %}
              <textarea name="news-desc" id="news-desc" placeholder="请输入课程简介" class="form-control"
                        style="height: 8rem; resize: none;">{{ course.profile }}</textarea>
            {% else %}
              <textarea name="news-desc" id="news-desc" placeholder="请输入课程简介" class="form-control"
                        style="height: 8rem; resize: none;"></textarea>
            {% endif %}
          </div>


          <div class="form-group" id="container">
            <label for="news-thumbnail-url">课程封面图</label>
            <div class="input-group">
              {% if course %}
                <input type="text" class="form-control" id="news-thumbnail-url" name="news-thumbnail-url"
                       placeholder="请上传图片或输入封面图地址" value="{{ course.cover_url }}">
              {% else %}
                <input type="text" class="form-control" id="news-thumbnail-url" name="news-thumbnail-url"
                       placeholder="请上传图片或输入封面图地址">
              {% endif %}

              <div class="input-group-btn">
                <label class="btn btn-default btn-file">
                  上传至服务器 <input type="file" id="upload-image-server">
                </label>
                <button class="btn btn-info" id="upload-image-btn">上传至七牛云</button>
              </div>
            </div>
          </div>

          <div class="form-group">
            <div class="progress-bar" style="display: none">
              <div class="progress-bar progress-bar-striped progress-bar-animated" style="width: 0;">0%</div>
            </div>
          </div>


          <div class="form-group">
            <label for="docs-file-url">视频地址</label>
            <div class="input-group">
              {% if course %}
                <input type="text" class="form-control" id="docs-file-url" name="docs-file-url"
                       placeholder="请上传视频或输入视频地址" value="{{ course.video_url }}">
              {% else %}
                <input type="text" class="form-control" id="docs-file-url" name="docs-file-url"
                       placeholder="请上传视频或输入视频地址">
              {% endif %}

              <div class="input-group-btn">
                <label class="btn btn-default btn-file">
                  上传至服务器 <input type="file" id="upload-file-server">
                </label>
              </div>
            </div>
          </div>


          <div class="form-group">
            <label for="course-time">课程时长(单位:分钟)</label>
            {% if course %}
              <input type="text" class="form-control" id="course-time" name="course-time"
                     placeholder="请输入课程时长" value="{{ course.duration }}">
            {% else %}
              <input type="text" class="form-control" id="course-time" name="course-time"
                     placeholder="请输入课程时长" autofocus>
            {% endif %}
          </div>


          <div class="form-group">
            <label for="course-teacher">课程讲师</label>
            <select name="course-teacher" id="course-teacher" class="form-control">
              <option value="0">-- 请选择讲师 --</option>
              {% for teacher in teachers %}
                {% if course and teacher == course.teacher %}
                  <option value="{{ teacher.id }}" selected>{{ teacher.name }}</option>
                {% else %}
                  <option value="{{ teacher.id }}">{{ teacher.name }}</option>
                {% endif %}
              {% endfor %}
            </select>
          </div>


          <div class="form-group">
            <label for="course-category">课程分类</label>
            <select name="course-category" id="course-category" class="form-control">
              <option value="0">-- 请选择分类 --</option>
              {% for category in categories %}
                {% if course and category == course.category %}
                  <option value="{{ category.id }}" selected>{{ category.name }}</option>
                {% else %}
                  <option value="{{ category.id }}">{{ category.name }}</option>
                {% endif %}
              {% endfor %}
            </select>
          </div>


          <div class="form-group">
            <label for="course-outline">课程大纲</label>
            {% if course %}
              <div id="course-outline">
                <script>
                  window.onload = function () {
                    window.editor.txt.html('{{ course.outline|safe }}')
                  }
                </script>
              </div>
            {% else %}
              <div id="course-outline">
              </div>
            {% endif %}
          </div>


        </div>
        <div class="box-footer">
          {% if course %}
            <a href="javascript:void (0);" class="btn btn-primary pull-right" id="btn-pub-news"
               data-news-id="{{ course.id }}">更新课程 </a>
          {% else %}
            <a href="javascript:void (0);" class="btn btn-primary pull-right" id="btn-pub-news">发布课程 </a>
          {% endif %}
        </div>
      </div>
    </div>
  </div>
{% endblock %}

{% block script %}
  <script src="{% static 'node_modules/@baiducloud/sdk/dist/baidubce-sdk.bundle.min.js' %}"></script>
  <script src="{% static 'js/admin/news/wangEditor.min.js' %}"></script>
  <!-- 七牛云 客户端 并不经过服务端 服务器需要提供 token -->
  <script src="https://cdn.bootcss.com/plupload/2.1.9/moxie.min.js"></script>
  <script src="https://cdn.bootcss.com/plupload/2.1.9/plupload.dev.js"></script>
  <script src="https://cdn.bootcss.com/qiniu-js/1.0.17.1/qiniu.min.js"></script>
  <!--一定要在下面 js 文件顺序很重要 -->
  <script src="{% static 'js/admin/base/fqiniu.js' %}"></script>
  <script src="{% static 'js/admin/course/courses_pub.js' %}"></script>
{% endblock %}

// 创建static/js/admin/course/courses_pub.js文件
  let sdk = baidubce.sdk;
  let VodClient = sdk.VodClient;

const CONFIG = {
  endpoint: 'http://vod.bj.baidubce.com',
  credentials: {
    ak: 'caf0ac9c0b0d452fb8dc9ed294744f7b',
    sk: '620c7446966748b78899aeeb02a95c97'
  }
};

let BAIDU_VOD_DOMAIN = 'jasmtyjgmzpkjcbvbtp.exp.bcevod.com';
const CLIENT = new VodClient(CONFIG);


$(function () {
  let $e = window.wangEditor;
  window.editor = new $e('#course-outline');
  window.editor.create();


  let $thumbnailUrl = $("#news-thumbnail-url");   // 获取缩略图输入框元素
  let $courseFileUrl = $("#docs-file-url");    // 获取课程地址输入框元素

  // ================== 上传图片文件至服务器 ================
  let $upload_image_server = $("#upload-image-server");
  $upload_image_server.change(function () {
    // let _this = this;
    let file = this.files[0];   // 获取文件
    let oFormData = new FormData();  // 创建一个 FormData
    oFormData.append("image_file", file); // 把文件添加进去
    // 发送请求
    $.ajax({
      url: "/admin/news/images/",
      method: "POST",
      data: oFormData,
      processData: false,   // 定义文件的传输
      contentType: false,
    })
      .done(function (res) {
        if (res.errno === "200") {
          message.showSuccess("图片上传成功");
          let sImageUrl = res.data.image_url;
          // let $inpuUrl = $(_this).parents('.input-group').find('input:nth-child(1)');
          $thumbnailUrl.val('');
          $thumbnailUrl.val(sImageUrl);

        } else {
          message.showError(res.errmsg)
        }
      })
      .fail(function () {
        message.showError('服务器超时,请重试!');
      });

  });
  // ================== 上传文件至服务器 ================
  



  
  let $upload_file_server = $("#upload-file-server");
  $upload_file_server.change(function () {

    // 先判断课程标题是否为空
    let sTitle = $("#news-title").val();  // 获取课程标题
    if (!sTitle) {
      message.showError('请先填写课程标题之后,再上传视频!');
      return
    }

    // 判断课程简介是否为空
    let sDesc = $("#news-desc").val();  // 获取课程简介
    if (!sDesc) {
      message.showError('请先填写课程描述之后,再上传视频!');
      return
    }

    let video_file = this.files[0];   // 获取文件
    let video_file_type = video_file.type;
    
    // 调用百度云VOD接口
    let blob = new Blob([video_file], {type: video_file_type});

    CLIENT.createMediaResource(sTitle, sDesc, blob)
    // Node.js中<data>可以为一个Stream、<pathToFile>;在浏览器中<data>为一个Blob对象
      .then(function (response) {
        // 上传完成
        message.showSuccess("视频上传成功");
        let sMediaId = response.body.mediaId;
        console.log('媒资ID为:', sMediaId);
        let sVideoUrl = 'http://' + BAIDU_VOD_DOMAIN + '/' + sMediaId + '/' + sMediaId + '.mp4';
        $courseFileUrl.val('');
        $courseFileUrl.val(sVideoUrl);

      })
      .catch(function (error) {
        console.log(error);   // 上传错误
        message.showError(error)
      });

  });


  // ================== 上传图片至七牛(云存储平台) ================
  let $progressBar = $(".progress-bar");
  QINIU.upload({
    "domain": "http://pl3yncr1e.bkt.clouddn.com/",  // 七牛空间域名
    // 后台返回 token的地址 (后台返回的 url 地址) 不可能成功
    "uptoken_url": "/admin/token/",
    // 按钮
    "browse_btn": "upload-image-btn",
    // 成功
    "success": function (up, file, info) {
      let domain = up.getOption('domain');
      let res = JSON.parse(info);
      let filePath = domain + res.key;
      console.log(filePath);  // 打印文件路径
      $thumbnailUrl.val('');
      $thumbnailUrl.val(filePath);
    },
    // 失败
    "error": function (up, err, errTip) {
      // console.log('error');
      console.log(up);
      console.log(err);
      console.log(errTip);
      // console.log('error');
      message.showError(errTip);
    },
    "progress": function (up, file) {
      let percent = file.percent;
      $progressBar.parent().css("display", 'block');
      $progressBar.css("width", percent + '%');
      $progressBar.text(parseInt(percent) + '%');
    },
    // 完成后 去掉进度条
    "complete": function () {
      $progressBar.parent().css("display", 'none');
      $progressBar.css("width", '0%');
      $progressBar.text('0%');
    }
  });


  // ================== 发布文章 ================
  let $docsBtn = $("#btn-pub-news");
  $docsBtn.click(function () {
    // 判断课程标题是否为空
    let sTitle = $("#news-title").val();  // 获取文件标题
    if (!sTitle) {
      message.showError('请填写课程标题!');
      return
    }

    // 判断课程简介是否为空
    let sDesc = $("#news-desc").val();  // 获取课程简介
    if (!sDesc) {
      message.showError('请填写课程描述!');
      return
    }

    // 判断课程缩略图url是否为空
    let sThumbnailUrl = $thumbnailUrl.val();
    if (!sThumbnailUrl) {
      message.showError('请上传课程缩略图');
      return
    }

    // 判断课程url是否为空
    let sCourseFileUrl = $courseFileUrl.val();
    if (!sCourseFileUrl) {
      message.showError('请上传视频或输入视频地址');
      return
    }

    // 判断视频时长是否为空
    let sCourseTime = $('#course-time').val();  // 获取视频时长
    if (!sCourseTime) {
      message.showError('请填写视频时长!');
      return
    }

    // 判断是否选择讲师
    let sTeacherId = $("#course-teacher").val();
    if (!sTeacherId || sTeacherId === '0') {
      message.showError('请选择讲师');
      return
    }

    // 判断是否选择课程分类
    let sCategoryId = $("#course-category").val();
    if (!sCategoryId || sCategoryId === '0') {
      message.showError('请选择课程分类');
      return
    }

    // 判断课程大纲是否为空
    let sContentHtml = window.editor.txt.html();
    // let sContentText = window.editor.txt.text();
    if (!sContentHtml || sContentHtml === '<p><br></p>') {
        message.showError('请填写课程大纲!');
        return
    }

    // 获取coursesId 存在表示更新 不存在表示发表
    let coursesId = $(this).data("news-id");
    let url = coursesId ? '/admin/courses/' + coursesId + '/' : '/admin/courses/pub/';
    let data = {
      "title": sTitle,
      "profile": sDesc,
      "cover_url": sThumbnailUrl,
      "video_url": sCourseFileUrl,
      "duration": sCourseTime,
      "outline": sContentHtml,
      "teacher": sTeacherId,
      "category": sCategoryId

    };

    $.ajax({
      // 请求地址
      url: url,
      // 请求方式
      type: coursesId ? 'PUT' : 'POST',
      data: JSON.stringify(data),
      // 请求内容的数据类型(前端发给后端的格式)
      contentType: "application/json; charset=utf-8",
      // 响应数据的格式(后端返回给前端的格式)
      dataType: "json",
    })
      .done(function (res) {
        if (res.errno === "200") {
          if (coursesId) {
            fAlert.alertNewsSuccessCallback("课程更新成功", '跳到课程管理页', function () {
              window.location.href = '/admin/courses/'
            });

          } else {
            fAlert.alertNewsSuccessCallback("课程发表成功", '跳到课程管理页', function () {
              window.location.href = '/admin/courses/'
            });
          }
        } else {
          fAlert.alertErrorToast(res.errmsg);
        }
      })
      .fail(function () {
        message.showError('服务器超时,请重试!');
      });

  });


  // get cookie using jQuery
  function getCookie(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
      let cookies = document.cookie.split(';');
      for (let i = 0; i < cookies.length; i++) {
        let cookie = jQuery.trim(cookies[i]);
        // Does this cookie string begin with the name we want?
        if (cookie.substring(0, name.length + 1) === (name + '=')) {
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
    return cookieValue;
  }

  function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }

  // Setting the token on the AJAX request
  $.ajaxSetup({
    beforeSend: function (xhr, settings) {
      if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
      }
    }
  });

});

相关文章

网友评论

      本文标题:后台管理站点 -- 7.视频在线管理

      本文链接:https://www.haomeiwen.com/subject/hamhmqtx.html