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

用户注册模块——基于Django框架的天天生鲜电商网站项目系列博客(三)

系列文章目录需求分析——基于Django框架的天天生鲜电商网站项目系列博客(一)网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客&#

系列文章目录


  1. 需求分析——基于Django框架的天天生鲜电商网站项目系列博客(一)
  2. 网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客(二)
  3. 用户注册模块——基于Django框架的天天生鲜电商网站项目系列博客(三)
  4. 用户登录模块——基于Django框架的天天生鲜电商网站项目系列博客(四)
  5. 用户中心模块——基于Django框架的天天生鲜电商网站项目系列博客(五)
  6. 分布式FastDFS文件系统——基于Django框架的天天生鲜电商网站项目系列博客(六)
  7. 首页——基于Django框架的天天生鲜电商网站项目系列博客(七)
  8. 详情页——基于Django框架的天天生鲜电商网站项目系列博客(八)
  9. 列表页——基于Django框架的天天生鲜电商网站项目系列博客(九)
  10. 商品搜索——基于Django框架的天天生鲜电商网站项目系列博客(十)
  11. 购物车记录添加——基于Django框架的天天生鲜电商网站项目系列博客(十一)
  12. 购物车记录更新——基于Django框架的天天生鲜电商网站项目系列博客(十二)
  13. 订单生成——基于Django框架的天天生鲜电商网站项目系列博客(十三)
  14. 订单并发处理——基于Django框架的天天生鲜电商网站项目系列博客(十四)
  15. 订单支付和评论——基于Django框架的天天生鲜电商网站项目系列博客(十五)
  16. 网站部署——基于Django框架的天天生鲜电商网站项目系列博客(十六)
  17. 项目总结——基于Django框架的天天生鲜电商网站项目系列博客(十七)



项目资源下载


  1. 天天生鲜电商网站项目源码Github地址(可Fork可Clone)
  2. 天天生鲜电商网站项目源码Gitee地址(可Fork可Clone)
  3. 天天生鲜电商网站项目源码压缩包下载(直接使用)
  4. 天天生鲜电商网站项目所需全部工具合集打包下载(nginx、libfastcommon、fastdfs-nginx、fastdfs)
  5. 天天生鲜电商网站项目MySql数据库文件(直接导入MySql数据库)
  6. Django1.8官方文档(中文版)



文章目录

  • 系列文章目录
  • 项目资源下载
  • 前言
  • 一、用户注册模块
    • 1.1 注册页面编辑
    • 1.2 视图类使用
    • 1.3 生成激活用户token
    • 1.4 Django内置函数发送激活邮件
    • 1.5 celery异步发送邮件
  • 二、常见问题解答
    • 2.1 定义user视图函数时报错
    • 2.2 配置url路由时报错
    • 2.3 发送邮件时出错
    • 2.4 配置发送链接时出错
  • 总结




前言

  首先先说几句话吧,没想到这个系列已经停更了这么久了,已经让我拖了一年了(Windows都已经出11了hh),其实我早就把内容在本地写好了,只需要在CSDN上面再重写一下且润色一下,但是考研这一年我都没碰一点关于技术方面的东西,代码都不会写了,全荒废了,正好趁准备复试这个时间段,时间没那么紧张,抓紧捡起来之前的知识,望诸君共努力!
  上一篇博客我们已经搭建了整个项目的框架,整个网站已经有一个雏形了,另外导入了我们所需要的数据,既然网站框架有了,数据也有了,那么接下来就该进入重头戏了,开始正式编写我们网站的后台逻辑,这里的代码我仅对重要的部分进行说明,另外对一些理论知识进行讲解还有编写代码或者调试程序的过程中遇到的错误我均已注明,完整代码请参考上面我分享的完整项目代码,已经免费无偿的分享给大家了,如果觉得还不错可以给一个Star。今天我们的主要任务是完成对用户注册模块逻辑的编写,因为电商网站肯定是需要用户的,而且用户要根据自己的喜好加入购物车或者直接购买等等,所以,电商网站的大部分逻辑都是基于用户的,也就意味着用户注册是这一切的开始。好了,废话不多说,开始进入今天的学习!




一、用户注册模块


1.1 注册页面编辑


  1. 导入到static中所有模板
    在这里插入图片描述
  2. 模板页面说明
    在这里插入图片描述
  3. 将首页模板和注册模板放入模板文件夹
    在这里插入图片描述
  4. 修改注册模板文件,显示样式
    ①:标头
    在这里插入图片描述
    ②:修改路径
    在这里插入图片描述
    ③:修改form表单,为了下一步指向注册成功之后的界面

在这里插入图片描述


  1. 在user中定义视图函数,显示注册页面(首先导入所需库)
    在这里插入图片描述
    在这里插入图片描述
  2. 配置url路由
    在这里插入图片描述
    在这里插入图片描述
  3. 在上一步成功显示注册界面后,接下来要做注册之后的步骤
    ①:首先在视图模块中定义进行处理的视图函数
    在这里插入图片描述
    ②:然后接收上一步的数据
    在这里插入图片描述
    ③:然后进行数据校验
    在这里插入图片描述
    ④:然后进行业务处理:进行用户注册(两种方法)
           第一种方法:
    在这里插入图片描述
           第二种方法:
    在这里插入图片描述
    ⑤:最后返回应答,跳转到首页,这里用到url反向解析
    在这里插入图片描述
  4. 定义完视图函数之后要进行url的配置
    在这里插入图片描述
    在这里插入图片描述
  5. 继续定义首页的视图函数,直接返回相应模板
    在这里插入图片描述
  6. 然后进行url路由配置
    在这里插入图片描述
  7. 运行成功
    在这里插入图片描述
  8. 设置初始没有激活
    在这里插入图片描述
  9. 测试数据校验
    ①:将errmsg数据添加到html中
    在这里插入图片描述
    ②:测试成功
    在这里插入图片描述
  10. 校验用户名是否存在
    在这里插入图片描述
  11. 效果如下
    在这里插入图片描述
  12. 显示注册页面和注册处理使用同一个url地址
    ①:首先修改html中form表单中action都指向register地址(原理:因为使用url或者域名直接访问数据GET请求,点击注册按钮是POST请求)
    在这里插入图片描述
    ②:修改完指向地址之后,要修改相应的url路由配置,指向同一个url地址
    在这里插入图片描述
    ③:修改视图函数,判断请求方式,合并函数,使用同一个url地址
    在这里插入图片描述

1.2 视图类使用


  1. 导入所需库
    在这里插入图片描述
  2. 定义视图类
    在这里插入图片描述
  3. 定义get请求函数,如果是get请求,显示注册页面
    在这里插入图片描述
  4. 定义post请求函数,如果是post请求,进行注册处理
    在这里插入图片描述
  5. 配置url路由
    ①:首先导入模块
    在这里插入图片描述
    ②:匹配
    在这里插入图片描述

1.3 生成激活用户token


  1. 在注册视图函数中的业务处理之前,需要发送激活邮件,用用户id代表,但是用户信息不能泄露,所以要把id加密,生成用户token,生成激活token如下
    在这里插入图片描述
  2. 这里这个secret_key用的是django的setting.py中内置的,用模块导入
    在这里插入图片描述
  3. 接下来就是发邮件,这个一会写
    在这里插入图片描述
  4. 然后返回给用户应答,跳转到首页,这里使用url反向解析
    在这里插入图片描述
  5. 因为发邮件之后我们要进行激活,现在还没写发邮件的内容,我们先来写激活内容,根据生成的token来激活,定义用户激活的视图函数
    在这里插入图片描述
  6. 然后导入所需要的库
    在这里插入图片描述
  7. 然后配置url路由(还要导入所需要的模块)
    在这里插入图片描述
    在这里插入图片描述
  8. 回到视图函数,因为这是get请求,所以用get
    在这里插入图片描述
  9. 然后进行解密,获取要激活的用户id
    在这里插入图片描述
  10. 这里抛一个异常,如果能获取到id并且没有过期,则用info来保存
    在这里插入图片描述
  11. 然后获取待激活用户的id
    在这里插入图片描述
  12. 根据id获取用户信息,并且修改用户的激活状态,并保存
    在这里插入图片描述
    12.用户激活成功之后我们要跳转到登陆页面,这里依然用到url反向解析
    在这里插入图片描述
  13. 既然跳转到登录界面,所以我们需要先找到登陆界面的模板
    在这里插入图片描述
  14. 然后定义登录模块的视图函数,直接显示登录页面
    在这里插入图片描述
  15. 然后配置url路由(还要导入相应模块)
    在这里插入图片描述
    在这里插入图片描述
  16. 如果链接已经过期,则抛出异常,提示激活链接已经过期
    在这里插入图片描述

1.4 Django内置函数发送激活邮件


  1. 发邮件过程
    在这里插入图片描述
  2. 配置163邮箱
    Django中内置了邮件发送功能,被定义在django.core.mail模块中,发送邮件需要使用SMTP服务器,常用免费服务器有:163、126、QQ,下面以163邮箱为例
    ①:首先注册
    在这里插入图片描述
    ②:然后设置
    在这里插入图片描述
    ③:在新页面中点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码
    在这里插入图片描述
    ④:填写授权码
    在这里插入图片描述
    ⑤:提示开启成功
    在这里插入图片描述
  3. 配置完邮箱之后,配置settings.py的邮箱配置(固定写法)
    在这里插入图片描述
  4. 开始写发邮件的代码
    ①:首先导入发邮件的库
    在这里插入图片描述
    ②:然后定义信息和链接等
    在这里插入图片描述
    ③:这里需要修改两个地方,也就是可能会遇到两个问题,具体见二、常见问题解答中的2.3 发送邮件时出错和2.4 配置发送链接时出错,如没有遇到问题,继续下面的步骤即可
  5. 问题解决之后发送邮件,展示如下
    在这里插入图片描述

1.5 celery异步发送邮件


  1. 图示celery
    在这里插入图片描述
  2. 安装celery(使用清华源下载快一些)

pip install celery

二、常见问题解答


2.1 定义user视图函数时报错


  1. 具体错误

引入xadmin后报错:No module named ‘django.core.urlresolvers’



  1. 错误原因
    简单来说,原因就是:django2.0把原来的django.core.urlresolvers包更改为了django.urls包,所以我们需要把导入的包都修改一下就可以了
  2. 解决办法
    在这里插入图片描述

2.2 配置url路由时报错


  1. 具体错误

提交表单报错:RuntimeError:You called this URL via POST,but the URL doesn’t end in a slash and you have APPEND_SLASH set.



  1. 错误原因
    提示form的action地址最后不是/结尾,而是APPEND_SLASH的值是Ture
  2. 解决方法
    将form的action地址改为/结尾的就可以了或者修改settings:APPEND_SLASH=False
    在这里插入图片描述

2.3 发送邮件时出错


  1. 具体错误

天天生鲜 smtplib.SMTPDataError:(554,b’DT:SPM 163 smtp13



  1. 错误原因
    554是邮件被网易默认为垃圾邮件,肯定是你发的邮件中有广告性信息,如:诚邀、免费注册之类的敏感词。当敏感词的比重达到一定数值时,就会被识别为垃圾邮件拒发
  2. 解决方法
    在收件人列表里面加上自己的邮箱
    在这里插入图片描述

2.4 配置发送链接时出错


  1. 具体错误

发送的链接里面有b.



  1. 错误原因
    没有解码
  2. 解决方法
    申请token之后对token解码
    在这里插入图片描述



总结

  时间跨度一年多,终于把第三篇写完了哈哈,后面还剩十多篇,没什么事情估计就一天一篇了,我会尽量写的很详细,如果遇到什么问题可以及时和我联系,这篇文章应该算是比较重要的一篇而且也比较难,这也是为后面做铺垫,毕竟用户体验才是最重要的嘛!


推荐阅读
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
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社区 版权所有