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全局账号注册————————
# gbacc_ajax_urls.py

 

 

 

  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全局账号登陆————————
# gbacc_ajax_views.py

 

 

 

 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全局账号登陆————————#}
{#gbacc_ajxa_login.html#}

 

 

 

 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全局账号登陆————————
// gbacc_ajax_login_js.js

 

 

 

 

 


 

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

 

posted @ 2018-04-12 18:26  颜言  阅读(339)  评论(0编辑  收藏  举报