Django博客搭建_用户注册1_图片生成
Blog项目——用户注册
文章目录
- Blog项目——用户注册
- 一、设计接口思路
- 二、功能分析
- 三、图片验证码接口代码实现
- 1.图片验证码认证
- 2.后端视图实现
- 2-1 测试
- 2-2 升级
- 四、类视图
一、设计接口思路
- 分析业务逻辑,明确在这个业务中需要涉及到几个相关子业务,将每个子业务当做一个接口来设计
- 分析接口的功能任务,明确接口的访问方式与返回数据:
- 接口的请求方式,如GET 、POST 、PUT等
- 接口的URL路径定义
- 需要前端传递的数据及数据格式(如路径参数、查询字符串、请求体表单、JSON等)
- 返回给前端的数据及数据格式
二、功能分析
- 用户名判断是否存在
- 手机号判断是否存在
- 图片验证码
- 短信验证码
- 注册保存用户数据
这里,我们考虑其他地方也可能会调用图形验证或者短信验证,因此将验证码功能独立出来,创建一个新应用verifications,在此应用中实现图片验证码、短信验证码:python ../manager.py startapp verifications
三、图片验证码接口代码实现
1.图片验证码认证
请求方法:GET
url定义:/image_code/<uuid:image_code_id>/
请求参数:url路径参数
参数 | 类型 | 前端是否必须传 | 描述 |
---|---|---|---|
image_codes | uuid字符串 | 是 | 图片验证码编号 |
uuid:Universally unique identifier(eg. 123e4567-e89b-12d3-a456-426655440000)
2.后端视图实现
a.将生成图像验证码的模块文件夹(GitHub已上传,位置:[utils/captcha])复制粘贴到项目根目录utils文件夹下
b.用于验证(图片验证、短信验证)功能,以后有可能在其他应用或项目中重用,所以单独创建一个应用来实现,所有验证相关的业务逻辑接口。在apps目录中创建一个verifications应用,并在settings.py文件中的INSTALLED_APPS列表中指定。
需要安装pillow包:pip install pillow
而这个包跑起来之后,返回两个值,第一个是这个图形验证码,而第二个就是这个图片的二级制码。
2-1 测试
from django.http import HttpResponsefrom utils.captcha.captcha import captcha# 图形验证
def demo(request):text, image = captcha.generate_captcha()return HttpResponse(content=image, content_type="image/jpg")
注意上面的返回类型imge不能加s,加了s就表示下载,访问页面就是这张图片
而此时,我们可以在我们的注册界面中添加这个路由就好了:
<a href="javascript:void(0);" class="captcha-graph-img"><img src="/demo" alt="验证码" title="点击刷新">
</a>
如果我们想实现单机的时候,也能更换图片,此时需要添加一个js
// register.html里面添加:
{% block stript %}<script src="../../static/js/users/register.js"></script>
{% endblock %}// js代码
$(function () {let $img = $(".form-item .captcha-graph-img img"); // 获取图像$img.click(generate);function generate() {let imageCodeUrl = '/demo/';$img.attr("src", imageCodeUrl);}
})
上面的代码是,首先获取一个值img
,他利用js获取,然后定义一个generate函数(利用函数去添加一个url的值),接下来就是当点击图像的时候,会自动去执行这个函数,给img添加属性。
2-2 升级
应为要考虑到,网站不是就自己用的,而是许多人可能会同时访问,则此时就需要一个唯一编码去绑定这个图片,我们这里就需要一个UUID(UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定)。
简单说下思路:首先,request页面的src刚刚开始为空,当加载js以后,自动调用generate函数,然后通过uuid生成器,将路径拼接之后访问后台。然后后台通过reids缓存图片的uuid和编码。同时日志器将text存下来(可要可不要)
register.js
$(function () {let $img = $(".form-item .captcha-graph-img img"); // 获取图像generate()$img.click(generate);function generate() {sImageCodeId = generateUUID();let imageCodeUrl = '/demo/' + sImageCodeId + '/';// let imageCodeUrl = '/demo/';$img.attr("src", imageCodeUrl);}// 生成图片UUID验证码function generateUUID() {let d = new Date().getTime();if (window.performance && typeof window.performance.now === "function") {d += performance.now(); //use high-precision timer if available}let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {let r = (d + Math.random() * 16) % 16 | 0;d = Math.floor(d / 16);return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);});return uuid;}
})
view.py
from utils.captcha.captcha import captcha
from django_redis import get_redis_connection
import logging
# Create your views here.logger = logging.getLogger("django")# 图形验证
def demo(request, image_code): # 获取图片的uuidtext, image = captcha.generate_captcha() # 生成验证码和图片# 将产生的uuid放入redis## 1.连接数据库con_redis = get_redis_connection("verify_codes")## 2.配置keyredis_key = "img_{}".format(image_code)## 3.设置过期时间con_redis.setex(redis_key, 300, text) # 过期时间为5分钟logger.info("IMAGE_CODE {}".format(text)) # 添加日志信息return HttpResponse(content=image, content_type="image/jpg") # 返回图片
urls.py
from django.urls import path
from . import viewsapp_name = "verifications"urlpatterns = [path("demo/<uuid:image_code>/", views.demo, name="image_code"),
]
注意,之前配置的redis为默认的,这里需要重新添加一个
settings.py
CACHES = {# 配置默认的库"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/0","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},# 配置缓存uuid图片的库'verify_codes': {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},
}
此时,当你通过浏览器访问页面的时候,日志也就记录下来了:
INFO 2021-01-25 15:29:38,183 views 24 IMAGE_CODE 3VFN
四、类视图
后台试图,我们最好还是使用类视图来进行开发,并且上面的函数名也比较low,我们就使用类视图来修改一下:
verifications/views.py
from django.http import HttpResponse
from django.shortcuts import render
from django.views import Viewfrom utils.captcha.captcha import captcha
from django_redis import get_redis_connection
import logging
# Create your views here.logger = logging.getLogger("django")# 图形验证
class ImageCode(View):def get(self, request, image_code):text, image = captcha.generate_captcha()# 将产生的uuid放入redis## 1.连接数据库con_redis = get_redis_connection("verify_codes")## 2.配置keyredis_key = "img_{}".format(image_code)## 3.设置过期时间con_redis.setex(redis_key, 300, text)logger.info("IMAGE_CODE {}".format(text))return HttpResponse(content=image, content_type="image/jpg")
urls.py
path("image_code/<uuid:image_code>/", views.ImageCode.as_view(), name="image_code"),
Django博客搭建_用户注册1_图片生成相关推荐
- Django博客搭建_找回密码
Blog项目--找回密码 文章目录 Blog项目--找回密码 一. 分析 二.步骤 三.代码 1. 前端 2. 后端--form 3. 后端--view 4. url 一. 分析 业务处理流程: 判断 ...
- Django博客搭建_其他模块-文档下载
Blog项目--其他模块 文章目录 Blog项目--其他模块 一.分析 二.模型实现 三.路由注册 四.后端代码实现 视图部分 路由部分 五.前端代码实现 html部分 css部分 一.分析 业务处理 ...
- Django博客搭建-新闻模块6-新闻搜索功能(Django+Haystack+elasticsearch)
Blog项目--新闻模块 文章目录 Blog项目--新闻模块 一.需求分析 二.搜索引擎原理 三.Elasticsearch 特点 四.使用docker安装elasticsearch 五.后端代码实现 ...
- 用python搭建个人博客过程_手把手搭建个人博客(图文教程)
搭建个人博客 浏览体验更棒请移步原文:手把手搭建个人博客 首先我们谈一谈搭建个人博客必要性,个人认为在学习过程中,被动接受知识对你的提高是轻微的.比如你看网课学习,在听老师讲解的时候感觉简单易懂,代码 ...
- Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件
Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...
- Django个人博客搭建8-优化文章模块
Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...
- django orm级联_第 03 篇:创建 Django 博客的数据库模型
HelloGitHub-Team 成员--追梦人物 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库.我们把 ...
- python个人博客网站的搭建说明书_个人博客搭建线上实施方案
个人博客搭建线上实施方案 在hexo本地实施没有问题的基础上 实施方案 方案一:GithubPages 创建仓库, 仓库名为:.github.io 将本地Hexo博客推送到GithubPages 3. ...
- 【个人博客】Hexo个人博客搭建与配置详细教程 + Fluid主题 + Gitee发布
文章目录 一.环境准备 1.1 安装 NodeJs 1.2 安装 Git 1.3 安装 Hexo 二.Gitee仓库搭建 2.1 Gitee账号注册 2.2 仓库搭建 三.Hexo博客搭建 3.1 基 ...
最新文章
- php中final关键字
- 短 URL 服务,怎么设计与实现?
- python游戏编程快速上手第四版dragon_《Python游戏编程快速上手》——导读
- mysql重置auto_increment字段
- 人人都是 DBA(X)资源信息收集脚本汇编
- Android7.0 Doze模式分析(一)Doze介绍 amp; DeviceIdleController
- python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...
- 关于mono的编译与安装
- Android-HandlerThread详解
- Srs之HttpApi内部调用流程
- iOS逆向之利用Xcode重签名
- 专接本C语言必背程序
- AI笔刷 600+专业ai矢量笔刷套装(含安装教程)
- 基于java的企业信息网站发系统
- ajax下载Excel文件
- 打印机模拟(灰度篇)
- 计算机室对计算机网络系统,计算机网络与实验室管理系统建设
- 如何实现音视频云服务弱网高可用性-数据篇
- Apache Axis2项目的联合创始人总结30条架构原则
- 印度软件业为什么?把脉中国软件企业
热门文章
- 可自建中继服务器的远程桌面软件: RustDesk
- mysql下镜像安装教程_mysql的下载和安装详细教程(windows)
- 22套精致的用户界面 PSD 源文件素材
- 中兴通讯2015笔试应用题
- 第九篇,const指针,strlen,strcpy和strcmp函数的详细讲
- Pygame从0实战9(泡泡小游戏碰撞检测)
- java火焰评测_JAVA性能分析之使用火焰图
- pureftpd mysql 语句_FTP服务器之pure-ftpd常用指令详解
- xampp v3.2.2 php版本,xampp 3.2.2下载
- 体系 英文缩写是(D)