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 升级

应为要考虑到,网站不是就自己用的,而是许多人可能会同时访问,则此时就需要一个唯一编码去绑定这个图片,我们这里就需要一个UUIDUUID 是 通用唯一识别码(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_图片生成相关推荐

  1. Django博客搭建_找回密码

    Blog项目--找回密码 文章目录 Blog项目--找回密码 一. 分析 二.步骤 三.代码 1. 前端 2. 后端--form 3. 后端--view 4. url 一. 分析 业务处理流程: 判断 ...

  2. Django博客搭建_其他模块-文档下载

    Blog项目--其他模块 文章目录 Blog项目--其他模块 一.分析 二.模型实现 三.路由注册 四.后端代码实现 视图部分 路由部分 五.前端代码实现 html部分 css部分 一.分析 业务处理 ...

  3. Django博客搭建-新闻模块6-新闻搜索功能(Django+Haystack+elasticsearch)

    Blog项目--新闻模块 文章目录 Blog项目--新闻模块 一.需求分析 二.搜索引擎原理 三.Elasticsearch 特点 四.使用docker安装elasticsearch 五.后端代码实现 ...

  4. 用python搭建个人博客过程_手把手搭建个人博客(图文教程)

    搭建个人博客 浏览体验更棒请移步原文:手把手搭建个人博客 首先我们谈一谈搭建个人博客必要性,个人认为在学习过程中,被动接受知识对你的提高是轻微的.比如你看网课学习,在听老师讲解的时候感觉简单易懂,代码 ...

  5. Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件

    Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...

  6. Django个人博客搭建8-优化文章模块

    Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...

  7. django orm级联_第 03 篇:创建 Django 博客的数据库模型

    HelloGitHub-Team 成员--追梦人物 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库.我们把 ...

  8. python个人博客网站的搭建说明书_个人博客搭建线上实施方案

    个人博客搭建线上实施方案 在hexo本地实施没有问题的基础上 实施方案 方案一:GithubPages 创建仓库, 仓库名为:.github.io 将本地Hexo博客推送到GithubPages 3. ...

  9. 【个人博客】Hexo个人博客搭建与配置详细教程 + Fluid主题 + Gitee发布

    文章目录 一.环境准备 1.1 安装 NodeJs 1.2 安装 Git 1.3 安装 Hexo 二.Gitee仓库搭建 2.1 Gitee账号注册 2.2 仓库搭建 三.Hexo博客搭建 3.1 基 ...

最新文章

  1. php中final关键字
  2. 短 URL 服务,怎么设计与实现?
  3. python游戏编程快速上手第四版dragon_《Python游戏编程快速上手》——导读
  4. mysql重置auto_increment字段
  5. 人人都是 DBA(X)资源信息收集脚本汇编
  6. Android7.0 Doze模式分析(一)Doze介绍 amp; DeviceIdleController
  7. python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...
  8. 关于mono的编译与安装
  9. Android-HandlerThread详解
  10. Srs之HttpApi内部调用流程
  11. iOS逆向之利用Xcode重签名
  12. 专接本C语言必背程序
  13. AI笔刷 600+专业ai矢量笔刷套装(含安装教程)
  14. 基于java的企业信息网站发系统
  15. ajax下载Excel文件
  16. 打印机模拟(灰度篇)
  17. 计算机室对计算机网络系统,计算机网络与实验室管理系统建设
  18. 如何实现音视频云服务弱网高可用性-数据篇
  19. Apache Axis2项目的联合创始人总结30条架构原则
  20. 印度软件业为什么?把脉中国软件企业

热门文章

  1. 可自建中继服务器的远程桌面软件: RustDesk
  2. mysql下镜像安装教程_mysql的下载和安装详细教程(windows)
  3. 22套精致的用户界面 PSD 源文件素材
  4. 中兴通讯2015笔试应用题
  5. 第九篇,const指针,strlen,strcpy和strcmp函数的详细讲
  6. Pygame从0实战9(泡泡小游戏碰撞检测)
  7. java火焰评测_JAVA性能分析之使用火焰图
  8. pureftpd mysql 语句_FTP服务器之pure-ftpd常用指令详解
  9. xampp v3.2.2 php版本,xampp 3.2.2下载
  10. 体系 英文缩写是(D)