1 # gbacc_views.py
2 # ————————38PerfectCRM实现全局账号登录注销————————
3 from django.contrib.auth import login #记录登录 #Django在数据库创建一条记录 #记住密码,免登录
4 from django.contrib.auth import authenticate #调用用户认证模块
5 from django.contrib.auth import logout #注销功能
6 from django.shortcuts import render #页面返回
7 from django.shortcuts import redirect #页面返回
8
9 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
10 #验证码函数 #处理注册的内容
11 from io import BytesIO #创建内存空间
12 from django.shortcuts import HttpResponse #页面返回
13 from gbacc.gbacc_auxiliary.check_code import create_validate_code #验证图片
14 def check_code(request):
15 stream = BytesIO()#创建内存空间
16 img, code = create_validate_code()#调用验证码图片生成函数 返回图片 和 对应的验证码
17 img.save(stream, 'PNG')#保存为PNG格式
18 request.session['CheckCode'] = code#保存在session中
19 return HttpResponse(stream.getvalue())
20 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
21
22 #全局账号登录
23 def gbacc_login(request):
24
25 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
26 email={} #变字典#传前端#页面获取值
27 _email = request.POST.get('email') #关键语句 #获取前端输入的值
28 request.session['email'] = _email #保存到 session 里
29 email=request.session.get('email') #保存到变量#变字典#传前端
30 import datetime
31 today_str = datetime.date.today().strftime("%Y%m%d") #获取时间#登陆过期
32 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
33
34 errors={}
35 if request.method =="POST":
36 _email=request.POST.get('email')
37 _password=request.POST.get('password')
38 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
39 #后台生成的验证码#调用上面def check_code(request): #页面输入的验证码
40 if request.session.get('CheckCode').upper() == request.POST.get('check_code').upper():#验证码
41 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
42 user =authenticate(username=_email,password=_password)#调用用户认证模块
43 print('认证账号密码',user)
44 if user:
45 login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录
46 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
47 request.session.set_expiry(60*60) #登陆过期时间
48 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
49 next_url =request.GET.get('next','/')#跳转的页面,默认为首页
50 return redirect(next_url)
51 else:
52 errors['error']='认证失败!'
53 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
54 else:
55 errors['error']= "验证码错误!"
56 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
57 return render(request,'gbacc_specific/gbacc_login.html',locals())
58
59 #全局账号注销
60 def gbacc_logout(request):
61 logout(request) #调用Djangao 注销功能
62 return redirect('/gbacc/gbacc_login/')
63 # ————————38PerfectCRM实现全局账号登录注销————————
64
65
66 # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
67 # json 对错误信息对象进行处理 #处理注册的内容
68 import json # 转为json格式
69 from django.core.exceptions import ValidationError # 错误信息
70 class JsonCustomEncoder(json.JSONEncoder):
71 def default(self, field):
72 if isinstance(field, ValidationError): # 如果是错误信息进行处理
73 return {'code': field.code, 'messages': field.messages}
74 else:
75 return json.JSONEncoder.default(self, field)
76
77 # 注册
78 from gbacc.gbacc_auxiliary.account import RegisterForm # 注册验证
79 from django.contrib.auth.hashers import make_password # 密码加密
80 from crm import models #数据库
81 def gbacc_register(request):
82 email = {} #页面刷新保留信息
83 _email = request.POST.get('email') # 关键语句 #获取前端输入的值
84 request.session['email'] = _email # 保存到 session 里
85 email = request.session.get('email') # 保存到变量#变字典#传前端
86
87 name = {} #页面刷新保留信息
88 _name = request.POST.get('name') # 关键语句 #获取前端输入的值
89 request.session['name'] = _name # 保存到 session 里
90 name = request.session.get('name') # 保存到变量#变字典#传前端
91
92 password = {} #页面刷新保留信息
93 _password = request.POST.get('password') # 关键语句 #获取前端输入的值
94 request.session['password'] = _password # 保存到 session 里
95 password = request.session.get('password') # 保存到变量#变字典#传前端
96
97 errors = {} #错误信息
98 if request.method == 'POST':
99 obj = RegisterForm(request=request, data=request.POST) # 注册验证 #PerfectCRM.gbacc_auxiliary.account
100 if obj.is_valid(): #如果表单没有错误,则返回true。否则为假。如果错误是被忽略,返回false。
101 name = obj.cleaned_data.get('name') # 获取用户名
102 password = obj.cleaned_data.get('password') # 获取密码
103 email = obj.cleaned_data.get('email') # 获取邮箱账号
104 password = make_password(password, ) # 对密码进行加密
105 # ——————数据库添加数据——————
106 models.UserProfile.objects.create(name=name, password=password, email=email, )
107 # ——————数据库添加数据——————
108 # ——————注册后自动登录——————
109 import datetime
110 today_str = datetime.date.today().strftime("%Y%m%d") # 获取时间#登陆过期
111 user =authenticate(username=_email,password=_password)#调用用户认证模块
112 if user:
113 login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录
114 request.session.set_expiry(60*60) #登陆过期时间
115 next_url =request.GET.get('next','/')#跳转的页面,默认为首页
116 return redirect(next_url)
117 else:
118 errors ='认证失败!走到这请联系告诉我。。。'
119 # ——————注册后自动登录——————
120 else:
121 errors = obj.errors.as_data() #获取全部 account.py 处理的不同错误信息 #到页面显示{{ errors.name.0 }}
122 return render(request, 'gbacc_specific/gbacc_register.html', locals())
123 # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
124
125
126 # ————————41PerfectCRM实现全局账号密码修改————————
127 from king_admin import base_admin # king_admin/base_admin.py
128 from king_admin import forms as kingforms #king_admin/forms.py
129 def gbacc_modify(request,user_id):#用户密码修改
130 admin_obj = base_admin.site.registered_sites['crm']['userprofile']#表类
131 model_form = kingforms.CreateModelForm(request,admin_obj=admin_obj)#modelform 生成表单 加验证
132 obj=admin_obj.model.objects.get(id=user_id)#类表的对象
133 errors={}#错误提示
134 if request.method=='POST':
135 _password0=request.POST.get('password0')
136 user =authenticate(username=obj.email,password=_password0)#调用用户认证模块
137 print('obj.email',obj.email)
138 print('验证比对数据库',user)
139 _password1=request.POST.get('password1')
140 _password2=request.POST.get('password2')
141 if user:
142 if _password1==_password2:
143 if len(_password1)>5:
144 obj.set_password(_password1)#继承Django方法 #加密
145 obj.save()
146 return redirect('/gbacc/gbacc_login/')
147 else:
148 errors['password_too_short']='密码必须不少于6字符'
149 else:
150 errors['invalid_password']='两次输入的密码不一样'
151 else:
152 errors['original_password'] = '原密码错误'
153 return render(request,'gbacc_specific/gbacc_modify.html',locals())
154 # ————————41PerfectCRM实现全局账号密码修改————————