zoukankan      html  css  js  c++  java
  • 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#}


     

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

  • 相关阅读:
    并发编程概述
    学习笔记-ResNet网络
    学习笔记-反向传播算法
    学习笔记-canny边缘检测
    学习笔记-霍夫变换
    GitHub访问速度慢的一种优化方法
    C#开源定时回调库PETimer的使用
    C#开源网络通信库PESocket的使用
    XML在C#与Unity3D中的实战运用
    Unity本地持久化类Playerprefs使用详解
  • 原文地址:https://www.cnblogs.com/ujq3/p/8798844.html
Copyright © 2011-2022 走看看