第一步: 需求分析
需求:
做一个简单的电影网站,可以展示电影信息以及方便地下载
功能:
- 根据电影类型分类
- 根据电影所属地区分类
- 根据电影所属年代分类
- 根据上述条件进行组合查询
- 展示电影的图片,以及详细信息
- 展示电影的下载链接以及链接详情
- 可以以电影名字/演员名字作为关键字进行搜索
- 对电影展示结果进行分页
- 对网站进行数据添加 ( spider )
第二步: 设计数据模型
对下列项进行建模:
- 电影
- 演员
- 国家
- 类型
- 年代
电影为核心模型,国家和上映年份为其外键,类型和演员与其为多对多关系。
第三步 后台注册
略
第四步 编写前端页面
前端要点:
- 页面的固定与浮动 ( float/fixed )
- 块元素的并列显示 ( inline/inlineblock )
- 块元素的独立与继承 ( postion )
- 元素的优先级 ( z-index )
- 元素位置 ( padding border margin )
- 注意django静态文件的引用关系 相对引用与绝对引用
第五步 编写urls分发
- 单app应用,不必使用继承,注意传电影id给对应的电影
- 可以取名字方便前端查找
第六步 编写视图函数
1、首页展示
index 函数直接查询所有电影结果并返回即可
2、根据类型查找
解决思路:
从前端传一个当前点击的类型对象的值到后端,方法是利用GET请求时参数附加在url尾部的做法,然后根据传过来的参数,查找到所有此类型的电影返回前端。
3、根据国家地区查找
方法同上,查询其他的时候,可以用exclude + Q 查询
4、 根据年份查找
对年份进行分组新建列表,对具体的年份根据不同列表进行查询,对“其他”通过django_orm双下划线进行查询
5、 组合查询
思路:还是利用url带参数的特性进行参数组合,需要注意的是后端取到参数后,返回时应该返回同样名字的参数。
6、 展示电影详细信息
此步无难点,注意使用django自带的过滤器slice切片
7、展示电影下载链接 (难点)
此步个人认为最难
难点1:
链接的数量不定,可能只有1个,也可能有7,8个,因此不可能在模型里为数量不定的每个链接建一个field,而且那样也太臃肿丑陋。
解决方法: 对于链接和链接名字,不论数量,只建一个field储存,用逗号隔开,要使用时取出split。
难点2
要同时对链接信息和链接地址进行for循环,而模板语言中没有类似python zip之类的工具
解决方法:将链接名字和链接做成字典,将该字典传到前端,用 for key,value in dic.items
完美解决问题!
8、搜索功能 (有难点)
查询不难,利用Q查询分别查询电影名和演员,再取或即可
难点
既可以点击图标进行查询,也可以用回车进行查询
解决思路:
回车查询可以直接用form表单提交的方式post提交
点击按钮查询可以使用jquery发ajax请求,也可以使用location.replace(url)直接跳转
9、对展示结果进行分页
使用pagehelper进行分页,需要注意的是要进行一定改造,添加3个参数并改造url,利用字符串格式化添加参数,硬编码会出错。
10、爬虫
见下 scrapy篇