1,创建项目test04

2,创建应用app为booktest

3,注册应用booktest

作用让创建的应用运行起来

4,在项目根目录下创建模板templates目录

  • 作用就是存放html文件

  • 在项目的settings.py文件中配置模板,如下图:

5,在项目根目录下创建static目录

  • 作用就是存放css/图片/js等文件

  • 在项目的settings.py文件中配置static文件,如下图

6,数据库的创建与配置

手动的在mysql数据库中创建test04数据库,如下图

7,DEBUG开关设置

8,设置编码和时间

LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Asia/Shanghai'

9,项目的urls文件中配置如下:

urlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'^',include('booktest.urls'))
]

10,在booktest应用下创建urls目录并配置

from django.conf.urls import url
from  booktest import viewsurlpatterns = [# 登录成功urlurl(r'^success/$', views.success),# ajax登录urlurl(r'^login_ajax/$', views.login_ajax),# ajax登录校验urlurl(r'^login_ajax_check/$', views.login_ajax_check),# 生产验证码图片urlurl(r'^verify_code/$', views.verify_code),# 发帖页面urlurl(r'^post_article/$', views.post_article),
]
---------------------
作者:ITxiaoke
来源:CSDN
原文:https://blog.csdn.net/u014745194/article/details/73997737?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

11,在booktest应用views中创建各个视图函数

from django.shortcuts import render
from django.http import JsonResponse
# PIL是python2版本的图像处理库,不过现在用Pillow比PIL强大,是python3的处理库
from PIL import Image, ImageDraw, ImageFont
from django.http import HttpResponse
from django.shortcuts import render, redirect
import random
# 在python2.x中导入模块方法:
# from StringIO import String
# 在python2.x中它还有个孪生兄弟,运行速度比它快,用c实现的
# from cStringIO import StringIO# 在python3.x中,StringIO已经在io模块中了,导入方法
from io import BytesIO# ajax登录视图函数
def login_ajax(request):return render(request, 'booktest/login_ajax.html')# ajax登录校验回调视图函数
def login_ajax_check(request):# 1,获取用户输入的用户名和密码uname = request.POST.get('uname')password = request.POST.get('password')# 获取用户输入的验证码vcode = request.POST.get('vcode')# 获取session中的验证码vcode_session = request.session.get('verifycode')# 2,用户名和密码校验if uname == 'xiaoke' and password == '123456' and vcode == vcode_session:# 保存用户的登录状态request.session['isLogin']=Truerequest.session['uname']=unamerequest.session['password']=passwordreturn JsonResponse({'msg': 'ok'})elif uname != 'xiaoke' or password != '123456':return JsonResponse({'msg': 'fail_user'})elif vcode != vcode_session:return JsonResponse({'msg': 'fail_verify'})def verify_code(request):# 1,定义变量,用于画面的背景色、宽、高# random.randrange(20, 100)意思是在20到100之间随机找一个数bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)width = 100height = 25# 2,创建画面对象im = Image.new('RGB', (width, height), bgcolor)# 3,创建画笔对象draw = ImageDraw.Draw(im)# 4,调用画笔的point()函数绘制噪点,防止攻击for i in range(0, 100):# 噪点绘制的范围xy = (random.randrange(0, width), random.randrange(0, height))# 噪点的随机颜色fill = (random.randrange(0, 255), 255, random.randrange(0, 255))# 绘制出噪点draw.point(xy, fill=fill)# 5,定义验证码的备选值str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'# 6,随机选取4个值作为验证码rand_str = ''for i in range(0, 4):rand_str += str1[random.randrange(0, len(str1))]# 7,构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”font = ImageFont.truetype('FreeMono.ttf', 23)# 8,构造字体颜色fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))# 9,绘制4个字draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)# 9,用完画笔,释放画笔del draw# 10,存入session,用于做进一步验证request.session['verifycode'] = rand_str# 11,内存文件操作buf = BytesIO()# 12,将图片保存在内存中,文件类型为pngim.save(buf, 'png')# 13,将内存中的图片数据返回给客户端,MIME类型为图片pngreturn HttpResponse(buf.getvalue(), 'image/png')# ajax登录成功视图函数
def success(request):# 用户已经登录if request.session.get('isLogin'):return render(request, 'booktest/success.html')else:return redirect('/login_ajax/')# 发帖操作视图函数
def post_article(request):# 获取登录的用户名uname = request.session.get('uname')# 获取帖子的标题title = request.POST.get('title')content = request.POST.get('content')return HttpResponse('%s发了一篇名为%s的帖子:%s' % (uname.encode('utf-8').decode('utf-8'),title.encode('utf-8').decode('utf-8'),content.encode('utf-8').decode('utf-8')))
---------------------
作者:ITxiaoke
来源:CSDN
原文:https://blog.csdn.net/u014745194/article/details/73997737?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

12,ajax登录页面布局代码如下:

以下是csrf攻击的原理图:

csrf_token 的目地是为了防止csrf公积,django默认打开csrf:如下代码
‘django.middleware.csrf.CsrfViewMiddleware’,
查看网页源代码可知,csrf的键和值,所以请求的时候要携带,否则django直接禁止:

ajax登录页面具体布局如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title><script src="/static/js/jquery-1.12.4.min.js"></script><style>#errorMsg {display: none;color: red;}</style><script>$(function () {$('#btnLogin').click(function () {$('uname').reset;csrf = $('input').val();uname = $('#uname').val();password = $('#password').val();vcode = $('#vcode').val();//发起ajax请求,注意csrf攻击$.post('/login_ajax_check/', {'csrfmiddlewaretoken': csrf,'uname': uname,'password': password,'vcode': vcode,}, function (data) {//获取返回的数据并进行操作if (data.msg === 'ok') {//登录成功location.href = '/success/' //跳转到成功页面} else if (data.msg === 'fail_user') {$('#errorMsg').show().text('亲!用户名或密码错误!')} else if (data.msg === 'fail_verify') {//验证码错误$('#errorMsg').show().text('亲!验证码错误!')}})});});</script>
</head><body><div>{% csrf_token %}用户名:<input type="text" id="uname"><br/>密&nbsp;&nbsp;码:<input type="password" id="password"><br/>验证码:<input type="text" id="vcode"/><br/><!--直接调用生产图片验证码的视图函数,生产验证码--><img src="/verify_code/" id="imgvcode"/><br/><input type="button" value="登录" id="btnLogin"><br/><div id="errorMsg"></div>
</div></body>
</html>
---------------------
作者:ITxiaoke
来源:CSDN
原文:https://blog.csdn.net/u014745194/article/details/73997737?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

13,登录成功页面,进行发帖布局代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录成功,发帖页面</title>
</head>
<body><h2>亲!你登录成功了,欢迎你!!!</h2>
<form method="post" action="/post_article/">{% csrf_token %}标题:<input type="text" name="title"/><br/>内容:<textarea name="content"></textarea><br/><input type="submit" value="发帖"/>
</form>
</body>
</html>
---------------------
作者:ITxiaoke
来源:CSDN
原文:https://blog.csdn.net/u014745194/article/details/73997737?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

14,执行迁移,生成session表

  • session表示需要执行迁移后,才会在mysql数据库中生成

15,查看mysql数据库

  • show tables;查看数据库test04中的表
  • django_session就是session表

16,开始登录测试

这是登录成功后的页面,进行发帖

这是发帖页面

  • 输入用户名、密码和验证码

17,查看数据库中session表

 查看Cookie中的sessionid值为“hzlqkmdkn6461kfwfm2oj7p5889o2fo1”,数据表中session的键为“hzlqkmdkn6461kfwfm2oj7p5889o2fo1”,是一样的,这样,服务器就可以在众多的请求者中找到对应的Session数据。

转载自https://blog.csdn.net/u014745194/article/details/73997737

Django+Jquery+Ajax+验证码登录案例相关推荐

  1. django+jquery ajax post csrf 配置

    2019独角兽企业重金招聘Python工程师标准>>> django+jquery ajax post csrf 配置: <body> {% csrf_token %} ...

  2. 如何使用Bootstrap Modal和jQuery AJAX创建登录功能

    by Yogi 由瑜伽士 Bootstrap Modal is an excellent way to create a Login form on your website. In this tut ...

  3. django jquery ajax 知识点

    示例: <div id='d'>1</div> <div> <div id='i1' name='123'> <h1>fff</h1& ...

  4. jquery ajax mysql登录_ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库...

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在 如果使用ajax一定是要有1个处理页面的,处理页面只是操作数据库并且返回 ...

  5. Jquery Ajax 登录,服务端分别为 aspx,ashx,asmx

    Jquery Ajax 登录,服务端分别为 aspx,ashx,asmx 原文: http://www.cnblogs.com/StudyLife/archive/2012/02/22/2363174 ...

  6. ajax拿table里的th值,Jquery Ajax 异步设置Table中某列的值

    可根据table中某列中的ID去改变某列的值! 只是参考,实际应用中不能这样做的,如果有很多行,频繁访问服务器,服务器是顶不住的! JS: $(document).ready(function () ...

  7. django 接收ajax请求

    原文:http://qindongliang.iteye.com/blog/2147336 Ajax的出现让Web展现了更新的活力,基本所有的语言,都动态支持Ajax与起服务端进行通信,并在页面实现无 ...

  8. ajax 更新页面变量,[Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量

    最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...

  9. Django使用图片验证码加邮箱或手机号登录

    实现页面效果 实现思路 使用form渲染数据 校验手机号(格式.是否注册).密码以及验证码 生成图片验证码 ''' pillow:是python处理图片的模块,很强大 ''' import rando ...

最新文章

  1. [转]那些年我们一起清除过的浮动
  2. CentOs配置网卡
  3. 引入JQuery提示:Uncaught ReferenceError: $ is not defined
  4. CXF与Web项目集成---without Spring
  5. 从底层重学 Java 之 Character 字符型 Gitchat连接
  6. java 审计 漏洞函数_Java Web代码审计流程与漏洞函数
  7. C++实现二叉查找树
  8. IT公司100题-14-排序数组中和为给定值的两个数字
  9. 删除Office系列软件多余激活信息
  10. 单片机ADC采样算法----加权递推平均滤波法
  11. RedHat Linux 加入域
  12. 向android获取文件路径,在Android上获取图像的文件路径
  13. python cv2 绘制不规则形状的最小外接矩形、最大内接矩形、最大内接圆、最小外接圆、拟合椭圆
  14. 我们的眼睛用得太狠了
  15. 安卓查看内存读写测试软件_办公电脑太慢?试试加条内存就好!内存晒单和内存问题科普...
  16. 苹果IOS9为加强个人隐私信息保护强制HTTPS,APP开发者需申请SSL证书
  17. Office常用快捷键
  18. 顶级白嫖!!!八个python免费自学网站一周搞定python(抓紧收藏)
  19. 《计算机视觉之目标检测》IOU详解及代码
  20. Linux TCP/IP大合集

热门文章

  1. Lisp尺寸标注增加前后缀_求一CAD标注加前缀与后缀lisp
  2. react 组件传值
  3. matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组
  4. 三诺+n20g+微型计算机,原来是他?揭秘三诺永恒系列开山鼻祖
  5. MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选
  6. php fetch返回false,Php fetch返回字符串而不是布爾值“true / false”值
  7. php asserttrue,PHP8.0的新特性:错误处理方面已经改进
  8. 计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt
  9. openglshader实现虚拟场景_虚拟演播室设计原则
  10. object htmldivelement什么意思_深入探究 Function amp; Object 鸡蛋问题