Django项目:CRM(客户关系管理系统)--52--43PerfectCRM实现AJAX全局账号登陆
1 # gbacc_ajax_urls.py 2 3 4 # ————————42PerfectCRM实现AJAX全局账号注册———————— 5 from django.conf.urls import url 6 from gbacc import gbacc_ajax_views 7 urlpatterns = [ 8 url(r'^gbacc_ajax_register/', gbacc_ajax_views.gbacc_ajax_register, name='gbacc_ajax_register'), # ajax注册 9 10 # ————————43PerfectCRM实现AJAX全局账号登陆———————— 11 url(r'^gbacc_ajax_login/', gbacc_ajax_views.gbacc_ajax_login, name='gbacc_ajax_login'), # 全局登录 12 # LOGIN_URL = '/gbacc/gbacc_login/'# login_url 配置,默认'/accounts/login/' #注意 / (斜杠,绝对路径)#settings.py 13 # ————————43PerfectCRM实现AJAX全局账号登陆———————— 14 ] 15 # ————————42PerfectCRM实现AJAX全局账号注册————————
1 # gbacc_ajax_views.py 2 # ————————42PerfectCRM实现AJAX全局账号注册———————— 3 from django.shortcuts import render #页面返回 4 #验证码函数 #处理注册的内容 5 from io import BytesIO #创建内存空间 6 from django.shortcuts import HttpResponse #页面返回 7 from gbacc.gbacc_auxiliary.check_code import create_validate_code #验证图片 8 def check_code(request): 9 stream = BytesIO()#创建内存空间 10 img, code = create_validate_code()#调用验证码图片生成函数 返回图片 和 对应的验证码 11 img.save(stream, 'PNG')#保存为PNG格式 12 request.session['CheckCode'] = code#保存在session中 13 return HttpResponse(stream.getvalue()) 14 # json 对错误信息对象进行处理 #处理注册的内容 15 import json # 转为json格式 16 from django.core.exceptions import ValidationError # 错误信息 17 class JsonCustomEncoder(json.JSONEncoder): 18 def default(self, field): 19 if isinstance(field, ValidationError): # 如果是错误信息进行处理 20 return {'code': field.code, 'messages': field.messages} 21 else: 22 return json.JSONEncoder.default(self, field) 23 # AJAX注册 24 from gbacc.gbacc_auxiliary.account import RegisterForm # 注册验证 25 from django.contrib.auth.hashers import make_password # 密码加密 26 from crm import models #数据库 27 def gbacc_ajax_register(request): 28 if request.method=='GET': 29 obj=RegisterForm(request=request, data=request.POST) #注册验证 #PerfectCRM.gbacc_auxiliary.account 30 return render(request, 'gbacc_ajax/gbacc_ajax_register.html',{'obj':obj}) 31 elif request.method=='POST': 32 #返回的字符串 字典 33 ret={'status':False,'error':None,'data':None} 34 #进行验证 调用RegisterForm 35 obj=RegisterForm(request=request, data=request.POST)#注册验证 #PerfectCRM.gbacc_auxiliary.account 36 if obj.is_valid(): 37 name = obj.cleaned_data.get('name')#获取用户名 38 pwd = obj.cleaned_data.get('password') #获取密码 39 email= obj.cleaned_data.get('email') #获取邮箱账号 40 password=make_password(pwd,)#密码加密 41 #print(username,password,email) 42 #——————数据库添加数据—————— 43 models.UserProfile.objects.create(name=name,password=password,email=email,) 44 #——————数据库添加数据—————— 45 46 #——————获取用户数据,放进个人主页—————— 47 # user_info= models.UserProfile.objects. \ 48 # filter(email=email, password=password). \ 49 # values('id', 'name', 'email',).first() 50 # #nid=user_info.id 51 # print(user_info,type(user_info),'..........') 52 # admin_obj = base_admin.site.registered_sites['crm']['userprofile']#表类 53 # user_obj=admin_obj.model.objects.get(id=user_info['id'])#类表的对象 54 # user_obj.set_password(password)#加密 55 # user_obj.save() 56 # request.session['user_info'] = user_info # session 57 #print(user_info.id) 58 #——————获取用户数据,放进个人主页—————— 59 #——————AJAX if (arg.status) { #状态—————— 60 ret['status']=True #状态 61 ret['data']=obj.cleaned_data 62 # print(obj.cleaned_data) 63 # print(ret) 64 #对错误信息对象进行转化处理 前端不用二次序列化 65 ret=json.dumps(ret)#转为json格式 66 #return HttpResponse(ret) 67 #——————AJAX if (arg.status) { #状态—————— 68 else: 69 #加入错误信息 70 #print(obj.errors) 71 ret['error']=obj.errors.as_data() 72 #提示为False 73 #ret['status']=False 74 #对错误信息对象进行转化处理 前端不用二次序列化 75 ret=json.dumps(ret,cls=JsonCustomEncoder) #转为json格式 76 #print(ret) 77 return HttpResponse(ret) 78 # ————————42PerfectCRM实现AJAX全局账号注册———————— 79 80 81 # ————————43PerfectCRM实现AJAX全局账号登陆———————— 82 from django.contrib.auth import login #记录登录 #Django在数据库创建一条记录 #记住密码,免登录 83 from django.contrib.auth import authenticate #调用用户认证模块 84 #全局账号登录 85 def gbacc_ajax_login(request): 86 if request.method=='GET': 87 next_url = request.GET.get("next") 88 if not next_url: 89 next_url='/' 90 request.session['next_url']=next_url 91 return render(request, 'gbacc_ajax/gbacc_ajax_login.html', locals()) 92 elif request.method =="POST": 93 ret = {'status': False, 'usererror': None,'chederror': None, 'data': None,'next_url':None} 94 _email=request.POST.get('email') 95 _password=request.POST.get('password') 96 if request.session.get('CheckCode').upper() == request.POST.get('check_code').upper(): 97 user =authenticate(username=_email,password=_password,)#调用用户认证模块 98 print('认证账号密码',user) 99 if user: 100 login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录. 101 # next_url= request.GET.get("next",'/') 102 ret['status'] = True # 状态 103 ret['next_url'] = request.session.get('next_url') 104 ret = json.dumps(ret, cls=JsonCustomEncoder) # 转为json格式 105 else: 106 ret['usererror']='账号或者密码错误!' 107 # 对错误信息对象进行转化处理 前端不用二次序列化 108 ret = json.dumps(ret, cls=JsonCustomEncoder) 109 else: 110 ret['chederror'] = '验证码错误!' 111 #对错误信息对象进行转化处理 前端不用二次序列化 112 ret=json.dumps(ret,cls=JsonCustomEncoder) 113 return HttpResponse(ret) 114 # ————————43PerfectCRM实现AJAX全局账号登陆————————
1 {#gbacc_ajxa_login.html#} 2 {## ————————43PerfectCRM实现AJAX全局账号登陆————————#} 3 {% extends "gbacc_master/gbacc_sample.html" %} 4 {% block right-container-content %} 5 <div class="container col-lg-offset-3"> 6 <form class="form-signin col-lg-3 pu" method="post" id="fm" 7 action="gbacc_ajax_login.html">{% csrf_token %} 8 <h2 class="form-signin-heading">CRM 登陆 AJAX</h2> 9 <div class="form-group"> 10 <label for="inputEmail" class="sr-only col-sm-2">邮箱账号</label> 11 <input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱账号" required="" 12 autofocus=""> 13 <div class="alert alert-danger hide"> 14 <span id="spemail"></span> {# ajax 验证#} 15 </div> 16 </div> 17 <div class="form-group"> 18 <label for="inputPassword" class="sr-only col-sm-2">密码</label> 19 <input type="password" name="password" id="inputPassword" class="form-control" placeholder="密码" 20 required=""> 21 <div class="alert alert-danger hide"> 22 <span id="sppwd"></span> {# ajax 验证#} 23 </div> 24 </div> 25 26 27 <div class="form-group"> 28 <label for="text">验证码</label> 29 <div class="row"> 30 <div class="col-xs-7"> 31 <input type="text" class="form-control" id="check_code" name="check_code" 32 placeholder="请输入验证码">{{ obj.errors.pwds }} 33 </div> 34 <div class="col-xs-5"> 35 <img id="check_code_img" src="/gbacc/check_code.html/" onclick="loginchangeCheckCode(this);"> 36 {## 配置URL绝对路径#}{## 绑定JS刷新验证码图片#} 37 </div> 38 </div> 39 <div class="col-xs-9" style="padding-left: 0;"> 40 <div class="alert alert-danger hide"> 41 <span style="padding: 0 5px 0 5px;display: inline-block;font-size: 14px"> 42 <i class="fa fa-minus-circle" aria-hidden="true"></i> 43 </span> 44 <span id="error_msg" style="font-size: 12px;"></span> 45 </div> 46 </div> 47 </div> 48 49 <div class="checkbox"> 50 <label><input type="checkbox" value="remember-me"> 记住账号 </label> 51 </div> 52 <div class="col-xs-6"> 53 <a id="submit" class="btn btn-lg btn-primary btn-block">登陆</a> 54 </div> 55 56 </form> 57 </div> 58 {% endblock %} 59 60 {% block js %}{#自定义内容 js#} 61 <script src="/static/gbacc_ajax_js/gbacc_ajax_login_js.js"></script> {#登陆JS事件#} 62 {% endblock %} 63 {## ————————43PerfectCRM实现AJAX全局账号登陆————————#}
1 // gbacc_ajax_login_js.js 2 // # ————————43PerfectCRM实现AJAX全局账号登陆———————— 3 $(function () { // 页面加载完自动调用 4 gbacc_ajax_login(); 5 }); 6 function gbacc_ajax_login() { 7 $('#submit').click(function () { 8 var $msg = $('#error_msg');//用来验证码错误 提示 9 var sppwd=$('#sppwd');//密码 10 $msg.parent().addClass('hide');//初始为隐藏提示标签 验证码 11 sppwd.parent().addClass('hide'); //初始为隐藏提示标签 密码 12 $.ajax({ 13 url: '/gbacc/gbacc_ajax_login/', //绑定验证的页面 14 type: 'POST', 15 data: $('#fm').serialize(),//表单所有内容 16 dataType: 'JSON', 17 success: function (arg) { 18 console.log(arg); 19 if(arg.status){ 20 location.href = arg.next_url;//跳 转到 页面 21 }else{ 22 //判断是否有这个错误信息 23 if(arg.usererror!=null){ 24 sppwd.parent().removeClass('hide'); 25 sppwd.text(arg.usererror); // 密码 26 } 27 if(arg.chederror!=null){ 28 $msg.parent().removeClass('hide');//移除隐藏提示标签 29 $msg.text(arg.chederror); 30 } 31 var img = $('#check_code_img')[0];//图片验证码变量 32 img.src = img.src + '?';//重载图片验证码 33 $('#check_code').val('');//密码和验证码框清空 34 } 35 } 36 }) 37 }) 38 } 39 //刷新验证码 40 function loginchangeCheckCode(ths){ 41 ths.src = ths.src + '?'; 42 } 43 // # ————————43PerfectCRM实现AJAX全局账号登陆————————
如果感觉本章博客对您有帮助,请尽情打赏吧!
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!