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

# gbacc_urls.py
# ————————38PerfectCRM实现全局账号登录注销————————
from django.conf.urls import url
from gbacc import gbacc_views
urlpatterns = [
url(r'^gbacc_login/', gbacc_views.gbacc_login, name='gbacc_login'), # 全局登录
# LOGIN_URL = '/gbacc/gbacc_login/'# login_url 配置,默认'/accounts/login/' #注意 / (斜杠,绝对路径)#settings.py url(r'^gbacc_logout/', gbacc_views.gbacc_logout, name='gbacc_logout'), # 全局注销,默认跳转到accounts/login # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
url(r'^check_code.html/$', gbacc_views.check_code, name='check_code'), # 验证码 校对
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号———————— # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
url(r'^gbacc_register/', gbacc_views.gbacc_register, name='gbacc_register'), # 注册
# ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息———————— # ————————41PerfectCRM实现全局账号密码修改————————
url(r'^(\d+)/gbacc_modify/$', gbacc_views.gbacc_modify, name='gbacc_modify'), # 修改
# 全局注销,默认跳转到accounts/login
# ————————41PerfectCRM实现全局账号密码修改———————— ]
# ————————38PerfectCRM实现全局账号登密码密码录注销————————
# gbacc_urls.py

# gbacc_views.py
# ————————38PerfectCRM实现全局账号登录注销————————
from django.contrib.auth import login #记录登录 #Django在数据库创建一条记录 #记住密码,免登录
from django.contrib.auth import authenticate #调用用户认证模块
from django.contrib.auth import logout #注销功能
from django.shortcuts import render #页面返回
from django.shortcuts import redirect #页面返回 # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
#验证码函数 #处理注册的内容
from io import BytesIO #创建内存空间
from django.shortcuts import HttpResponse #页面返回
from gbacc.gbacc_auxiliary.check_code import create_validate_code #验证图片
def check_code(request):
stream = BytesIO()#创建内存空间
img, code = create_validate_code()#调用验证码图片生成函数 返回图片 和 对应的验证码
img.save(stream, 'PNG')#保存为PNG格式
request.session['CheckCode'] = code#保存在session中
return HttpResponse(stream.getvalue())
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号———————— #全局账号登录
def gbacc_login(request): # ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
email={} #变字典#传前端#页面获取值
_email = request.POST.get('email') #关键语句 #获取前端输入的值
request.session['email'] = _email #保存到 session 里
email=request.session.get('email') #保存到变量#变字典#传前端
import datetime
today_str = datetime.date.today().strftime("%Y%m%d") #获取时间#登陆过期
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号———————— errors={}
if request.method =="POST":
_email=request.POST.get('email')
_password=request.POST.get('password')
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
#后台生成的验证码#调用上面def check_code(request): #页面输入的验证码
if request.session.get('CheckCode').upper() == request.POST.get('check_code').upper():#验证码
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
user =authenticate(username=_email,password=_password)#调用用户认证模块
print('认证账号密码',user)
if user:
login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
request.session.set_expiry(60*60) #登陆过期时间
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
next_url =request.GET.get('next','/')#跳转的页面,默认为首页
return redirect(next_url)
else:
errors['error']='认证失败!'
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
else:
errors['error']= "验证码错误!"
# ————————39PerfectCRM实现登录+验证码+过期时间+页面保留账号————————
return render(request,'gbacc_specific/gbacc_login.html',locals()) #全局账号注销
def gbacc_logout(request):
logout(request) #调用Djangao 注销功能
return redirect('/gbacc/gbacc_login/')
# ————————38PerfectCRM实现全局账号登录注销———————— # ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息————————
# json 对错误信息对象进行处理 #处理注册的内容
import json # 转为json格式
from django.core.exceptions import ValidationError # 错误信息
class JsonCustomEncoder(json.JSONEncoder):
def default(self, field):
if isinstance(field, ValidationError): # 如果是错误信息进行处理
return {'code': field.code, 'messages': field.messages}
else:
return json.JSONEncoder.default(self, field) # 注册
from gbacc.gbacc_auxiliary.account import RegisterForm # 注册验证
from django.contrib.auth.hashers import make_password # 密码加密
from crm import models #数据库
def gbacc_register(request):
email = {} #页面刷新保留信息
_email = request.POST.get('email') # 关键语句 #获取前端输入的值
request.session['email'] = _email # 保存到 session 里
email = request.session.get('email') # 保存到变量#变字典#传前端 name = {} #页面刷新保留信息
_name = request.POST.get('name') # 关键语句 #获取前端输入的值
request.session['name'] = _name # 保存到 session 里
name = request.session.get('name') # 保存到变量#变字典#传前端 password = {} #页面刷新保留信息
_password = request.POST.get('password') # 关键语句 #获取前端输入的值
request.session['password'] = _password # 保存到 session 里
password = request.session.get('password') # 保存到变量#变字典#传前端 errors = {} #错误信息
if request.method == 'POST':
obj = RegisterForm(request=request, data=request.POST) # 注册验证 #PerfectCRM.gbacc_auxiliary.account
if obj.is_valid(): #如果表单没有错误,则返回true。否则为假。如果错误是被忽略,返回false。
name = obj.cleaned_data.get('name') # 获取用户名
password = obj.cleaned_data.get('password') # 获取密码
email = obj.cleaned_data.get('email') # 获取邮箱账号
password = make_password(password, ) # 对密码进行加密
# ——————数据库添加数据——————
models.UserProfile.objects.create(name=name, password=password, email=email, )
# ——————数据库添加数据——————
# ——————注册后自动登录——————
import datetime
today_str = datetime.date.today().strftime("%Y%m%d") # 获取时间#登陆过期
user =authenticate(username=_email,password=_password)#调用用户认证模块
if user:
login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录
request.session.set_expiry(60*60) #登陆过期时间
next_url =request.GET.get('next','/')#跳转的页面,默认为首页
return redirect(next_url)
else:
errors ='认证失败!走到这请联系告诉我。。。'
# ——————注册后自动登录——————
else:
errors = obj.errors.as_data() #获取全部 account.py 处理的不同错误信息 #到页面显示{{ errors.name.0 }}
return render(request, 'gbacc_specific/gbacc_register.html', locals())
# ————————40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息———————— # ————————41PerfectCRM实现全局账号密码修改————————
from king_admin import base_admin # king_admin/base_admin.py
from king_admin import forms as kingforms #king_admin/forms.py
def gbacc_modify(request,user_id):#用户密码修改
admin_obj = base_admin.site.registered_sites['crm']['userprofile']#表类
model_form = kingforms.CreateModelForm(request,admin_obj=admin_obj)#modelform 生成表单 加验证
obj=admin_obj.model.objects.get(id=user_id)#类表的对象
errors={}#错误提示
if request.method=='POST':
_password0=request.POST.get('password0')
user =authenticate(username=obj.email,password=_password0)#调用用户认证模块
print('obj.email',obj.email)
print('验证比对数据库',user)
_password1=request.POST.get('password1')
_password2=request.POST.get('password2')
if user:
if _password1==_password2:
if len(_password1)>5:
obj.set_password(_password1)#继承Django方法 #加密
obj.save()
return redirect('/gbacc/gbacc_login/')
else:
errors['password_too_short']='密码必须不少于6字符'
else:
errors['invalid_password']='两次输入的密码不一样'
else:
errors['original_password'] = '原密码错误'
return render(request,'gbacc_specific/gbacc_modify.html',locals())
# ————————41PerfectCRM实现全局账号密码修改————————
# gbacc_views.py

 {#global_modify.html#}
 {## # ————————41PerfectCRM实现全局账号密码修改————————#}
 {% extends "gbacc_master/gbacc_sample.html" %}
 {% block right-container-content %}
     <h1 class="form-group col-lg-offset-4"> CRM 修改密码</h1>
     <form class="form-horizontal" method="post">{% csrf_token %}
         <div class="col-lg-offset-3">
             <div class="form-inline form-group">
                 <label class="col-sm-2"> 用户名: </label>
                 <input class="form-control" type="text" name="user" value="{{ obj }}" disabled>
             </div>
             <div class="form-inline form-group">
                 <label class="col-sm-2"> 原密码:</label>
                 <input type="password" name="password0" class="form-control">
                 {% if errors %}
                     <span style="color: red">{{ errors.original_password }}</span>
                 {% endif %}
             </div>
             <div class="form-inline form-group">
                 <label class="col-sm-2"> 新密码:</label>
                 <input type="password" name="password1" class="form-control">
                 {% if errors %}
                     <span style="color: red">{{ errors.password_too_short }}</span>
                 {% endif %}
             </div>
             <div class="form-inline form-group">
                 <label class="col-sm-2"> 新密码(重复): </label>
                 <input type="password" name="password2" class="form-control">
                 {% if errors %}
                     <span style="color: red">{{ errors.invalid_password }}</span>
                 {% endif %}
             </div>
             <div class="form-inline form-group">
                 <div class="col-xs-2">
                     <a class="btn btn-lg btn-primary btn-block" href="/gbacc/gbacc_login/">登陆</a>
                 </div>
                 <div class="col-xs-2">
                     <button class="btn btn-lg btn-primary btn-block" type="submit">提交</button>
                 </div>
             </div>
     </form>
     </div>
 {% endblock %}
 {## # ————————41PerfectCRM实现全局账号密码修改————————#}
{#global_modify.html#}

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


Django项目:CRM(客户关系管理系统)--50--41PerfectCRM实现全局账号密码修改的更多相关文章
- Django项目:CRM(客户关系管理系统)--52--43PerfectCRM实现AJAX全局账号登陆
		
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...
 - Django项目:CRM(客户关系管理系统)--51--42PerfectCRM实现AJAX全局账号注册
		
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
 - Django CRM客户关系管理系统
		
CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...
 - Django项目:CRM(客户关系管理系统)--48--39PerfectCRM实现登录+验证码+过期时间+页面保留账号
		
# gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...
 - Django项目:CRM(客户关系管理系统)--54--45PerfectCRM实现账号快速重置密码
		
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...
 - Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆
		
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...
 - CRM 客户关系管理系统
		
CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...
 - CRM客户关系管理系统-需求概设和详设
		
大概设计 大概设计就是对需求进行一个整体性分析,把需要实现的功能都列出来,对于客户关系管理系统,我们需要从角色出发,从而确定有哪些需求,最好是画个思维导图 首先我们是为培训学校这么一个场景来开发的,所 ...
 - CRM客户关系管理系统 北京易信软科信息技术有限公司
		
北京易信软科信息技术有限公司 推出大型erp系统,库存管理系统,客户关系管理系统,车辆登记管理系统,员工管理系统,采购管理系统,销售管理系统,为您的企业提供最优质的产品服务 北京易信软科您可信赖的北京 ...
 
随机推荐
- iOS开发系列-NSURLConnection
			
概述 NSURLConnection是负责发送请求,建立客户端与服务端的连接.发送数据给服务器,并收集来自服务器的响应数据.其中NSURLRequest类是用来封装一个请求,包含NSURL对象.请求方 ...
 - 基于Java Properties类设置本地配置文件
			
一.Java Properties类介绍 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件, ...
 - .NET中DataTable的常用操作
			
一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很 ...
 - 【期望DP】[zoj3329]One Person Game
			
题描: 有三个均匀的骰子,分别有k1,k2,k3个面,初始分数是0, 当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和, 当分数>n的时候结束.求需要掷骰子的次数 ...
 - 9.SpringJDBC模板类
			
1. Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2. 提供了JDBC模板,Spring框架提供的 * JdbcTemplate类 3. Spring框架可以整 ...
 - 读《深入PHP 面向对象、模式与实践》笔记
			
1. include() 和require() 语句的不同在于它们如何处理错误.使用require()调用文件发生错误时,将会停止整个程序;调用include()时遇到相同的错误,则会生成警告并停止执 ...
 - apache日志配置一例,包括指定存储目录与格式、自动删除过期的日志文件
			
有需要的朋友可以参考下(http://www.nanke0834.com) 1.vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 添加或修改为:复 ...
 - arguments的介绍(一)
			
arguments 是一个类数组对象.代表传给一个function的参数列表. 1.1 arguments length arguments 是个类数组对象,其包含一个 length 属性,可以用 a ...
 - html 按钮跳转问题(及其相关)
			
1.点击一个按钮跳转到另一个页面 (网址) 两种写法: <button onclick="{location.href='location.html'}">获取现在 ...
 - 深入理解JVM(一)类加载器部分:双亲委派模型
			
类加载器的父亲委托机制 在父亲委托机制中,各个类加载器按照父子关系形成了树形结构,除了根类加载器之外,其余的类加载器都有且只有一个父加载器. 先让最顶层可以加在的父加载器加栽(所有可加载的加载器中,处 ...