Django项目:CRM(客户关系管理系统)--60--50PerfectCRM实现CRM客户报名流程学生合同URL随机码
# sales_urls.py
# ————————47PerfectCRM实现CRM客户报名流程————————
from django.conf.urls import url
from bpm.sales import sales_views urlpatterns = [ url(r'^customer/(\d+)/enrollment/$', sales_views.enrollment, name="enrollment"),#客户招生#报名流程一 下一步 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
# url(r'^customer/registration/(\d+)/$', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
url(r'^customer/registration/(\d+)/(\w+)/$', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— ]
# ————————47PerfectCRM实现CRM客户报名流程————————
# sales_urls.py
# sales_views.py
# ————————47PerfectCRM实现CRM客户报名流程————————
from django.db import IntegrityError # 主动捕捉错误信息
from django.shortcuts import render # 页面返回
from crm import models # 数据库
from bpm.bpm_auxiliary import bpm_forms # 自定制 forms
from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 # ————————47PerfectCRM实现CRM客户报名流程————————
from django.core.mail import send_mail
# send_mail的参数分别是 邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
import random
import datetime # 获取时间#登陆过期 # 发送邮件的功能 #验证码#密码
class stmp():
def __init__(self):
self.emaillist = [] # 发送给谁
self.code = None # 验证码#密码 def stmps(self, request, email, msg_mail): # 传参数#页面,session #邮箱,发送给谁 #内容
self.emaillist.append(email) # 将邮箱地址添加到调用Django发送邮件功能
# ——————生成验证码——————
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
chars = ''.join((_letter_cases, _upper_cases, _numbers)) # 变成一条字符串
list = random.sample(chars, 4) # 从一条字符串随机选4个字符变成列表
self.code = ''.join(list) # 列表变字符串
# ——————生成验证码——————
# ——————调用Django发送邮件——————
title = 'PerfectCRM项目自动邮件:%s' % self.code # 邮件标题#防止一样的内容被邮箱屏蔽
send_mail(title, # 邮件标题
msg_mail, # 验证码内容
'perfectcrm@sina.cn', # 发送的邮箱 #根据情况重新配置
self.emaillist, # 接受的邮箱
fail_silently=False, # 静默,抛出异常
)
print('发送邮件成功!没收到要换标题!检查发送邮箱的配置!')
# ——————调用Django发送邮件—————— # ————————47PerfectCRM实现CRM客户报名流程————————
# ————————47PerfectCRM实现CRM客户报名流程————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
import random # 随机
import string # 字母 数字
from django.core.cache import cache # 缓存 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# 报名填写 销售
@login_required # 登陆后页面才能访问
def enrollment(request, customer_id):
msgs = {} # 错误信息
customer_obj = models.Customer.objects.get(id=customer_id) # 取到客户信息记录 #返回到页面#报名人
consultant_obj = models.UserProfile.objects.get(id=request.user.id) # 报名课程顾问 stmp_mail = {} # 邮件发送成功
stmpemail = stmp() # 实例化发送邮件的功能
email = request.POST.get('email') # 让页面POST提交的值,在页面GET后仍然存在显示
if request.method == "POST":
enroll_form = bpm_forms.EnrollmentForm(request.POST) # 获取数据
if enroll_form.is_valid(): # 表单验证 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/"
msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/{random_str}/ "
random_str = ''.join(random.sample(string.ascii_lowercase + string.digits, 8)) # 生成8位随机字符串 #URL使用
url_str = '''customer/registration/{enroll_obj_id}/{random_str}/''' # 报名链接
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— try:
enroll_form.cleaned_data['customer'] = customer_obj # 添加学员对象 记录 #报名人
enroll_form.cleaned_data['consultant'] = consultant_obj # 报名课程顾问
enroll_obj = models.Enrollment.objects.create(**enroll_form.cleaned_data) # 创建记录 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id,随机字符串,报名链接
sort_url = enroll_obj.id # 获取报名表对应的ID
cache.set(enroll_obj.id, random_str, 61000) # 加入过期时间 #URL使用 # cache缓存
msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名记录对应的id,随机字符串,报名链接
url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名链接
print(url_str)
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
except IntegrityError as e:
# 取到这条记录
enroll_obj = models.Enrollment.objects.get(customer_id=customer_obj.id,
enrolled_class_id=enroll_form.cleaned_data[
'enrolled_class'].id)
enroll_form.add_error('__all__', '记录已经存在,不能重复创建!') # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id
cache.set(enroll_obj.id, random_str, 61000) # 加入过期时间 #URL使用 # cache缓存
msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名记录对应的id
url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名链接
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— if email:
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s" %enroll_obj.id
msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s/%s" %(enroll_obj.id,random_str)
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
stmpemail.stmps(request, email, msg_mail) # 发送邮件
stmp_mail['ok'] = "邮件已发送成功!" else:
enroll_form = bpm_forms.EnrollmentForm() # modelform表单
return render(request, 'bpm_sales/enrollment.html', locals()) # ————————47PerfectCRM实现CRM客户报名流程———————— # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
#学员合同签定
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
from django.shortcuts import HttpResponse #页面返回
# def stu_registration(request,enroll_id):
def stu_registration(request,enroll_id,random_str):
# enroll_obj=models.Enrollment.objects.get(id=enroll_id)#获取报名记录
if cache.get(enroll_id) == random_str: # 判断链接失效了没有
enroll_obj = models.Enrollment.objects.get(id=enroll_id) # 报名记录
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
if request.method == "POST":
customer_form = bpm_forms.CustomerForm(request.POST, instance=enroll_obj.customer) # 生成表单验证
if customer_form.is_valid(): # 表单验证通过
customer_form.save() # 保存
enroll_obj.contract_agreed = True # 同意协议
enroll_obj.save() # 保存
status = 1 # 修改报名状态 # 1 已经报名
return render(request, 'bpm_sales/stu_registration.html', locals()) else:
if enroll_obj.contract_agreed == True: # 如果协议已经签订
status = 1 # 修改报名状态 # 1 已经报名
else:
status = 0
customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单
# customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单
# ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证———————— return render(request,'bpm_sales/stu_registration.html',locals())
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
else:
return HttpResponse('链接失效,非法链接,请自重!')
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# sales_views.py
Django项目:CRM(客户关系管理系统)--60--50PerfectCRM实现CRM客户报名流程学生合同URL随机码的更多相关文章
- Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现CRM客户报名流程学生合同上传照片
# sales_views.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.db import IntegrityError # 主动 ...
- Django项目:CRM(客户关系管理系统)--58--48PerfectCRM实现CRM客户报名流程学生合同
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--78--68PerfectCRM实现CRM业务流程(bpm)报名缴费分页
# pagination.py # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— from django.utils.safestring impo ...
- Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
随机推荐
- 期望dp+高斯消元优化——uvalive4297好题
非常好的题!期望+建矩阵是简单的,但是直接套高斯消元会T 所以消元时要按照矩阵的形态 进行优化 #include<bits/stdc++.h> using namespace std; ; ...
- Delphi屏幕截图的实现
首先要获得设备环境的句柄,可以通过GetDC函数来获得,对于这个函数,MSDN上是这样说明的 The GetDC function retrieves a handle to a device con ...
- Systm.IO.File.cs
ylbtech-Systm.IO.File.cs 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5619 ...
- Jenkins 自动部署
一.安装插件[系统管理 → 插件管理 ] 为了通过SSH上传war包,我们需要安装Publish Over SSH 插件. 二.添加SSH 服务器[系统管理→系统设置] 参数说明: Name:ss ...
- 第四周课堂笔记4th
编码 Ascii美国 一个字节表示一个字符,必能表示汉子 大写字母65-90 小写字母97-122 265个位置 8位表示一个字节, 8bit=1byte GBK 中国 只包含本国文字 ...
- USACO 2009 Open Treasure Cave /// DFS||并查集 oj26215
题目大意: 输入 p,n,t :p为地点数 判断 t 能否回到源点1 接下来n行 每行输入 a b c: a能到达b和c Sample Input 13 6 76 7 82 3 410 11 128 ...
- Spring AspectJ 切入点语法详解(7)
1.Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指 ...
- selenium基础(元素定位)
selenium的帮助文档: https://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions 目前支 ...
- SPOJ10707 COT2-Count on a tree II
COT2 - Count on a tree II 中文题意 离线询问一颗树上路径(u,v)中经过所有点的权值的种类数. 题解 树上莫队.即在树的欧拉序列上进行莫队.同一个点加第一次时增加,第二次时减 ...
- drupal-note2 drush运行make文件
进入durpal项目的根目录中执行 drush make build-openpublic.make /path/to/webroot 参考: Managing Drush make files fo ...