zoukankan      html  css  js  c++  java
  • 用Django实现Video页面分类查询

    Model表创建,Url映射,Views函数处理,Html生成

    根据上图,视频方向与视频分类是多对多的关系,视频分类与视频信息是一对多的关系,难度级别是单一的查询条件(与之前俩者并无关系)

    Models.py如下:

    from django.db import models
    
    class Direction(models.Model):
        """
        方向:自动化,测试,运维,前端
        """
        name = models.CharField(verbose_name='名称', max_length=32)
    
        classification = models.ManyToManyField('Classification')
    
        class Meta:
            db_table = 'Direction'
            verbose_name_plural = '方向(视频方向)'
    
        def __str__(self):
            return self.name
    
    
    class Classification(models.Model):
        """
        分类:Python Linux JavaScript OpenStack Node.js
        """
        name = models.CharField(verbose_name='名称', max_length=32)
    
        class Meta:
            db_table = 'Classification'
            verbose_name_plural = '分类(视频分类)'
    
        def __str__(self):
            return self.name
    
    
    class Level(models.Model):
        title = models.CharField(max_length=32)
    
        class Meta:
            verbose_name_plural = '难度级别'
    
        def __str__(self):
            return self.title
    
    
    class Video(models.Model):
        status_choice = (
            (0, '下线'),
            (1, '上线'),
        )
    
        status = models.IntegerField(verbose_name='状态', choices=status_choice, default=1)
        level = models.ForeignKey(Level)
        classification = models.ForeignKey('Classification', null=True, blank=True)
    
        weight = models.IntegerField(verbose_name='权重(按从大到小排列)', default=0)
    
        title = models.CharField(verbose_name='标题', max_length=32)
        summary = models.CharField(verbose_name='简介', max_length=32)
        # img = models.ImageField(verbose_name='图片', upload_to='static/images/Video')
        img = models.CharField(verbose_name='图片',max_length=32)
        href = models.CharField(verbose_name='视频地址', max_length=256)
    
        create_date = models.DateTimeField(auto_now_add=True)
    
        class Meta:
            db_table = 'Video'
            verbose_name_plural = '视频'
    
        def __str__(self):
            return self.title
    Model表创建

    Model表创建,Url映射,Views函数处理,Html生成

    根据上图,视频方向与视频分类是多对多的关系,视频分类与视频信息是一对多的关系,难度级别是单一的查询条件(与之前俩者并无关系)

    from django.shortcuts import render
    from app01 import models
    # Create your views here.
    def video(request,*args,**kwargs):
        condition={}
        for k,v in kwargs.items():
            condition[k]=int(v)
            kwargs[k]=int(v)#重新以字典的方式赋值
    
        class_list=models.Classification.objects.all()
        level_list=models.Level.objects.all()
        video_list=models.Video.objects.filter(**condition)#筛选的地方
        return render(request,"video.html",{"class_list":class_list,
                                            "level_list":level_list,
                                            "kwargs":kwargs,
                                            "video_list":video_list})

    html页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .condition a{
                border: solid 1px black;
                padding: 5px 8px;
                display: inline-block;
            }
            .condition a.active{
                background-color: #dd77b4;
                color: white;
            }
        </style>
    </head>
    <body>
        <div class="condition">
        <h2>筛选</h2>
    
        <div>
        {% if kwargs_id == 0 %}
            <a href="video-0-{{ kwargs.level_id }}.html" class="active">全部</a>
            {% else %}
            <a href="video-0-{{ kwargs.level_id }}.html">全部</a>
        {% endif %}
        {% for item in class_list %}
            {% if item.id == kwargs.classification_id %}
                <a href="video-{{ item.id }}-{{ kwargs.level_id }}.html" class="active">{{ item.name }}</a>
            {% else %}
                <a href="video-{{ item.id }}-{{ kwargs.level_id }}.html">{{ item.name }}</a>
            {% endif %}
        {% endfor %}
        </div>
        <div>
            {% if kwargs.level_id == 0 %}
            <a href="video-{{ kwargs.classification_id }}-0.html" class="active">全部</a>
            {% else %}
            <a href="video-{{ kwargs.classification_id }}-0.html">全部</a>
            {% endif %}
        {% for item in level_list %}
            {% if item.id == kwargs.level_id %}
            <a class="active" href="video-{{ kwargs.classification_id }}-{{ item.id }}.html">{{ item.title }}</a>
            {% else %}
                <a href="video-{{ kwargs.classification_id }}-{{ item.id }}.html">{{ item.title }}</a>
            {% endif %}
        {% endfor %}
        </div>
        <h2>视屏</h2>
        {% for item in video_list %}
            <p>{{ item.title }}</p>
        {% endfor %}
    </div>
    </body>
    </html>

     url

    from django.conf.urls import url
    from django.contrib import admin
    from web_manage import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    url(r'^video-(?P<classification_id>(d+))-(?P<level_id>(d+)).html$', views.video),
     ]

    ---------------------------------------------------------------------

    多对多关系

     如果指定了视频方向,视频分类简单分为俩种情况

    • 视频分类选项为全部(全部对应ID为0)
    • 视频分类没有的话则变更为全部
    • 视频分类变更为没有的外键是则要先清零
      def video2(request,*args,**kwargs):
          condition = {}
      
          for k, v in kwargs.items():
              temp = int(v)
              kwargs[k] = temp
          print(kwargs) # (?P<direction_id>(d+))-(?P<classification_id>(d+))-(?P<level_id>(d+))
          # 构造查询字典
          direction_id = kwargs.get('direction_id')
          classification_id = kwargs.get('classification_id')
          level_id = kwargs.get('level_id')
      
          direction_list = models.Direction.objects.all()
      
          if direction_id == 0:
              class_list = models.Classification.objects.all()
              if classification_id == 0:
                  pass
              else:
                  condition['classification_id'] = classification_id#把方向ID传进去
          else:
              direction_obj = models.Direction.objects.filter(id=direction_id).first()#取到一个方向
              class_list = direction_obj.classification.all()#取到一个方向对应分类的对象
      
              vlist = direction_obj.classification.all().values_list('id')#取到所有方向的ID的元组
              if not vlist:#取到ID但没有值的时候
                  classification_id_list = []#拿到一个空列表
              else:
                  classification_id_list = list(zip(*vlist))[0]#取到所有分类的ID列表
      
              if classification_id == 0:
                  condition['classification_id__in'] = classification_id_list
              else:
                  if classification_id in classification_id_list:
                      condition['classification_id'] = classification_id
                  else:
                       condition["classification_id"]=0
                      #################指定方向:[1,2,3]   分类:5
                      condition['classification_id__in'] = classification_id_list
      
          if level_id == 0:
              pass
          else:
              condition['level_id'] = level_id
      
            level_list = models.Level.objects.all()
      
            video_list = models.Video.objects.filter(**condition)
      
          return render(
              request,
              'video2.html',
              {
                  'direction_list':direction_list,
                  'class_list':class_list,
                  'level_list':level_list,
                  'video_list':video_list
      
              }
          )
          """
          如果:direction_id 0
              *列出所有的分类
              如果 classification_id = 0:
                  pass
              else:
                  condition['classification_id'] = classification_id
      
          否则:direction_id != 0
              *列表当前方向下的所有分类
               如果 classification_id = 0:
                  获取当前方向下的所有分类 [1,2,3,4]
                  condition['classification_id__in'] = [1,2,3,4]
               else:
                  classification_id != 0
                  获取当前方向下的所有分类 [1,2,3,4]
                  classification_id 是否在 [1,2,3,4]  :
                      condition['classification_id'] = classification_id
                  else:
                      condition['classification_id__in'] = [1,2,3,4]
      
      
          """            

      html

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
              <style>
              a{
                  border: solid 1px black;
                  padding: 5px 8px;
                  display: inline-block;
              }
             a.active{
                  background-color: #dd77b4;
                  color: white;
              }
          </style>
      </head>
      <body>
      
      <h2>筛选</h2>
      <div>
          {% if kwargs.direction_id == 0 %}
              <a class="active" href="video2-0-0-{{ kwargs.level_id }}.html">全部</a>
              {% else %}
                      <a href="video2-0-0-{{ kwargs.level_id }}.html">全部</a>
          {% endif %}
          {% for item in direction_list %}
              {% if item.id == kwargs.direction_id %}
                      <a class="active" href="video2-{{ item.id }}-{{ kwargs.classification_id }}-{{ kwargs.level_id }}.html">{{ item.name }}</a>
                  {% else %}
                      <a href="video2-{{ item.id }}-{{ kwargs.classification_id }}-{{ kwargs.level_id }}.html">{{ item.name }}</a>
              {% endif %}
          {% endfor %}
      </div>
      
      <div>
      
          {% if kwargs.classification_id == 0 %}
              <a class="active" href="video2-{{ kwargs.direction_id }}-0-{{ kwargs.level_id }}.html">全部</a>
              {% else %}
                      <a href="video2-{{ kwargs.direction_id }}-0-{{ kwargs.level_id }}.html">全部</a>
          {% endif %}
          {% for item in classification_list %}
              {% if item.id == kwargs.classification_id %}
                      <a class="active" href="video2-{{ kwargs.direction_id }}-{{ item.id }}-{{ kwargs.level_id }}.html">{{ item.name }}</a>
                  {% else %}
                      <a href="video2-{{ kwargs.direction_id }}-{{ item.id }}-{{ kwargs.level_id }}.html">{{ item.name }}</a>
              {% endif %}
          {% endfor %}
      
      </div>
      
      <div>
          {% if kwargs.level_id == 0 %}
              <a class="active" href="video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-0.html">全部</a>
              {% else %}
                      <a href="video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-0.html">全部</a>
          {% endif %}
          {% for item in level_list %}
              {% if item.id == kwargs.level_id %}
                      <a class="active" href="video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-{{ item.id }}.html">{{ item.title }}</a>
                  {% else %}
                      <a href="video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-{{ item.id }}.html">{{ item.title }}</a>
              {% endif %}
          {% endfor %}
      
      </div>
      <h2>视频</h2>
      {% for video in video_list %}
          <span>{{ video.title }}</span>
      {% endfor %}
      
      
      </body>
      </html>

    瀑布流

     views

    from django.shortcuts import render,HttpResponse
    from django.http import JsonResponse#相当于json
    from app01 import models
    
    def imgs3(request):
        return render(request,"imgs3.html")
    
    def get_imgs3(request):
        result={"status":True,"data":None}
        imgs_list=models.Imgs.objects.all().values("id","title","src")
        result["data"]=list(imgs_list)#转成列表
        return JsonResponse(result)

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            #img3{
                width: 1000px;
                margin: 0 auto;
            }
            #img3 div{
                width: 25%;
                float: left;
            }
            #img3 img{
                width: 100%;
            }
        </style>
    </head>
    <body>
    
        <div id="img3">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
    </body>
    </html>
    
    <script src="/static/js/jquery-3.1.1.js"></script>
    <script>
        $(function () {
            var obj=new Tcrollimg();//定义一个类
            obj.imgs();
            obj.scrollEvent();
        });
    
    
        function Tcrollimg() {
            this.num=0;
            this.laststate=3;//加一个属性
            this.imgs=function () {
                var that=this;
                $.ajax({
                    url:"/get_imgs3.html",
                    type:"GET",
                    data:{"num":that.num},
                    dataType:"JSON",
                    success:function (arg) {
                        var img_list=arg.data;
                        $(arg.data).each(function (index,v) {//index是索引,v是值
                            var tag=document.createElement("img");
                                tag.src=v.src;
                            var tag2=document.createElement("span");
                                tag2.innerText=v.title;
                            var eqv=(index+that.laststate+1)%4;//加 1 是指下次从插图片的时候从上一个位置插入
                            $("#img3").children().eq(eqv).append(tag,tag2);
                            if(index+1==img_list.length){}//索引加一等于数据的长度
                                that.laststate=eqv//当全部加载完之后赋值给eqv
    
                        })
                    }
    
                })
            };
    
    
        this.scrollEvent=function () {
            var that=this;
            $(window).scroll(function () {//监听滚动事件
                var scrollTop=$(window).scrollTop();//滚轮的高度
                var winHight=$(window).height();//屏幕的高度
                var docHight=$(document).height();//html的高度,也就是body的高度
                if(scrollTop+winHight==docHight){//当滚轮到底的时候触发
                    that.imgs()//执行下一个函数
                }
            })
        }
    
        }
    
    
    
    </script>
  • 相关阅读:
    mysql优化
    查询优化
    MySql服务器逻辑架构
    存储过程和存储函数区别
    mysql表设计原则
    mysql事务
    操作系统内存管理
    mysql索引介绍
    InnoDB与Myisam的区别
    【SVN】关于钩子的一些使用
  • 原文地址:https://www.cnblogs.com/shizhengwen/p/6635743.html
Copyright © 2011-2022 走看看