# gbacc_ajax_urls.py

 # ————————42PerfectCRM实现AJAX全局账号注册————————
from django.conf.urls import url
from gbacc import gbacc_ajax_views
urlpatterns = [
url(r'^gbacc_ajax_register/', gbacc_ajax_views.gbacc_ajax_register, name='gbacc_ajax_register'), # ajax注册 # ————————43PerfectCRM实现AJAX全局账号登陆————————
url(r'^gbacc_ajax_login/', gbacc_ajax_views.gbacc_ajax_login, name='gbacc_ajax_login'), # 全局登录
# LOGIN_URL = '/gbacc/gbacc_login/'# login_url 配置,默认'/accounts/login/' #注意 / (斜杠,绝对路径)#settings.py
# ————————43PerfectCRM实现AJAX全局账号登陆————————
]
# ————————42PerfectCRM实现AJAX全局账号注册————————

# gbacc_ajax_urls.py

 # gbacc_ajax_views.py
# ————————42PerfectCRM实现AJAX全局账号注册————————
from django.shortcuts import render #页面返回
#验证码函数 #处理注册的内容
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())
# 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)
# AJAX注册
from gbacc.gbacc_auxiliary.account import RegisterForm # 注册验证
from django.contrib.auth.hashers import make_password # 密码加密
from crm import models #数据库
def gbacc_ajax_register(request):
if request.method=='GET':
obj=RegisterForm(request=request, data=request.POST) #注册验证 #PerfectCRM.gbacc_auxiliary.account
return render(request, 'gbacc_ajax/gbacc_ajax_register.html',{'obj':obj})
elif request.method=='POST':
#返回的字符串 字典
ret={'status':False,'error':None,'data':None}
#进行验证 调用RegisterForm
obj=RegisterForm(request=request, data=request.POST)#注册验证 #PerfectCRM.gbacc_auxiliary.account
if obj.is_valid():
name = obj.cleaned_data.get('name')#获取用户名
pwd = obj.cleaned_data.get('password') #获取密码
email= obj.cleaned_data.get('email') #获取邮箱账号
password=make_password(pwd,)#密码加密
#print(username,password,email)
#——————数据库添加数据——————
models.UserProfile.objects.create(name=name,password=password,email=email,)
#——————数据库添加数据—————— #——————获取用户数据,放进个人主页——————
# user_info= models.UserProfile.objects. \
# filter(email=email, password=password). \
# values('id', 'name', 'email',).first()
# #nid=user_info.id
# print(user_info,type(user_info),'..........')
# admin_obj = base_admin.site.registered_sites['crm']['userprofile']#表类
# user_obj=admin_obj.model.objects.get(id=user_info['id'])#类表的对象
# user_obj.set_password(password)#加密
# user_obj.save()
# request.session['user_info'] = user_info # session
#print(user_info.id)
#——————获取用户数据,放进个人主页——————
#——————AJAX if (arg.status) { #状态——————
ret['status']=True #状态
ret['data']=obj.cleaned_data
# print(obj.cleaned_data)
# print(ret)
#对错误信息对象进行转化处理 前端不用二次序列化
ret=json.dumps(ret)#转为json格式
#return HttpResponse(ret)
#——————AJAX if (arg.status) { #状态——————
else:
#加入错误信息
#print(obj.errors)
ret['error']=obj.errors.as_data()
#提示为False
#ret['status']=False
#对错误信息对象进行转化处理 前端不用二次序列化
ret=json.dumps(ret,cls=JsonCustomEncoder) #转为json格式
#print(ret)
return HttpResponse(ret)
# ————————42PerfectCRM实现AJAX全局账号注册———————— # ————————43PerfectCRM实现AJAX全局账号登陆————————
from django.contrib.auth import login #记录登录 #Django在数据库创建一条记录 #记住密码,免登录
from django.contrib.auth import authenticate #调用用户认证模块
#全局账号登录
def gbacc_ajax_login(request):
if request.method=='GET':
next_url = request.GET.get("next")
if not next_url:
next_url='/'
request.session['next_url']=next_url
return render(request, 'gbacc_ajax/gbacc_ajax_login.html', locals())
elif request.method =="POST":
ret = {'status': False, 'usererror': None,'chederror': None, 'data': None,'next_url':None}
_email=request.POST.get('email')
_password=request.POST.get('password')
if request.session.get('CheckCode').upper() == request.POST.get('check_code').upper():
user =authenticate(username=_email,password=_password,)#调用用户认证模块
print('认证账号密码',user)
if user:
login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录.
# next_url= request.GET.get("next",'/')
ret['status'] = True # 状态
ret['next_url'] = request.session.get('next_url')
ret = json.dumps(ret, cls=JsonCustomEncoder) # 转为json格式
else:
ret['usererror']='账号或者密码错误!'
# 对错误信息对象进行转化处理 前端不用二次序列化
ret = json.dumps(ret, cls=JsonCustomEncoder)
else:
ret['chederror'] = '验证码错误!'
#对错误信息对象进行转化处理 前端不用二次序列化
ret=json.dumps(ret,cls=JsonCustomEncoder)
return HttpResponse(ret)
# ————————43PerfectCRM实现AJAX全局账号登陆————————

# gbacc_ajax_views.py

 {#gbacc_ajxa_login.html#}
{## ————————43PerfectCRM实现AJAX全局账号登陆————————#}
{% extends "gbacc_master/gbacc_sample.html" %}
{% block right-container-content %}
<div class="container col-lg-offset-3">
<form class="form-signin col-lg-3 pu" method="post" id="fm"
action="gbacc_ajax_login.html">{% csrf_token %}
<h2 class="form-signin-heading">CRM 登陆 AJAX</h2>
<div class="form-group">
<label for="inputEmail" class="sr-only col-sm-2">邮箱账号</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱账号" required=""
autofocus="">
<div class="alert alert-danger hide">
<span id="spemail"></span> {# ajax 验证#}
</div>
</div>
<div class="form-group">
<label for="inputPassword" class="sr-only col-sm-2">密码</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="密码"
required="">
<div class="alert alert-danger hide">
<span id="sppwd"></span> {# ajax 验证#}
</div>
</div> <div class="form-group">
<label for="text">验证码</label>
<div class="row">
<div class="col-xs-7">
<input type="text" class="form-control" id="check_code" name="check_code"
placeholder="请输入验证码">{{ obj.errors.pwds }}
</div>
<div class="col-xs-5">
<img id="check_code_img" src="/gbacc/check_code.html/" onclick="loginchangeCheckCode(this);">
{## 配置URL绝对路径#}{## 绑定JS刷新验证码图片#}
</div>
</div>
<div class="col-xs-9" style="padding-left: 0;">
<div class="alert alert-danger hide">
<span style="padding: 0 5px 0 5px;display: inline-block;font-size: 14px">
<i class="fa fa-minus-circle" aria-hidden="true"></i>
</span>
<span id="error_msg" style="font-size: 12px;"></span>
</div>
</div>
</div> <div class="checkbox">
<label><input type="checkbox" value="remember-me"> 记住账号 </label>
</div>
<div class="col-xs-6">
<a id="submit" class="btn btn-lg btn-primary btn-block">登陆</a>
</div> </form>
</div>
{% endblock %} {% block js %}{#自定义内容 js#}
<script src="/static/gbacc_ajax_js/gbacc_ajax_login_js.js"></script> {#登陆JS事件#}
{% endblock %}
{## ————————43PerfectCRM实现AJAX全局账号登陆————————#}

{#gbacc_ajxa_login.html#}

 // gbacc_ajax_login_js.js
// # ————————43PerfectCRM实现AJAX全局账号登陆————————
$(function () { // 页面加载完自动调用
gbacc_ajax_login();
});
function gbacc_ajax_login() {
$('#submit').click(function () {
var $msg = $('#error_msg');//用来验证码错误 提示
var sppwd=$('#sppwd');//密码
$msg.parent().addClass('hide');//初始为隐藏提示标签 验证码
sppwd.parent().addClass('hide'); //初始为隐藏提示标签 密码
$.ajax({
url: '/gbacc/gbacc_ajax_login/', //绑定验证的页面
type: 'POST',
data: $('#fm').serialize(),//表单所有内容
dataType: 'JSON',
success: function (arg) {
console.log(arg);
if(arg.status){
location.href = arg.next_url;//跳 转到 页面
}else{
//判断是否有这个错误信息
if(arg.usererror!=null){
sppwd.parent().removeClass('hide');
sppwd.text(arg.usererror); // 密码
}
if(arg.chederror!=null){
$msg.parent().removeClass('hide');//移除隐藏提示标签
$msg.text(arg.chederror);
}
var img = $('#check_code_img')[0];//图片验证码变量
img.src = img.src + '?';//重载图片验证码
$('#check_code').val('');//密码和验证码框清空
}
}
})
})
}
//刷新验证码
function loginchangeCheckCode(ths){
ths.src = ths.src + '?';
}
// # ————————43PerfectCRM实现AJAX全局账号登陆————————

// gbacc_ajax_login_js.js


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

Django项目:CRM(客户关系管理系统)--52--43PerfectCRM实现AJAX全局账号登陆的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--54--45PerfectCRM实现账号快速重置密码

    # gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...

  2. Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆

    # gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...

  3. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

  4. Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  5. Django项目:CRM(客户关系管理系统)--63--53PerfectCRM实现CRM客户报名流程缴费

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  6. Django项目:CRM(客户关系管理系统)--56--47PerfectCRM实现CRM客户报名流程01

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  7. Django项目:CRM(客户关系管理系统)--74--64PerfectCRM实现CRM课程排名详情

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  8. Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  9. Django项目:CRM(客户关系管理系统)--55--46PerfectCRM实现登陆后页面才能访问

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

随机推荐

  1. Python 字符串切片(slice)

    切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...

  2. 论一个X倒下了千千万万个X站起来了

        一个人倒下了,千千万万个人站起来了.起源自革命时期的标语.后来又被应用于各种激励的场景.     这句话在当时环境是好的,但是在无数人应用在不同场景,并且这些场景都不怎么好的时候.人的普遍思维 ...

  3. Vagrant box ubuntu/xenial64 添加vagrant用户解决没有登录密码的问题

    参考了Vagrant box ubuntu/xenial64 の ubuntuユーザ の passwordについて 1. 可以通过 Git Bash 使用  vagrant ssh 登录到Ubuntu ...

  4. linux 系统优化初始化配置

    一.系统优化配置 1.修改yum源  配置国内yum源 阿里云yum源地址 #CentOS 5.x wget -O /etc/yum.repos.d/CentOS-Base.repo http://m ...

  5. AutoIt自动化编程(3)【转】

    模拟鼠标点击(按钮等)控件 既然是模拟用户操作,自然就包括了模拟鼠标点击在内. 适用命令/函数:Click/MouseClick/ControlClick 其中Click/MouseClick用来模拟 ...

  6. CSS3 学习笔记(动画 多媒体查询)

    动画 1.@keyframes规则用于创建动画.在@keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果 2.使用animation进行动画捆绑.两个值:动画名称.时长 ...

  7. springboot实现转发和重定向

    1.转发     方式一:使用 "forword" 关键字(不是指java关键字),注意:类的注解不能使用@RestController 要用@Controller @Reques ...

  8. 淼一淼A+B problem

    鲁迅:这可是道难题呢! 鲁迅:我没说过这话,不过确实在理. 某改题毕,但见LOJ之上有数「A+B」之AC记录.余亦尝闻A+B之趣味无穷,遂兴起而码之. 少顷,AC之,吾心所畅. #include< ...

  9. python 版本配置问题

    环境变量里有anaconda 但是命令行输入python却并不是anaconda里的python 这个现象的产生是由于anaconda在环境变量里的顺序靠后,python2.7已经在其他环境变量里被找 ...

  10. 深入浅出 Java Concurrency (24): 并发容器 part 9 双向队列集合 Deque[转]

    有一段时间没有更新了.接着上节继续吧. Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque.这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂.下图描 ...