文章目录
Django现状
Django开发前景
Django的厉害之处
- 在Python中,与web开发环境相关的包有13045个
- django就占了9091个,大约70%
- 在Python中,活跃的web框架多达54个,其中最活跃的有django,flask,pyramid,zope
- 最受欢迎的就是django,没有之一
- 超过5263个中大型网站使用django开发
哪些公司在使用django
- 国内:豆瓣、知乎
- 国外:Instagram、Mozilla、Pinterest、Disqus、National Geographic、NASA
版本
- 1.11(217年4月发布,支持python2.7,在2020全面推行Python3之后,将不再提供服务)
- 2.0-2.1(2.0版本,2017年12月发布,只支持Python3,将长期支持,向下兼容)
- 2.0主要在以下方面作了改进
- 简化url路由语法
- 更友好的admin站点
- auth支持更高强度的加密算法(PBKDF2)(PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的)
- runserver支持HTTP1.1
- 19.4.1发布了2.2的版本
开发流程
- 本项目我们会尽量模拟真实web开发场景来讲解项目,在大家工作之后能立刻融入到开发团队中
- 开发流程图如下图所示
需求分析
网站类型
- 本项目主要完成一个个人新闻博客类网站,用于知识分享,交友互动等
主页模块
- 轮播图
- 热门文章推荐
- 文章标签、文章列表(可滚动加载更多)
- 左侧广告展示
- 个人联系方式
用户模块
- 注册
- 短信验证码(云通信平台)
- 图片验证码
- 登录
- 用户名和手机号登录
- 个人中心页
在线视频模块
- 实现在线播放视频功能等
文件下载模块
- 实现相关资源共享,如课件笔记等
搜索模块
- 使用流行的elasticsearch搜索引擎框架,实现网站资源快速搜索定位功能
后台管理模块
- 文章标签管理
- 文章发布
- 文章管理
- 热门文章管理
- 主页轮播图管理
- 课程发布
- 文档管理
- 用户组管理
- 用户管理
项目架构
网站开发模式
- 前后端部分分离的开发模式
前端技术
- html + css + js + jquery(ajax)
后端技术
- django2.1 + mysql + redis + elasticsrarch + nginx + uwsgid
简单面试题
- 在django的orm操作中,返回列表查询集的过滤器有哪些?
- orm是对象关系映射,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQL 语句打交道,只需简单的操作实体对象的属性和方法,orm技术是在对象和关系之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化
- orm的优势:用面向对象的方式描述数据库,操作数据库,不用直接编写sql代码,只需像操作对象一样从数据库操作数据
- 返回QuerySet,是列表查询集
- QuerySet特点(操作) 切片 迭代 链式操作
- 编程语言中的链式操作是利用运算符进行的连续运算(操作),它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作、连续的输入操作、连续的输出操作、连续的相加操作等都是链式操作的例子
- 切片
- 编程语言中的链式操作是利用运算符进行的连续运算(操作),它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作、连续的输入操作、连续的输出操作、连续的相加操作等都是链式操作的例子
- filter(条件) 输出满足条件的数据
- all() 返回所有数据
- values(‘字段’) 指定字段(可以多个),QuerySet里面是字典类型
- exclude(条件) 排除条件
- order_by() 排序
- 在django中,QuerySet的get和filter方法的区别,请从接收参数,返回内容以及异常三个方面来阐述
- 接收参数:get严格匹配,filter可以支持模糊匹配
- 返回内容:get返回一个model的实例对象,filter返回查询集,支持链式操作
- 异常:get返回值唯一,返回值有多条数据会抛出异常,filter可以返回多条,不报错
- 在django中,form表单的作用
- 可以渲染成一个前端页面的表单
- 校验参数,用is_valid()
- 在django视图中,可以获取前端传过来的那些参数?如何获取?
- form表单提交参数,通过request.GET request.POST
- url传参,比如/index<int:age>/,通过函数获取,比如
def get(request,age):
- 查询字符串,比如/index/?key=value,通过request.GET获取
- 请求头获取参数,通过request.META获取
- ajax,通过request.body获取
- 前后端不分离:后台的视图,模板直接用render渲染
- 前后端分离:后台的视图中用json传递数据给前端,通过js渲染到html