配置好mysql数据库的链接html
第二步就是需求分析和app的设计:前端
大体上分为 四个app(也就是四个模块,Django是按app来开发的)python
而后新建完app并调整好结构,静态文件的文件夹static,html页面的文件夹templates,媒体文件文件夹media等mysql
由于系统自带的User表字段没有须要的字段因此本身新建覆盖了一张用户表来存储用户信息git
django提供一种方式让咱们能够重载它的类github
继承AbstractUserajax
在模型文件里设计好以后,须要在全局文件里设置redis
运行makemigrations和migrate 生成迁移文件和表 sql
还有coures相关的表:课程表、章节、视频、课程资源 四个表数据库
organizations:城市表、课程机构表、讲师表
operations:用户咨询表、课程评论表、用户收藏表、用户信息表、用户课程表
代码太多就不详细贴上去了
在设计过程种使用了分层设计 避免循环导入不一样app中的model
配置好相关的path 路径
而后用xadmin来搭建后台管理系统:在github上搜索xadmin下载
而后配置好urls.py的路径
使用xadmin 能够本身识别用户本身定义的表
而后在以前新建好的每一个app里 新建adminx.py文件 配置后台 例如:course app
这里包括了列表、过滤 、搜索、编辑框的功能 list_display 为列表 search-fields 搜索列 list_filter 过滤 list_editable 编辑框
在作登陆以前须要配置好首页和登陆页面
而后编写逻辑函数 在views.py文件
使用的是CBV的逻辑来开发
CBV-class base view(优势:
class是能够继承的 为了后期便于维护有利于代码重用
)
由于是登陆因此和用户相关是在users这个app里的views里编写
这里的代码逻辑 所有备注好了: 登录页面有两种请求 一种是提交的post 一种是get
而后下面就是逻辑判断 ,判断用户是否存在 存在就登录,用django 内部的login方法
不然就返回错误信息,并返回表单验证的错误信息
这是前端页面的判断逻辑,
这里的判断逻辑是:若是在表单验证中发现用户名或者密码错误:将前端样式的输入框变成红色
登录开发完了以后:就是开发退出登录的借口
编写的View函数都是继承django 自己自带的view
编写一个LogoutView(View)
而后再urls.py中修改一下配置
而后就是在html页面配置退出的url
这里的url 都是这样的书写格式 和前面的path 的name属性 一直 它会自动识别出路径 并且方便后期维护,只须要改动path的url路径名
首先为了可以发送手机验证码,须要找有发送手机短信资质的运营商 ,这里使用的是云片网 (具体如何注册使用就不说明了)
在云片网:www.yunpian.com
此时准备完以后就须要在pycharm中编写代码了:
在apps文件夹下新建一个目录为utils 专门存放这种工具类文件
查看API文档有步骤说明
咱们短信验证只须要用到单条短信发送 进入相关的文档说明里
这是相关的参数,只需选择3个必传参数便可 其余参数看需求
apikey 在控制台里
apikey 最好在项目的全局设置里配置好 方便后期更改
短信发送须要用到request
这里的if __name__== "__main__"
用来测试的
这里的url 为文档说明中的url, text 为云片网审核经过的模板样式
有了url 和text 以后就是发送数据了:
经过request的post方法 一个参数为url 一个参数为data data为dict形式
dict里面的值为文档里面要传的参数
这样就算完成了,可是还须要用ajax的方式来完成短信验证码的发送用到了js的知识
这里return不用rander 而是用JsonResponse 由于这里是用ajax 异步发送短信此时,上面提到的403错误不能再用
由于本来用form表单提交的方式只须要在form标签 里加入{% csrf_token %}便可 浏览器会帮咱们直接表单里的全部值
可是咱们使用ajax异步的方式来进行方式 这样浏览器就不会帮咱们提交上去
全部使用{% csrf_token %} 并无用
此时就用到csrf_exempt() 让服务器不验证csrf
此时思考一下 若是在js文件里面 添加csrf_token 获取这个值是否能够???可是在html页面点击查看源码能够看出值并无赋值进来 因此这个方法行不通
这里还牵涉到了redis来记录发送的数据
经过云片网发送验证码以后 这个验证码咱们得保存起来 进行验证
因此保存数据:第一种 就是保存在数据库 另外一种就是保存在内存中
用存在内存的方式 有两个问题:
1. 重启django以后,变量不存在了
2.随着验证码愈来愈多,,内存占用愈来愈大,验证码过时处理
用数据库能够实现 可是有特殊状况 发送完验证码以后用户并无进行后续操做 这样数据就会愈来愈多
此时用 redis k-v数据库
(redis要运行起来 redis-server.exe redis-cli.exe)
import redis
把redis的对象取出来赋给r,而后r.set 模式来持久化
同时验证码还须要一个验证逻辑,咱们使用表单来验证 这个验证码和发送的验证码是否一致
把redis对象取出来以后查询它的code值 和 表单提交的code 进行比较 若是不相等抛出异常
这里的抛出异常咱们用 raise
若是正确就返回这个code
:
还须要动态验证码:
在github上搜索 django-captcha-simple 里面有安装和配置步骤
而后文档会告诉如何使用,按照步骤咱们建立一个表单
有了这个表单以后在views.py里面咱们把表单里的传递过去 ,并显示到前段页面
这里的两个只会显示其中一个不会冲突
这样动态验证码就实现了
接下来就是配置前段的html的url 和逻辑判断
全部的配置完了以后不要忘记配置urls.py文件的路径
动态登录的逻辑完了以后须要实现动态注册的功能:
注册页面也有两个请求 1个是get 1个post ,get 请求须要获取到注册页面的动态验证码
post 请求是要把前段提交的数据存储,可是有两个判断逻辑,第一个是用户没有注册,这个比较简单把用户提交的数据存储到数据库里面, 第二个逻辑是用户已经注册过了,此时须要用到表单验证,专门验证mobile这个字段时候存在
而后注意前段页面的配置:
form表单的方法要是post方法 action属性值为{% url 'register'%}这种形式
input标签的name属性的值要和view函数里一一对应 而且注意403错误 在表单里加入 {%csrf_token%}
而后就是错误信息判断完的显示,和以前在作登录的时候同样