mxonline实战9,我要学习功能块,机构详情展示,收藏功能

 

对应github地址:第9天

 

 
一. 实现我要学习功能
 
里面的三个字段对应operation/models/UserAsk中的变量
 
1. 首先对表单进行后台验证,新建orgazaiton/form文件,然后在里面定义之前的表单验证类。
因为我们已经定义了UserAsk类,发现定义的表单验证类和UserAsk类很相似,那么能不能把这个models里的类转变为表单验证类呢?那么我们需要用到ModelForm
 
 
2. 改写URL结构
首先改写org-list.html的访问URL,在mxonline/urls.py中将原先的URL改写为
 
新建organization/urls.py
然后访问http://127.0.0.1:8000/org/list,即可打开原先http://127.0.0.1:8000/org_list的访问内容
 
 
3. 使用modelform做表单提交
这里使用ajax异步操作,不对整个页面进行刷新,因此我们不能直接render一个页面回来,而是给前端返回json数据,而不是页面。那么就需要使用到HttpResponse类来指明给用户返回哪种类型数据
from django.http import HttpResponse
 
3.1 编写视图类organization/views.py->AddUserAskView
注意HttpResonse里面的单双引号的问题,一样要那样写,否则会出错,原因不明
 
3.2 organization/urls.py 中新增URL
 
3.3 url-list.html中关于我要学校的表单代码中的<form>标签中增加{% csrf_token %}
 
3.4 相关ajax请求在base.html中,看不太懂,注意里面的url, msg都和之前的设置相关联
监听这个button,如果用户点击了button,我们就向这个url进行post请求,然后把表单进行序列化
 
3.5 手机号码验证是否合法,在organization/forms.py中添加 clean_mobile函数(必须以clean开头)
 
 
 
 
 
二. 机构详情展示
 
1. 准备工作
在后台中新增几个教师和课程的数据,发现之前课程里没有到机构的外键,所有在courses/models.py-->class Course中新建一个外键
 
把org-detail-course.html, org-detail-desc.html, org-detail-homepage.html,  org-detail-teachers.html 这四个页面放到templates目录下
 
2. 编写基础模板
我们发现这4个页面很相似,所以要再写一个基础页面org_base.html让他们来重载,把org-detail-homepage.html内容复制过来
 
2.1 把title名字用block包起来,在css, js后面新增block,用来处理在不同的页面可能定制不同的样式
 
2.2 分析页面可发现,页面左边是固定的,页面右边不同,对应的在代码中有<div class="left">,<div class="right">,因此我们需要用block包住<div class="right">
 
面包屑那里也要加block
 
2.3 替换js, css路径
重载static变量
使用模板标签修改路径如下
 
 
3. org-detail-homepage.html继承基础页面
删掉原先内容,把org_base.html的<div class="right">的3个div剪切过来
 
 
4. 为机构首页添加URL,view
organization/urls.py中增加
需要传一个课程机构的ID,来指定是哪个机构的首页
 
定义view,organization/views.py中新增
courses/models.py/class Course中有一个机构的外键,那么机构为主,所以可在机构的view中使用一个对象+课程类小写course+下划线+set的方法反向取到课程
 
5. 填充org-detail-homepage.html页面
原先有三个课程的<div>标签,把其中一个<div>放到for循环模板中,删掉其他
 
 
6. 在org-list.html页面修改机构<dl>标签中的机构的跳转链接<a href="org-detail-homepage.html">
修改为
其中course_org.id 为课程机构的ID号,数据库中自动生成的id号, 传递到跳转链接里,然后在organization/urls.py中的<int:org_id>就能取到这个id
all_orgs.object_list中的object_list为分页时的固定写法
 
 
7. 修改org_base.html中图片地址
在子页面中使用的变量标签,其实也是可以在基本页面中直接使用
 
上面这段代码影响的是机构详情页里面的头部信息,如下
 
 
 
8. 机构教师信息填充
 
1). organization/models/class Teacher中新增一个讲师头像字段,并在后台添加头像
 
2). org-detail-homepage.html中找到表示讲师的代码并修改昵称和图片
 
 
 
 
三. 机构课程列表页(org-detail-course.html)
 
1. 把org-detail-homepage.html中的内容拷贝过来,只须替换<div class="right">和标题就好
 
2. 编写url和view
organization/views.py中添加
 
organization/urls.py中添加
 
3. 修改org-base.html的left部分代码,使点击左侧的机构课程可成功跳转到org-detail-course.html页面
 
4. 在org-detail-course.html中把信息补充完整
 
5. 增加机构课程选中状态
在organization/views.py-->class OrgHomeView中增加一个变量current_page = "home", 
orgCourseView中增加变量current_page = "course"
并且分别加到render函数中传递到org-detail-homepage.html页面
 
然后就可以在org_base.html页面中的<div class="left">中增加判断条件
 
 
 
 
四. 课程介绍页面
1. 同样的把<div class="right">替换一下
 
2. 配置URL,view
organization/views.py中增加
 
organization/urls.py中增加
 
3. 增加点击机构介绍跳转链接
在org_base.html中的<div class="left">中修改
 
 
五. 机构讲师
1. 修改页面
 
2. 配置view, URL
 
urls.py中
 
3. 增加跳转链接,在org_base.html页面中修改为如下
 
4. 显示讲师头像等信息,修改org-detail-teachers.html页面如下
 
5. 面包屑导航
在org_base.html中修改面包屑代码
 
然后在所有子页面中分别加入,改为相应的名字
{% block page_title %}机构课程{% endblock %}
 
 
 
 
六.课程机构收藏功能,也是ajax提交
 
1. 写view, URL
organization/views.py中增加
 
organization/urls.py中增加
 
 
2. 机构收藏功能的ajax代码放在org-base.html中
修改117行代码成如下图
修改135行为下图
修改window.location.href的地址
 
 
3. 如果机构已收藏,我们刷新后,又会显示收藏字样,不会显示已收藏,怎么办呢
 
3.1 organization/views.py-->class OrgHomeView中增加如下代码
并且在return render中加上
"has_fav": has_fav
 
3.2 org_base.html中大概51行的固定字段"收藏"修改为如下
 
分别在OrgCourseView, OrgDescView, OrgTeacherView添加上面相同代码
 
 
4. 机构页面显示登陆状态
把index.html中的<head>标签中if模板标签拷贝到org_base.html中替换一下
 
posted @ 2018-08-24 17:34  坚强的小蚂蚁  阅读(344)  评论(0编辑  收藏  举报