Содержание:
1, автоматическое распределение (Redis)
- Batch Import
2, микро-канал автоматической привязки
3, ORM Джанго не может сделать операцию, как настроить операции с базами данных
дополнительный
'
4, отчет
ежемесячно показатели продаж компании
5, привилегии
=================================
1, автоматическое назначение, можно использовать автоматическое распределение в какое время?
A: маркетинг или операции привлекают новых клиентов, один (партия) время ввода данных, автоматическое назначение.
2, то есть, как вы автоматически назначить его?
A: На основе списка Redis реализованы. Это соответствует очереди.
====================================
Автоматическое дозирование (Redis)
Поместите кэш данных для того, чтобы ускорить
Redis поддерживает постоянные, если закрыть после того, как данные уже находятся в файле будут размещены
Для того, чтобы купить компьютер: программное обеспечение Redis-сервер, установленный
- Сервер имеет рабочий сетевой IP: 47.93.4.198
- Порт: 6379
Наш компьютер: установить модуль ссылку Redis
- пип instaill Redis
Redis: что белый является серверным программным обеспечением, помогает нам сохранять данные в памяти внутри
conn.lpush ( "имена": "SSS") # Ван Libian поместить значение
conn.lpush ( «имена»: * [местные законы и правила «» dfgdf «]) # положить больше добавляемые слева значение, эквивалентное вставить
conn.rpush ( «имена»: * [местные законы и правила «» dfgdf «]) # положить больше добавляемые из-за значения, что эквивалентно добавить
conn.lpop ( «имена») # значение а из внутренней части, байт типа
conn.rpop ( «имена») # значения с внутренней стороны, байт типа
conn.llen ( "имена") # Просмотр Длина
Redis Импорт Conn = redis.Redis (Host = "192.168.20.150", Port = 6379) # =========== для струнного набора, получить набор, значение , полученное ======= ==== conn.set ( "K13", "v2") # написаны на ключ к удаленным Redis в Валу = conn.get ( "k13") # получить пар ключ-значение Print (Val) conn.set ( "имена", "СС") val2 = conn.get ( "имена") Print (val2) # =========== для работы в списке: операции lpush и lpop операции, (слева поставить значение, значение слева) ============= VAL4 = conn.lpush ( "names_s" * [ "поглощающие", "Лю"]) conn.lpush ( 'names_s', * [ 'число', 'Luning']) # 'Лу Нин', 'число', "Лю", "Ласточка", conn.delete ( "names_s") V = conn.llen ( " names_s ") Print (conn.llen (" names_s ")) 4 #. Для ввода в диапазоне (V) . Печать (conn.lpop ( "names_s") декодирования ()) "UTF - 8" . # ========== для списка операций: операции rpush и RPOP операции (справа поставить значения, начиная справа) ====== conn.rpush ( "ABCD", [л, 2,3]) conn.rpush ( "ABCD", * [ "А", "В", "С"]) # [л, 2,3], А, б, # * представители распакованы, если не вдаваться в * список # conn.delete ( "ABCD") V = conn.llen ( "ABCD") # Печать (v) # для г в диапазоне (V): в печати (. "8 UTF - " conn.rpop ( "ABCD") декодирования ()) # С, В, А, [л, 2,3]
Применение в проекте
Redis ссылка, перечисляет все данные о Redis, где Откат также помещенные внутри Redis
Оказалось, чтобы быть итератор значение, мы можем теперь ссылка Redis, RPOP значение
Когда проблема отката (или не используется), мы можем использовать его, чтобы добавить его в rpush, а затем вынимают
conn.lindex ( "said_id_list_origin", 0) # 0, соответствующий значению индекса View
Первый запуск, только данные базы данных
Если значение не доступна в базе данных, то прямое возвращение None
Получение следующего, если принять в None, вы должны взять на себя полные, а затем в режиме ожидания данных списка обратно в разряде
Распределение данных таблицы внутри, если вам нужно обновить, а затем сбросить.
import redis from crm import models POOL = redis.ConnectionPool(host='47.93.4.198', port=6379, password='123123') CONN = redis.Redis(connection_pool=POOL) class AutoSale(object): @classmethod def fetch_users(cls): # [obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),obj(销售顾问id,num),] sales = models.SaleRank.objects.all().order_by('-weight') sale_id_list = [] count = 0 while True: flag = False for row in sales: if count < row.num: sale_id_list.append(row.user_id) flag = True count += 1 if not flag: break if sale_id_list: CONN.rpush('sale_id_list', *sale_id_list) # 自动pop数据 CONN.rpush('sale_id_list_origin', *sale_id_list) # 原来的数据 return True return False @classmethod def get_sale_id(cls): # 查看原来数据是否存在 sale_id_origin_count = CONN.llen('sale_id_list_origin') if not sale_id_origin_count: # 去数据库中获取数据,并赋值给: 原数据,pop数据 status = cls.fetch_users() if not status: return None user_id = CONN.lpop('sale_id_list') if user_id: return user_id reset = CONN.get('sale_id_reset') # 要重置 if reset: CONN.delete('sale_id_list_origin') status = cls.fetch_users() if not status: return None CONN.delete('sale_id_reset') return CONN.lpop('sale_id_list') else: ct = CONN.llen('sale_id_list_origin') for i in range(ct): v = CONN.lindex('sale_id_list_origin', i) CONN.rpush('sale_id_list', v) return CONN.lpop('sale_id_list') @classmethod def reset(cls): CONN.set('sale_id_reset',1) @classmethod def rollback(cls,nid): CONN.lpush('sale_id_list',nid)
总结:
1、什么是redis?
2、set,get对字符串做操作的,
3、lpush,rpush,lpop,rpop对于列表做操作的
lindex:取索引
llen() :长度
4、 delete :删除 :公共的
扩展:
redis和我们的数据库一样,不能每次都链接,redis支持连接池
不推荐
推荐:
二、批量导入
上传excel文件,页面上显示
上传文件
1、拿到文件名和文件大小
file_obj.field_name: 文件名,
file_obj.size :文件大小
2、打开文件读取,以写的方式存起来
3、安装xlrd-1.1.0的两种方式
python setup.py build
pip instail xlrd
4、打开excle文件做操作。拿到每一个单元格的数据,写入数据库
吧第一行排除,可以吧列表转换成字典,录入到数据库
5、作业
自动获取ID
录入客户表
录入分配表
不在创建临时xlsx文件,写在内存里面,
写上一个模板文件,让用户去下载
6、文件,用户下载文件的两种方式
吧文件写在静态文件里面,用a标签去跳转。但是这种当是可能不行
设置响应头(搜索django如何实现文件下载)
三、微信自动绑定
前提:公司里的每一个人都得关注公众号,才可以给推送消息