Django项目:CRM(客户关系管理系统)--50--41PerfectCRM实现全局账号密码修改

 

 

 1 # gbacc_urls.py
 2 # ————————38PerfectCRM实现全局账号登录注销————————
 3 from django.conf.urls import url
 4 from gbacc import gbacc_views
 5 urlpatterns = [
 6     url(r'^gbacc_login/', gbacc_views.gbacc_login, name='gbacc_login'),  # 全局登录
 7     # LOGIN_URL = '/gbacc/gbacc_login/'# login_url 配置,默认'/accounts/login/' #注意 / (斜杠,绝对路径)#settings.py
 8 
 9     url(r'^gbacc_logout/', gbacc_views.gbacc_logout, name='gbacc_logout'),  # 全局注销,默认跳转到accounts/login
10 
11     # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
12     url(r'^check_code.html/$', gbacc_views.check_code, name='check_code'),  # 验证码 校对
13     # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
14 
15     # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
16     url(r'^gbacc_register/', gbacc_views.gbacc_register, name='gbacc_register'),  # 注册
17     # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
18 
19     # ————————41PerfectCRM实现全局账号密码修改————————
20     url(r'^(\d+)/gbacc_modify/$', gbacc_views.gbacc_modify, name='gbacc_modify'),  # 修改
21     # 全局注销,默认跳转到accounts/login
22     # ————————41PerfectCRM实现全局账号密码修改————————
23 
24 
25 ]
26 # ————————38PerfectCRM实现全局账号登密码密码录注销————————
# gbacc_urls.py

 

 

  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实现全局账号密码修改————————
# gbacc_views.py

 

 

 

 1 {#global_modify.html#}
 2 {## # ————————41PerfectCRM实现全局账号密码修改————————#}
 3 {% extends "gbacc_master/gbacc_sample.html" %}
 4 {% block right-container-content %}
 5     <h1 class="form-group col-lg-offset-4"> CRM 修改密码</h1>
 6     <form class="form-horizontal" method="post">{% csrf_token %}
 7         <div class="col-lg-offset-3">
 8             <div class="form-inline form-group">
 9                 <label class="col-sm-2"> 用户名: </label>
10                 <input class="form-control" type="text" name="user" value="{{ obj }}" disabled>
11             </div>
12             <div class="form-inline form-group">
13                 <label class="col-sm-2"> 原密码:</label>
14                 <input type="password" name="password0" class="form-control">
15                 {% if errors %}
16                     <span style="color: red">{{ errors.original_password }}</span>
17                 {% endif %}
18             </div>
19             <div class="form-inline form-group">
20                 <label class="col-sm-2"> 新密码:</label>
21                 <input type="password" name="password1" class="form-control">
22                 {% if errors %}
23                     <span style="color: red">{{ errors.password_too_short }}</span>
24                 {% endif %}
25             </div>
26             <div class="form-inline form-group">
27                 <label class="col-sm-2"> 新密码(重复): </label>
28                 <input type="password" name="password2" class="form-control">
29                 {% if errors %}
30                     <span style="color: red">{{ errors.invalid_password }}</span>
31                 {% endif %}
32             </div>
33             <div class="form-inline form-group">
34                 <div class="col-xs-2">
35                     <a class="btn btn-lg btn-primary btn-block" href="/gbacc/gbacc_login/">登陆</a>
36                 </div>
37                 <div class="col-xs-2">
38                     <button class="btn btn-lg btn-primary btn-block" type="submit">提交</button>
39                 </div>
40             </div>
41     </form>
42     </div>
43 {% endblock %}
44 {## # ————————41PerfectCRM实现全局账号密码修改————————#}
{#global_modify.html#}

 

 

 

 


 

如果感觉本章博客对您有帮助,请尽情打赏吧!

 

posted @ 2018-04-11 21:24  颜言  阅读(396)  评论(0编辑  收藏  举报