饮冰三年-人工智能-Python-28 企业官网(组合搜索)
1
2:组合搜索
2.1 创建model类
from django.db import models class Direction(models.Model):
"""
方向:自动化、测试、运维、前端
verbose_name Admin中显示的字段名称
"""
name=models.CharField(verbose_name='名称',max_length=32) classification = models.ManyToManyField("Classification")
# Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。
class Meta:
# db_table是指定自定义数据库表明的。 定义该model在数据库中的表名称
db_table="Direction"
# 这个选项是指定,模型的复数形式是什么,如果不指定Django会自动在模型名称后加一个’s’
verbose_name_plural='方向(视频方向)' def __str__(self):
return self.name class Classification(models.Model):
'''
分类:Python Linux Java 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,on_delete=models.CASCADE)
classification = models.ForeignKey('Classification',on_delete=models.CASCADE,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.CharField(verbose_name='图片',max_length=32)
href=models.CharField(verbose_name='视频地址',max_length=256)
create_date=models.DateTimeField(auto_created=True) class Meta:
db_table='Video'
verbose_name_plural='视频' def __str__(self):
return self.title
model类
2.2 创建数据表+创建超级管理员
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
2.3 修改admin.py 文件,将要管理的表注册到系统中
from django.contrib import admin
from app01 import models # Register your models here.
admin.site.register(models.Direction)
admin.site.register(models.Classification)
admin.site.register(models.Level)
admin.site.register(models.Video)
admin.py
2.4 进行数据的录入和维护
方向表:自动化、测试、运维、前端
分类:python、Java、js、Linux
级别:初级、高级、骨灰级
视频:python初体验

2.5 组合搜素(主外键)
"""Enterprise URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^video-(?P<classification_id>(\d+))-(?P<level_id>(\d+))-(?P<status>(\d+)).html$',views.video)
]
url
from django.shortcuts import render
from app01 import models
# Create your views here.
def video(request,*args,**kwargs):
condition={
#'classification_id':0
#'level_id':1
#'status':1
}
for k,v in kwargs.items():
temp = int(v)
kwargs[k] = temp
if temp:
condition[k]=temp
print(condition)
class_list = models.Classification.objects.all()
level_list = models.Level.objects.all()
status_list = list(map(lambda x:{'id':x[0],'name':x[1]},models.Video.status_choice))
video_list = models.Video.objects.filter(**condition)
return render(request,"VideoTest/video.html",{
'class_list':class_list,
'level_list':level_list,
'status_list':status_list,
'kwargs':kwargs,
'video_list':video_list,
})
Views
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.condition a.active {
background-color: coral;
color: white;
}
</style>
</head>
<body>
<div class="condition">
<h1>筛选</h1>
<div>
{% if kwargs.classification_id == 0 %}
<a class="active" href="/video-0-{{ kwargs.level_id }}-{{ kwargs.status }}.html">全部</a>
{% else %}
<a href="/video-0-{{ kwargs.level_id }}-{{ kwargs.status }}.html">全部</a>
{% endif %}
{% for item in class_list %}
{% if kwargs.classification_id == item.id %}
<a class="active"
href="/video-{{ item.id }}-{{ kwargs.level_id }}-{{ kwargs.status }}.html">{{ item.name }}</a>
{% else %}
<a href="/video-{{ item.id }}-{{ kwargs.level_id }}-{{ kwargs.status }}.html">{{ item.name }}</a>
{% endif %}
{% endfor %}
</div>
<div>
<a href="/video-{{ kwargs.classification_id }}-0-{{ kwargs.status }}.html">全部</a>
{% for item in level_list %}
{% if item.id == kwargs.level_id %}
<a href="/video-{{ kwargs.classification_id }}-{{ item.id }}-{{ kwargs.status }}.html"
class="active">{{ item.title }}</a>
{% else %}
<a href="/video-{{ kwargs.classification_id }}-{{ item.id }}-{{ kwargs.status }}.html">{{ item.title }}</a>
{% endif %}
{% endfor %}
</div>
<div>
<a href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-0.html">全部</a>
{% for item in status_list %}
{% if item.id == kwargs.status %}
<a class="active"
href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-{{ item.id }}.html">{{ item.name }}</a>
{% else %}
<a href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-{{ item.id }}.html">{{ item.name }}</a>
{% endif %}
{% endfor %}
</div>
</div>
<div>
<h1>结果</h1>
<div>
{% for row in video_list %}
<div>{{ row.title }}</div>
{% endfor %}
</div>
</div>
</body>
</html>
html

2.6 组合搜素(多对多)
"""Enterprise URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^video-(?P<classification_id>(\d+))-(?P<level_id>(\d+))-(?P<status>(\d+)).html$',views.video),
url(r'^video2-(?P<direction_id>(\d+))-(?P<classification_id>(\d+))-(?P<level_id>(\d+)).html$', views.video2)
]
url
from django.shortcuts import render
from app01 import models # Create your views here.
def video(request, *args, **kwargs):
condition = {
# 'classification_id':0
# 'level_id':1
# 'status':1
}
for k, v in kwargs.items():
temp = int(v)
kwargs[k] = temp
if temp:
condition[k] = temp
print(condition)
class_list = models.Classification.objects.all()
level_list = models.Level.objects.all()
status_list = list(map(lambda x: {'id': x[0], 'name': x[1]}, models.Video.status_choice))
video_list = models.Video.objects.filter(**condition)
return render(request, "VideoTest/video.html", {
'class_list': class_list,
'level_list': level_list,
'status_list': status_list,
'kwargs': kwargs,
'video_list': video_list,
}) def video2(request, *args, **kwargs):
condition = {
# 'direction':1
# 'classification_id':0
# 'level_id':1
}
for k, v in kwargs.items():
temp = int(v)
kwargs[k] = temp 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
else :
direction_obj = models.Direction.objects.filter(id=direction_id).first()
# 选择该方向下的所有分类
class_list = direction_obj.classification.all()
#选择分类的所有id
class_list_v_id = direction_obj.classification.all().values_list('id') if not class_list_v_id:
clssification_id_list = []
else:
clssification_id_list = list(zip(*class_list_v_id))[0] if classification_id == 0:
# 说明选择了该方向=====》所有分类
condition['classification_id__in'] = clssification_id_list
else:
# 说明选择了一个分类,但是要判断该分类是否包含着该方向下
if classification_id in clssification_id_list:
condition['classification_id'] = classification_id
else:
# 说明该分类下并没有在当前选中的方向下
kwargs["classification_id"]=0
condition['classification_id__in'] = clssification_id_list if level_id == 0:
pass
else:
condition['level_id'] = level_id
print(condition)
level_list = models.Level.objects.all()
video_list = models.Video.objects.filter(**condition)
return render(request, "VideoTest/video2.html", {
'direction_list': direction_list,
'class_list': class_list,
'level_list': level_list,
'kwargs': kwargs,
'video_list': video_list,
})
Views
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.condition a.active {
background-color: coral;
color: white;
}
</style>
</head>
<body>
<div class="condition">
<h1>筛选</h1>
<div>
<a href="/video2-0-{{ kwargs.classification_id }}-{{ kwargs.level_id }}.html">全部</a>
{% 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 class_list %}
{% if kwargs.classification_id == item.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>
<a href="/video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-0.html">全部</a>
{% for item in level_list %}
{% if item.id == kwargs.level_id %}
<a href="/video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-{{ item.id }}.html"
class="active">{{ item.title }}</a>
{% else %}
<a href="/video2-{{ kwargs.direction_id }}-{{ kwargs.classification_id }}-{{ item.id }}.html">{{ item.title }}</a>
{% endif %}
{% endfor %}
</div> </div>
<div>
<h1>结果</h1>
<div>
{% for row in video_list %}
<div>{{ row.title }}</div>
{% endfor %}
</div>
</div>
</body>
</html>
html

饮冰三年-人工智能-Python-28 企业官网(组合搜索)的更多相关文章
- 饮冰三年-人工智能-Python-22 Python初识Django
1:一个简单的web框架 # 导包 from wsgiref.simple_server import make_server #自定义个处理函数 def application(environ,st ...
- 饮冰三年-人工智能-Python-21 Python数据库MySql
一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...
- 饮冰三年-人工智能-Python-20 Python线程、进程、线程
进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Musi ...
- 饮冰三年-人工智能-Python-19 Python网络编程
Socket:套接字.作用:我们只需要安照socket的规定去编程,就不需要深入理解tcp/udp协议也可以实现 1:TCP协议 1.1 客户端服务端循环收发消息 # 1:引入stock模块(导包) ...
- 饮冰三年-人工智能-Python-10之C#与Python的对比
1:注释 C# 中 单行注释:// 多行注释:/**/ python 中 单行注释:# 多行注释:“““内容””” 2:字符串 C#中 "" 用双引号如("我是字符串&q ...
- 饮冰三年-人工智能-linux-08 软件包管理(Python的安装)
1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命 ...
- 饮冰三年-人工智能-Python-30 python开发中常见的错误
1:触发条件:创建的实体类生成到数据库表时报错 报错信息:TypeError: __init__() missing 1 required positional argument: 'on_delet ...
- 饮冰三年-人工智能-Python-23 Python PyCharm 使用中常见的问题
一:软件工具使用中遇到的问题 1:AttributeError: module 'pip' has no attribute 'main'问题 处理方法: a:找到JetBrains\PyCharm ...
- 饮冰三年-人工智能-Python-18Python面向对象
1 类与实例对方法和属性的修改 class Chinese: # 这是一个Chinese的类 #定义一个类属性,又称为静态数据或者静态变量,相当于C#中的static country="Ch ...
随机推荐
- Codeforces Round #554 (Div. 2)自闭记
A 签到 #include<bits/stdc++.h> using namespace std; ],t[],ans; int main() { scanf("%d%d&quo ...
- App测试全(转自鲁德)
1.App测试流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间. 1.3测试资源 ...
- HBase 在HDFS上的物理目录结构
根目录 配置项 hbase.rootdir 默认 "/hbase" 根级文件 /hbase/WALs 被HLog实例管理的WAL文件. /hbase/WALs/data-hbase ...
- python 基础部分重点复习整理2
把这里的题目争取刷一遍 博客记录 python的ORM框架peewee SQLAlchemy psycopg2 Django 在1 的基础上,重点突出自己以前没注意的,做到精而不杂!!! Python ...
- WebApi返回类型设置为json的三种方法
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...
- Visual Studio 使用 Web Deploy 发布远程站点
Ø 简介 本文介绍 Visual Studio 如何使用 Web Deploy发布远程站点,有时候我们开发完某个功能时,需要快速将更改发布至服务器.通常 Visual Studio 可以采用两种方式 ...
- 使用scrapy选择器selector解析获取百度结果
0x00 概述 需要成功安装scrapy,安装方法与本文无关,不在这多说. 0x01 配置settings 由于百度对于user-agent进行验证,所以需要添加. settings.py中找到DEF ...
- PaginatorSet
from django.core.paginator import Paginator, EmptyPage class PaginatorSet: def __init__(self, limit= ...
- python-类内置属性和内置方法
class A(): ''' 这是一个类 ''' banji=1 def __init__(self,name,age): self.name=name self.age=age def AA(sel ...
- 如何解压DMK固件
一.DMK固件 从罗克韦尔自动化下载的固件通常是以DMK为后缀名的文件: DMK文件无法直接使用,需要使用DMK Extraction Tool解压: 二.方法步骤 1. 如果从官网下载的固件文件后 ...