• 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


     

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

  • 相关阅读:
    Git出现error: Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge.的问题解决(Git代码冲突)
    JDK内置工具jstack(Java Stack Trace)(转)
    Java 5/Java 6/Java7/Java 8新特性收集
    Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行
    Linux出现cannot create temp file for here-document: No space left on device的问题解决
    解决树莓派8G的SD卡只能识别3.3G,SD卡扩容
    Windows下拷贝Linux的文件到本地(Putty)
    Linux下运行Java项目时,出现No X11 DISPLAY variable was set, but this program performed an operation which requires it.的问题解决
    Maven错误 diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator)问题解决
    Ubuntu下安装Maven
  • 原文地址:https://www.cnblogs.com/ujq3/p/8809605.html
Copyright © 2020-2023  润新知