내용 :
1 자동 할당 (레디 스)
- 일괄 가져 오기
바인딩 자동 2 마이크로 채널
3, 장고의 ORM가 작업을 할 수 없어, 데이터베이스 작업을 사용자 지정하는 방법
특별한
'
4, 보고서
이 회사의 월간 판매 실적
5 권한
=================================
1, 자동 할당, 당신은 어떤 시간에 자동 할당을 사용할 수 있습니까?
A : 마케팅이나 운영은 새로운 고객, 단일 (배치) 데이터 입력 시간, 자동 할당을 끌었다.
2, 그건 당신이 자동으로 할당하는 방법이다?
A : 구현 목록 레디 스 기준으로합니다. 그것은 큐에 대응한다.
====================================
자동 분배 (레디 스)
속도를 위해 데이터 캐시를 넣어
데이터가 배치 될 파일에 이미 후 종료하면 레디 스는 지속적인 지원
설치 레디 스 서버 소프트웨어 : 컴퓨터를 구입하려면,
- 서버가 작동하는 네트워크 IP를 가지고 : 47.93.4.198
- 포트 : 6379
우리의 컴퓨터 : 모듈 링크 레디 스를 설치
- 핍 instaill의 레디 스
레디 스 : 흰색이 소프트웨어 서버 인 것을, 우리가 내부 메모리에 데이터를 저장하는 데 도움이
conn.lpush ( "이름": "SSS") # 왕 Libian 값을 넣어
conn.lpush ( "이름"* 지방 법령 ","dfgdf "]) # 삽입 더 왼쪽에서 부가가치 동등한 넣어
conn.rpush ( "이름": * [지역 법률 및 규정 ","dfgdf "]) # 뒤에서 추가 더 많은 가치를 넣어 상응하는 추가하기
conn.lpop ( "이름") 내부에서 # 값 a는 입력 바이트
conn.rpop ( "이름") 바이트 내부 입력에서 # 값
conn.llen ( "이름") #보기 길이
레디 스 가져 오기 코네티컷 주 = redis.Redis (호스트 = "192.168.20.150"는 = 6379 포트) # =========== 문자열 세트, 설정 얻을, 값이 ======= 획득 ==== conn.set ( "K13", "V2")에서 원격 레디 스에 키를 작성 # 발 = conn.get ( "K13") #이 얻을 키 - 값 쌍의 인쇄 (발) conn.set ( "이름", "SS") 을 val2 = conn.get ( "이름") 인쇄 (을 val2) # ===========하여 목록의 동작 : 넣어 왼쪽에서 lpush 운영 및 lpop 작동, ( 값이 왼쪽에서 값) ============= VAL4 = conn.lpush ( "names_s"* "류", "삼"]) conn.lpush를 ( 'names_s' * '횟수', 'Luning']) # '루 닝 ","숫자 ","리우 ","삼 " conn.delete ("names_s ") conn.llen V = (" names_s ") 인쇄 (conn.llen ("names_s ")) 4 #. 범위에서 I에 대한 (V) : . 인쇄 (conn.lpop ( "names_s") (디코딩)) "UTF-8." # ========== 작업 목록 : rpush 작업 및 rpop 조작 ====== (오른쪽에서 오른쪽에 이르기까지의 값을 넣어) conn.rpush ( "ABCD", [1,2,3]) conn.rpush ( "ABCD"* "A", "B", "C"]) # [1,2,3], A, B *에 들어갈의 목록입니다하지 않을 경우, C #을 * 대표, 압축이 풀립니다 #의 conn.delete ( "ABCD") V = conn.llen ( "ABCD") # 인쇄 (V) #이 범위의 난에 대한 (V) : 인쇄 (.. "UTF-8"conn.rpop ( "ABCD") 디코드 ()) #의 C, B, A, [1,2,3]
프로젝트의 응용 프로그램
레디 스 링크, 그것은 또한 레디 스 내부에 배치 롤백 레디 스에있는 모든 데이터를 나열
반복자 값으로 밝혀졌다, 우리는 이제 링크 레디 스는의 값을 rpop 수 있습니다
문제 롤백 (또는하지를 사용) 할 때, 우리는 rpush에게 그것을에서 추가 사용 후 반출 할 수 있습니다
인덱스 뷰의 값에 대응 conn.lindex ( "said_id_list_origin", 0) 0 #
첫 번째 실행 만 데이터베이스 데이터
값은 다음 데이터베이스, 직접 반환 없음에 액세스 할 수없는 경우
없음으로 촬영하는 경우 다음 중 하나를 얻기, 당신은 다시 방전 내부 완료 후 대기 목록 데이터를 가지고 가야
업데이트해야 할 경우 내부 할당 테이블 데이터는 다음 다시 설정합니다.
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如何实现文件下载)
三、微信自动绑定
前提:公司里的每一个人都得关注公众号,才可以给推送消息