项目地址:https://github.com/zaxlct/imooc-django
用户登陆与注册
login 中使用了Q方法区并集
|
|
重写authenticate()认证并添加配置,
|
|
|
|
表单验证,创建form
|
|
模板验证登陆状态
|
|
注册功能传回form,可以提取每一个字段的value
注册验证码组件利用error控制样式
|
|
也可以自定义error
|
|
django里面也有自带的发送邮件api
发送前需要作一些配置
|
|
然后再调用
|
|
发送邮件之后,需要保存链接的代码,然后通过路由(注意参数隐藏在正则表达式中)
|
|
改密码的逻辑是一样的,要注意密码是加密过的所以改的时候需要调用特定的函数
|
|
要注意修改页面只能通过发送的链接进入,然后再专门有一个视图处理POST修改请求
总结
这部分功能主要涉及的是表单操作,注意VIEW是核心枢纽,每次渲染页面的时候提供新的错位信息以及表单绑定数据。
授课机构
模板继承与组件化
页头页尾写在base中,再在其他地方使用extend继承
使用block实现重要部分内容的修改
上传文件保存目录的配置
|
|
在model处地方
|
|
分页采用了pure pagination插件
在view中获取分页插件传递过来的page变量,并作每页显示多少的配置
|
|
模板代码
|
|
从模板中可以看出,我们只要对前一页,中间页,后一页进行样式配置即可。
单页面切换
Vue中是利用组件实现,在django中通过传递参数给view,能够在同一页面获得不同的数据源,同时需要一个变量(city_id)标识现在所出的状态并以此控制样式(if-equal)。
|
|
切换还有一种方法是利用url字段,例如在主页面中
|
|
它将url覅之进行切割判断,这里用了slice过滤器,取前几位
另外要注意参数传递的是字符串类型。所以利用了过滤器stringformat转换为字符串(i)
for循环填充数据的时候可以利用forlooper.counter获取index
同理,如果将数据进行排序,只要将sort传入view即可
|
|
异步表单的处理
为了简化代码量,可以利用model定义form
|
|
这里面定义了一个以clean开头的函数进行数据清洗,验证数据是否合法
注意所有表单的后面要加上 csrf-token
后端的view需要返回一个json字符串
|
|
由于django进行ajax请求的时候没有返回模板数据,所以要利用到jquery的dom操作
详情页面
注意跳转链接的写法
|
|
命名空间+名字+参数
通过id获取后台数据渲染前台页面,这个详情页面的本质是一个单页面应用,但是数据源没有同一性,所以我们要分别写四个页面,并通过标识参数取告诉前端应该显示怎样的样式。
详情页面收藏功能同样用到了jquery的ajax,但是这个不是一个表单,所以我们需要在jquery中增加一个配置
|
|
课程页面
模型层需要注意的是运用了反向取数据
|
|
这样只要在模板渲染的时候调用就好了
添加评论
这里运用ajax增加获取的变量,然后刷新页面
|
|
用户登陆验证
自定义一个验证登陆的类
|
|
所有需要的只要继承这个类即可
个人中心
通过request.user取属性
头像图片上传
首先定义form
|
|
这样,在视图中就可以直接save
|
|
资料修改
注意修改的时候save会默认增加一个实例,所以我们要对instance进行赋值操作
用户退出
|
|
其他处理
debug=true的时候需要配置一下static和media
|
|
以及
|
|
总结
django的核心思想是view中处理模型交互以及渲染页面,是中枢,前端每次通过get view获得页面的数据源,每次get可以携带不同的参数这样就能获得不同的数据源来填充页面。如果是ajax请求来更新模型,请求后要么通过dom操作改变页面,要么重载页面,这也是django一个缺陷,必须要重新刷新更新数据源,这时的模板语法就没用武之地。在cookie处理方面,django利用了request对象,只要通过login方法登陆成功了,就可request.user取得想要的数据。