# 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全局账号登陆———————— # ————————44PerfectCRM实现账号快速注册登陆————————
url(r'^gbacc_fast_login/', gbacc_ajax_views.gbacc_fast_login, name='gbacc_fast_login'), # 快速注册登陆
# ————————44PerfectCRM实现账号快速注册登陆————————
]
# ————————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全局账号登陆———————— # ————————44PerfectCRM实现账号快速注册登陆————————
from django.core.mail import send_mail
# send_mail的参数分别是 邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
import random
#发送邮件的功能 #验证码#密码
class stmp() :
def __init__(self):
self.nowTime=None #现在的时间
self.oldTime=None #过期的时间
self.emaillist=[] #发送给谁
self.code=None #验证码#密码
def stmps(self,request,email): #传参数#页面,session #邮箱,发送给谁
self.emaillist.append(email) #将邮箱地址添加到调用Django发送邮件功能
# ——————生成发送的时间,用来过期时间——————
Time = datetime.datetime.now() #现在的时间
self.oldTime = Time + datetime.timedelta(seconds=60) # 设置验证码过期时间 #现在的时间加上设置的参数等于过期时间
self.oldTime = self.oldTime.strftime('%Y-%m-%d %H:%M:%S') # 格式化时间
request.session['oldTime'] = self.oldTime # 将过期时间放进session进行对比
# ——————生成发送的时间,用来过期时间——————
# ——————生成验证码——————
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
chars = ''.join((_letter_cases, _upper_cases, _numbers)) # 变成一条字符串
list = random.sample(chars, 4) # 从一条字符串随机选4个字符变成列表
self.code = ''.join(list) # 列表变字符串
request.session['check_smtp'] = self.code # 将验证码放进session进行对比#邮件内容
# ——————生成验证码——————
# ——————调用Django发送邮件——————
title= 'PerfectCRM项目自动邮件:%s'%self.code # 邮件标题#防止一样的内容被邮箱屏蔽
send_mail(title, # 邮件标题
self.code, # 验证码内容
'perfectcrm@sina.cn', # 发送的邮箱 #根据情况重新配置
self.emaillist, # 接受的邮箱
fail_silently=False, # 静默,抛出异常
)
print('发送邮件成功!没收到要换标题!检查发送邮箱的配置!')
# ——————调用Django发送邮件——————
def nowtime(self): #现在的时间
self.nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 格式化时间
return self.nowTime #返回格式化后的时间
# ————————44PerfectCRM实现账号快速注册登陆———————— # ————————44PerfectCRM实现账号快速注册登陆————————
import datetime # 获取时间#登陆过期
from django.shortcuts import redirect #页面返回
# from django.contrib.auth import login # 记录登录 #Django在数据库创建一条记录 #记住密码,免登录
# from django.contrib.auth import authenticate # 调用用户认证模块
def gbacc_fast_login(request):
email = request.POST.get('email') # 让页面POST提交的值,在页面GET后仍然存在显示
_email = request.session.get('email') # 查询session 里
if not _email:
request.session['email'] = email # 创建保存到 session 里 #防止下面第一次检查账号没有值
today_str = datetime.date.today().strftime("%Y%m%d") #获取时间#登陆60*60秒后# 清空session的全部
errors = {} # 页面的错误提示
stmpemail = stmp() #实例化发送邮件的功能
if request.method =="POST":
if email != _email: #检查是不是同一个账号,防止验证码用到其他账号
request.session['email'] = email # 不是同一个账号,就保存新账号到session里
request.session['oldTime'] = None # 同时清空过期时间,重新生成验证码发送邮件
oldTime = request.session.get('oldTime') # 到session里获取过期的时间
if oldTime==None or stmpemail.nowtime() > oldTime: #判断过期的时间
stmpemail.stmps(request,email) #发送验证码邮件
errors['error'] = "验证码邮件已发送成功!60秒后过期!"
else:
errors['error'] = "请输入验证码!验证码在%s后过期!" % oldTime print('验证码:',request.session['check_smtp'])
if request.POST.get('check_code'): #前端输入验证码
if request.session['check_smtp'].upper() == request.POST.get('check_code').upper():#验证码对比
username = models.UserProfile.objects.filter(email=email).first() # 查询数据库有没有这个账号
print('查询数据库',username)
if username == None: #数据库没有这个账号就创建
models.UserProfile.objects.create(email=email) #数据库创建一个新账号
user = models.UserProfile.objects.filter(email=email).first() # 查询数据库有没有这个账号(新账号)
print('登陆的账号',user.email)
login(request,user)#记录登录 #Django在数据库创建一条记录 #记住密码,免登录
request.session['check_smtp'] = None #登陆后验证码进行清空
request.session['oldTime'] = None #登陆后过期的时间 进行清空
request.session.set_expiry(60*60) #登陆60*60秒后# 清空session的全部
next_url =request.GET.get('next','/')#跳转的页面,默认为首页
return redirect(next_url)
else: #验证码对比不一样
errors['error']= "验证码错误!"
return render(request, 'gbacc_ajax/gbacc_fast_login.html', locals())
# ————————44PerfectCRM实现账号快速注册登陆————————

# gbacc_ajax_views.py

 # settings.py

 """
Django settings for PerfectCRM project. Generated by 'django-admin startproject' using Django 2.0.3. For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/ For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
""" import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'atkhzsd7emv4_okn@ynhji)p)qbpuvhq+a7@yx5=chaa0$l_br' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', # ————————04PerfectCRM实现King_admin注册功能————————
# 'crm.apps.CrmConfig',
'crm',
# ————————04PerfectCRM实现King_admin注册功能———————— # ————————02PerfectCRM创建ADMIN页面————————
'king_admin',
# ————————02PerfectCRM创建ADMIN页面————————
# ————————38PerfectCRM实现全局账号登录注销————————
'gbacc',
# ————————38PerfectCRM实现全局账号登录注销———————— ] MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ROOT_URLCONF = 'PerfectCRM.urls' TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# ————————02PerfectCRM创建ADMIN页面————————
'DIRS': [os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'king_admin/king_templates'), # ————————03PerfectCRM创建基本数据————————
os.path.join(BASE_DIR, 'DBadd/DBadd_templates'),
# ————————03PerfectCRM创建基本数据————————
# ————————38PerfectCRM实现全局账号登录注销————————
os.path.join(BASE_DIR, 'gbacc/gbacc_templates'), ]
# ————————38PerfectCRM实现全局账号登录注销———————— ,
# ————————02PerfectCRM创建ADMIN页面————————
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] WSGI_APPLICATION = 'PerfectCRM.wsgi.application' # Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} # Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
] # Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/ # ————————01PerfectCRM基本配置ADMIN————————
#LANGUAGE_CODE = 'en-us' #英文转中文方法
LANGUAGE_CODE = 'zh-Hans'
# ————————01PerfectCRM基本配置ADMIN———————— TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' # ————————01PerfectCRM基本配置ADMIN————————
STATICFILES_DIRS = [os.path.join(BASE_DIR,'king_admin/static'),
# ————————01PerfectCRM基本配置ADMIN————————
# ————————38PerfectCRM实现全局账号登录注销————————
os.path.join(BASE_DIR, 'gbacc/static'),]
# ————————38PerfectCRM实现全局账号登录注销———————— # ————————34PerfectCRM实现CRM自定义用户————————
AUTH_USER_MODEL = 'crm.UserProfile'#使用自定的admin 表单
# ————————34PerfectCRM实现CRM自定义用户———————— # ————————44PerfectCRM实现账号快速注册登陆————————
# send e-mail
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' #email后端
EMAIL_USE_TLS = False #是否使用TLS安全传输协议
EMAIL_USE_SSL = True #是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST = 'smtp.sina.cn' #发送邮件的邮箱 的 SMTP服务器 #根据情况重新配置
EMAIL_PORT = 465 #发件箱的SMTP服务器端口 #一般不需要修改465
EMAIL_HOST_USER = 'perfectcrm@sina.cn' #发送邮件的邮箱账号 #根据情况重新配置 #perfectcrm@sina.cn pydjango@sina.cn
EMAIL_HOST_PASSWORD = 'admin123456' #发送邮件的邮箱密码 #根据情况重新配置 # ————————44PerfectCRM实现账号快速注册登陆————————

# settings.py

 {#gbacc_fast_login.html#}
{## ————————44PerfectCRM实现账号快速注册登陆————————#}
{% extends "gbacc_master/gbacc_sample.html" %}
{% block right-container-content %}
<div class="container col-lg-offset-3">
<form class="form-signin col-lg-4 pu" method="post" enctype="multipart/form-data">{% csrf_token %}
<h2 class="form-signin-heading">CRM 验证码注册登陆</h2>
<label for="inputEmail" class="sr-only col-sm-2">邮箱账号</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱账号"
required="" autofocus="" value={% if email %}{{ email }}{% else %}{{ '' }}{% endif %}>
<div class="form-group">
<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>
<button type="submit">发送验证码</button>
</div>
</div>
{% if errors %}
<span style="color: #761c19">{{ errors.error }}</span>
{% endif %}
<div class="checkbox">
<label><input type="checkbox" value="remember-me"> 记住账号 </label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">登陆</button>
</form>
</div>
{% endblock %}
{## ————————44PerfectCRM实现账号快速注册登陆————————#}

{#gbacc_fast_login.html#}


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

Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆的更多相关文章

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

    # gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...

  2. Django项目:CRM(客户关系管理系统)--49--40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息

    # gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...

  3. Django项目:CRM(客户关系管理系统)--47--38PerfectCRM实现全局账号登录注销02

    图片另存为  16*16  名字修改为      global_logo.jpg /*! *bootstrap.js * * Bootstrap v3.3.7 (http://getbootstrap ...

  4. Django项目:CRM(客户关系管理系统)--46--38PerfectCRM实现全局账号登录注销01

    python.exe manage.py startapp gbacc #urls.py """PerfectCRM URL Configuration The `url ...

  5. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  6. Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现CRM客户报名流程学生合同上传照片

    # sales_views.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.db import IntegrityError # 主动 ...

  7. Django项目:CRM(客户关系管理系统)--58--48PerfectCRM实现CRM客户报名流程学生合同

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  8. Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业

    # student_urls.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.conf.urls import url from bp ...

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

    图片另存为  16*16  名字修改为      bpm_logo.jpg /*! *bootstrap.js * * Bootstrap v3.3.7 (http://getbootstrap.co ...

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

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

随机推荐

  1. Hibernate的多对多映射

    一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...

  2. Java开发系列-JSP

    概述 JSP是java 服务器页面,它运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下. JSP主要作用是将内容的生成与页面相分离. JS ...

  3. opencv编译:The CXX compiler identification is unknown The C compiler identification is unknown

    opencv编译:The CXX compiler identification is unknown The C compiler identification is unknown 解决方法: F ...

  4. datetime与timestamp相互转换

    select unix_timestamp('2019-12-05 12:26:35'); );

  5. vue element传的值报_self.$scopedSlots.default is not a function

    问题描述:使用表格时做了v-if判断:首次渲染没有问题:反复操作便会报错: 解决办法:el-table上给v-if的 el-table-colunm 加上:key="Math.random( ...

  6. java实践经验几种常见数据库连接池的使用比较

    经历的几个产品及项目中,包括了各种数据库及应用服务器,基本上几种常见的数据库连接池都用到了,根据使用的情况把这些连接池比较一下吧.(http://m.0834jl.com) 感觉在介绍之前有必要阐述一 ...

  7. 容斥原理——状态压缩zoj3233 zoj2836升级版

    zoj2836就是裸的求lcm进行容斥,用dfs比较直观 zoj3233增加了一个集合b,lcm(b)的倍数是不符合条件的 那么在zoj2836的基础上,把lcm(x,lcm(b))造成的影响减去即可 ...

  8. JS中的Map和Set

    使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...

  9. 左神算法进阶班5_4设计可以变更的缓存结构(LRU)

    [题目] 设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能: set(key, value):将记录(key, value)插入该结构. get(key):返回key对应的valu ...

  10. 05_Spring AOP原理

    理解AOP相关概念 Target(目标对象):代理的目标对象 Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. ...