系列文章目录
- 需求分析——基于Django框架的天天生鲜电商网站项目系列博客(一)
- 网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客(二)
- 用户注册模块——基于Django框架的天天生鲜电商网站项目系列博客(三)
- 用户登录模块——基于Django框架的天天生鲜电商网站项目系列博客(四)
- 用户中心模块——基于Django框架的天天生鲜电商网站项目系列博客(五)
- 分布式FastDFS文件系统——基于Django框架的天天生鲜电商网站项目系列博客(六)
- 首页——基于Django框架的天天生鲜电商网站项目系列博客(七)
- 详情页——基于Django框架的天天生鲜电商网站项目系列博客(八)
- 列表页——基于Django框架的天天生鲜电商网站项目系列博客(九)
- 商品搜索——基于Django框架的天天生鲜电商网站项目系列博客(十)
- 购物车记录添加——基于Django框架的天天生鲜电商网站项目系列博客(十一)
- 购物车记录更新——基于Django框架的天天生鲜电商网站项目系列博客(十二)
- 订单生成——基于Django框架的天天生鲜电商网站项目系列博客(十三)
- 订单并发处理——基于Django框架的天天生鲜电商网站项目系列博客(十四)
- 订单支付和评论——基于Django框架的天天生鲜电商网站项目系列博客(十五)
- 网站部署——基于Django框架的天天生鲜电商网站项目系列博客(十六)
- 项目总结——基于Django框架的天天生鲜电商网站项目系列博客(十七)
项目资源下载
- 天天生鲜电商网站项目源码Github地址(可Fork可Clone)
- 天天生鲜电商网站项目源码Gitee地址(可Fork可Clone)
- 天天生鲜电商网站项目源码压缩包下载(直接使用)
- 天天生鲜电商网站项目所需全部工具合集打包下载(nginx、libfastcommon、fastdfs-nginx、fastdfs)
- 天天生鲜电商网站项目MySql数据库文件(直接导入MySql数据库)
- Django1.8官方文档(中文版)
文章目录
前言
首先先说几句话吧,没想到这个系列已经停更了这么久了,已经让我拖了一年了(Windows都已经出11了hh),其实我早就把内容在本地写好了,只需要在CSDN上面再重写一下且润色一下,但是考研这一年我都没碰一点关于技术方面的东西,代码都不会写了,全荒废了,正好趁准备复试这个时间段,时间没那么紧张,抓紧捡起来之前的知识,望诸君共努力!
上一篇博客我们已经搭建了整个项目的框架,整个网站已经有一个雏形了,另外导入了我们所需要的数据,既然网站框架有了,数据也有了,那么接下来就该进入重头戏了,开始正式编写我们网站的后台逻辑,这里的代码我仅对重要的部分进行说明,另外对一些理论知识进行讲解还有编写代码或者调试程序的过程中遇到的错误我均已注明,完整代码请参考上面我分享的完整项目代码,已经免费无偿的分享给大家了,如果觉得还不错可以给一个Star。今天我们的主要任务是完成对用户注册模块逻辑的编写,因为电商网站肯定是需要用户的,而且用户要根据自己的喜好加入购物车或者直接购买等等,所以,电商网站的大部分逻辑都是基于用户的,也就意味着用户注册是这一切的开始。好了,废话不多说,开始进入今天的学习!
一、用户注册模块
1.1 注册页面编辑
- 导入到static中所有模板
- 模板页面说明
- 将首页模板和注册模板放入模板文件夹
- 修改注册模板文件,显示样式
①:标头
②:修改路径
③:修改form表单,为了下一步指向注册成功之后的界面
- 在user中定义视图函数,显示注册页面(首先导入所需库)
- 配置url路由
- 在上一步成功显示注册界面后,接下来要做注册之后的步骤
①:首先在视图模块中定义进行处理的视图函数
②:然后接收上一步的数据
③:然后进行数据校验
④:然后进行业务处理:进行用户注册(两种方法)
第一种方法:
第二种方法:
⑤:最后返回应答,跳转到首页,这里用到url反向解析
- 定义完视图函数之后要进行url的配置
- 继续定义首页的视图函数,直接返回相应模板
- 然后进行url路由配置
- 运行成功
- 设置初始没有激活
- 测试数据校验
①:将errmsg数据添加到html中
②:测试成功
- 校验用户名是否存在
- 效果如下
- 显示注册页面和注册处理使用同一个url地址
①:首先修改html中form表单中action都指向register地址(原理:因为使用url或者域名直接访问数据GET请求,点击注册按钮是POST请求)
②:修改完指向地址之后,要修改相应的url路由配置,指向同一个url地址
③:修改视图函数,判断请求方式,合并函数,使用同一个url地址
1.2 视图类使用
- 导入所需库
- 定义视图类
- 定义get请求函数,如果是get请求,显示注册页面
- 定义post请求函数,如果是post请求,进行注册处理
- 配置url路由
①:首先导入模块
②:匹配
1.3 生成激活用户token
- 在注册视图函数中的业务处理之前,需要发送激活邮件,用用户id代表,但是用户信息不能泄露,所以要把id加密,生成用户token,生成激活token如下
- 这里这个secret_key用的是django的setting.py中内置的,用模块导入
- 接下来就是发邮件,这个一会写
- 然后返回给用户应答,跳转到首页,这里使用url反向解析
- 因为发邮件之后我们要进行激活,现在还没写发邮件的内容,我们先来写激活内容,根据生成的token来激活,定义用户激活的视图函数
- 然后导入所需要的库
- 然后配置url路由(还要导入所需要的模块)
- 回到视图函数,因为这是get请求,所以用get
- 然后进行解密,获取要激活的用户id
- 这里抛一个异常,如果能获取到id并且没有过期,则用info来保存
- 然后获取待激活用户的id
- 根据id获取用户信息,并且修改用户的激活状态,并保存
12.用户激活成功之后我们要跳转到登陆页面,这里依然用到url反向解析
- 既然跳转到登录界面,所以我们需要先找到登陆界面的模板
- 然后定义登录模块的视图函数,直接显示登录页面
- 然后配置url路由(还要导入相应模块)
- 如果链接已经过期,则抛出异常,提示激活链接已经过期
1.4 Django内置函数发送激活邮件
- 发邮件过程
- 配置163邮箱
Django中内置了邮件发送功能,被定义在django.core.mail模块中,发送邮件需要使用SMTP服务器,常用免费服务器有:163、126、QQ,下面以163邮箱为例
①:首先注册
②:然后设置
③:在新页面中点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码
④:填写授权码
⑤:提示开启成功
- 配置完邮箱之后,配置settings.py的邮箱配置(固定写法)
- 开始写发邮件的代码
①:首先导入发邮件的库
②:然后定义信息和链接等
③:这里需要修改两个地方,也就是可能会遇到两个问题,具体见二、常见问题解答中的2.3 发送邮件时出错和2.4 配置发送链接时出错,如没有遇到问题,继续下面的步骤即可 - 问题解决之后发送邮件,展示如下
1.5 celery异步发送邮件
- 图示celery
- 安装celery(使用清华源下载快一些)
pip install celery
二、常见问题解答
2.1 定义user视图函数时报错
- 具体错误
引入xadmin后报错:No module named ‘django.core.urlresolvers’
- 错误原因
简单来说,原因就是:django2.0把原来的django.core.urlresolvers包更改为了django.urls包,所以我们需要把导入的包都修改一下就可以了 - 解决办法
2.2 配置url路由时报错
- 具体错误
提交表单报错:RuntimeError:You called this URL via POST,but the URL doesn’t end in a slash and you have APPEND_SLASH set.
- 错误原因
提示form的action地址最后不是/结尾,而是APPEND_SLASH的值是Ture - 解决方法
将form的action地址改为/结尾的就可以了或者修改settings:APPEND_SLASH=False
2.3 发送邮件时出错
- 具体错误
天天生鲜 smtplib.SMTPDataError:(554,b’DT:SPM 163 smtp13
- 错误原因
554是邮件被网易默认为垃圾邮件,肯定是你发的邮件中有广告性信息,如:诚邀、免费注册之类的敏感词。当敏感词的比重达到一定数值时,就会被识别为垃圾邮件拒发 - 解决方法
在收件人列表里面加上自己的邮箱
2.4 配置发送链接时出错
- 具体错误
发送的链接里面有b.
- 错误原因
没有解码 - 解决方法
申请token之后对token解码
总结
时间跨度一年多,终于把第三篇写完了哈哈,后面还剩十多篇,没什么事情估计就一天一篇了,我会尽量写的很详细,如果遇到什么问题可以及时和我联系,这篇文章应该算是比较重要的一篇而且也比较难,这也是为后面做铺垫,毕竟用户体验才是最重要的嘛!