热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django+Jquery+Ajax+验证码登录案例

1,创建项目test042,创建应用app为booktest3,注册应用booktest作用让创建的应用运行起来4,在项目根

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登录页面具体布局如下:




{% csrf_token %}用户名:
密  码:
验证码:





---------------------
作者:ITxiaoke
来源:CSDN
原文:https://blog.csdn.net/u014745194/article/details/73997737?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

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





亲!你登录成功了,欢迎你!!!


{% csrf_token %}标题:
内容:




---------------------
作者: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 


推荐阅读
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文介绍了如何在用户登录时通过生成验证码图片进行身份验证,包括前端HTML表单的设计和后端JSP的实现。 ... [详细]
  • 基于Spring Boot的家政服务平台毕业设计项目(含源代码)
    本文档介绍了如何搭建和运行一个基于Spring Boot的家政服务平台,旨在为计算机专业学生提供毕业设计参考。项目涵盖了从环境配置到核心功能实现的全过程。 ... [详细]
author-avatar
肾虚养生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有