- day1 - 01 昨日内容回顾
- day1 - 02 作业1讲解
- day1 - 03 作业2讲解
- day1 - 04 作业2居中效果补充
- day1 - 05 http协议讲解
- day1 - 06 第一版基础web框架
- day1 - 07 自定义web框架至动态页面版
- day2 - 01 昨日内容回顾2
- day2 - 02 一个简单的爬虫示例
- day2 - 03 进阶至wsgiref版web框架
- day2 - 04 模块化自定义框架
- day2 - 05 通过终端指令来启动项目
- day2 - 06 jinja2模板渲染简单使用
- day2 - 07 pycharm导包飘红的解决方案
- day2 - 08 django初识
- day3 - 01 昨日内容回顾和wsgi协议
- day3 - 02 pycharm来创建django项目
- day3 - 03 django完成一个简单web应用示例
- day3 - 04 常用request对象属性和简单登录示例
- day3 - 05 url无名分组路由和需要注意的点
- day3 - 06 有名分组和补充说明
- day3 - 07 带默认值参数的视图函数
- day4 - 01 昨日内容回顾4
- day4 - 02 request对象常用属性和方法
- day4 - 03 reponse响应方法
- day4 - 04 CBV和FBV的写法
- day4 - 05 CBV源码解析
- day4 - 06 FBV加装饰器
- day4 - 07 CBV加装饰器
- day4 - 08 预习内容
- day5 - 01 昨日内容回顾5
- day5 - 02 变量使用 万能据点号
- day5 - 03 常用过滤器01
- day5 - 04 常用过滤器02
- day5 - 05 for循环标签
- day5 - 06 if判断条件标签
- day5 - 07 with标签
- day5 - 08 使用标签的注意事项
- day5 - 09 自定义过滤器
- day5 - 10 自定义标签
- day5 - 11 模板继承
- day6 - 01 昨日内容回顾6
- day6 - 02 mark_safe补充和safe过滤做的事情一样
- day6 - 03 静态文件配置
- day6 - 04 模板渲染注意问题
- day6 - 05 orm介绍
- day6 - 06 手动创建app需要注意的问题
- day6 - 07 通过orm创建表的流程
- day6 - 08 执行数据库同步指令的注意问题
- day6 - 09 配置连接mysql数据库
- day6 - 10 数据库同步指令的执行流程分析
- day6 - 11 内容回顾
- day6 - 12 组件和inclusion_tag的使用
- day7 - 01 昨日内容回顾7
- day7 - 02 各种FIeld的和FIeld中的属性简单介绍
- day7 - 03 添加记录和简单查询的orm语法
- day7 - 04 修改和删除
- day7 - 05 更新或者添加 和 查询或添加
- day7 - 06 13个查询qpi接口1
- day7 - 07 13个查询api接口2
- day7 - 08 作业布置
- day8 - 01 昨日内容回顾8
- day8 - 02 作业相关事宜
- day8 - 03 git仓库来管理项目代码
- day8 - 04 作业讲解添加和展示书籍
- day8 - 05 distinct的使用注意事项
- day8 - 06 字段的choices属性玩法
- day8 - 07 auto_now_add和auto_now参数讲解
- day8 - 08 url别名和视图中完成别名反向解析的方法
- day8 - 09 html中url别名发现解析和作业布置
- day8 - 10 表结构介绍
- day8 - 11 基于双下划线的模糊查询
- day8 - 12 表结构设计
- day8 - 13 预习内容
- day9 - 01 昨日内容回顾9
- day9 - 02 图书管理系统作业编辑功能
- day9 - 03 图书管理的删除功能
- day9 - 04 模型类和字段中的一些参数说明
- day9 - 05 关系记录的添加操作
- day9 - 06 内容回顾
- day10 - 01 昨日内容回顾
- day10 - 02 删除和修改
- day10 - 03 基于对象的跨表查询
- day10 - 04 通过配置查询原生sql语句
- day10 - 05 基于双下划线的跨表查询
引言
前面提到了我们开发时选择了Python语言和Web开发框架Django,至于选择的理由可以参考这篇文章(传送门: 软件设计开发从0到1)。 无论你是一个熟练的开发者还是小白,开发过程中也总是会面临各种各样的问题,从版本选择, 目录结构怎么设计, 安全上需要注意什么, 要遵守什么开发规范等等。 好的开始是成功的一半,奠定一个好的开始,也许后面的开发会让你事半功倍。 这篇文章里我想分享一下,我对这些问题的思考和选择, 也许不是最佳实践,但是希望能给你作为一个参考。
关于版本选择
着手开发之前必须考虑的一个问题。
Python
如果是4,5年前,也许我会推荐Python2, 那时支持python3的模块还不是很全,但是现在不一样了。很多的开源库都开始支持Python3, 另外官方预计在2020年停止支持Python2.7版本,官方在Python3引入了很多新特性,也修复之前的许多遗留问题, 所以建议在生产环境中使用Python3。相比Python2, Python3有一些差异化的东西,需要值得注意,当你谷歌"Python2 vs Python3"时,能搜索到很多的内容,这里也简单说明下,相比Python2, Python3有哪些不一样的地方。
语法上的差异:print的用法不一样, 整数相除的结果不一样, 错误处理语法有差异, 字符串类型str和字节类型byte不能相加, 废除了xrange函数,raise错误的用法不一样, 比较不可排序类型时会报错,比如比较[1, 2] > 'foo'或者 [1, 2] > (1,2)等
特性改进: 列表表达式里的变量不再影响全局变量,即不泄露到全局变量的命名空间; 使用range(),zip(), filter(), map(), {字典}.keys(), {字典}.values(), {字典}.items(),返回的是可迭代对象,而不是列表;默认字符集采用utf-8, 而不是ascii ; 引入了类型注解,标注传入的参数的类型等
扩展阅读:
Python3.6新特性官方文档中文版 https://zhuanlan.zhihu.com/p/24550488
Python3的这些新特性很方便 https://segmentfault.com/a/1190000013066350
python2与python3字符串的区别 https://my.oschina.net/sallency/blog/1563298
The key differences between Python 2.7.x and Python 3.x with examples https://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html
如果你正准备学习Python3,苦于不知道有哪些可以学习的参考资料, 也许本公众号之前写过的一篇文章对你会有帮助(传送门: 入门Python, 看这些资料就够了)
Django
选择了Django最新的版本。 当前最新的稳定版本是2.1. 需要注意的是Django2.0之后已经对Python2停止了兼容,意味着你的Python版本只能选择3(对应Django2.版,对Python版本的要求是3.5+),否则运行Django会报错。
Django2.0相比之前引入了一些新特性, 比如admin管理后台对移动端的支持更加友好,SQLite支持外键约束, 安全性也做了一些改进等。 当然,如果你不是重度使用者,应该也感受不到太大的差别。
Django的开发者社区很活跃, 涌现了很多优秀的插件, app。 这里推荐两个django app: xadmin(集成了很多强大且实用的后台管理系统插件,替代django内置的admin), django-rest-framework(基于django的restful api开发框架)