数据库种类那么多,该如何选择?
技术真的是日新月异,Web 网站已经脱离之前的静态网站的体系,转而使用动态语言搭建的动态网站。
这也衍生出一个问题:该如何存储数据了?
数据库就应运而生,它的作用是提供存储数据的容器。
方便 web 网站进行存储、查询、更新等。
数据库种类也很多,有成熟且稳定的 MySql 数据库,有后起之秀的 MangoDB 数据库,也有新时代宠儿 Redis 数据库。
除此之外,还有其他一些数据库,例如 Sqlite、Oracle 等。
那么问题来了,面对多种类型的数据库,自己该如何选择?
或许你因个人比较喜欢 MySql 数据库,所以选择它。
也许你在网络上查了一下资料,发现别人都推荐使用 MangoDB,所以就选择它。
这两种想法都是不能正确地选择。
任何脱离业务来谈架构都是在瞎扯。
因此,要根据项目业务的场景需求来决定选择哪种数据库。
每种数据库都各有优缺点,而选取标准是选择最优,最适合。
我个人的理解是结合以下几个方面来考虑:
1.读写速度这存储数据方式往往决定读写的速度。
Mysql 无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。
Mo ...
我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?
我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?
《复仇者联盟3:无限战争》于 2018 年 5 月 11 日在中国大陆上映。截止 5 月 16 日,它累计票房达到 15.25 亿。这票房纪录已经超过了漫威系列单部电影的票房纪录。不得不说,漫威电影已经成为一种文化潮流。
复联 3 作为漫威 10 年一剑的收官之作。漫威确认下了很多功夫, 给我们奉献一部精彩绝伦的电影。
自己也利用周末时间去电影院观看。看完之后,个人觉得无论在打斗特效方面还是故事情节,都是给人愉悦的享受。
同时,电影还保持以往幽默搞笑的风格,经常能把观众逗得捧腹大笑。
如果还没有去观看的朋友,可以去电影院看看,确实值得一看。
本文通过 Python 制作网络爬虫,爬取豆瓣电影评论,并分析然后制作豆瓣影评的云图。
1.分析先通过影评网页确定爬取的内容。我要爬取的是用户名,是否看过,五星评论值,评论时间,有用数以及评论内容。
然后确定每页评论的 url 结构。
第二页 url 地址
第三页 url 地址:
最后发现其中的规律:除了首页,后面的每页 url 地址中只有 start= 的值逐页递增,其他 ...
Django 实战2:利用 Session 实现自动登录
上篇文章中讲到 Django 如何启动以及配置 sessions 功能。sessions 功能用是跟踪用户的状态,经常结合 Cookie 功能实现自动登录功能。
所谓的“自动登录”指的是:我们登录一些网站,在不关闭浏览器以及距离上次登录时间不是很长的情况下。
无论我们在新的标签页打开网站,还是关闭页面重新打开网站,登录状态一直保持着。
本文内容有两个:一是利用 Django 实现自动登录功能,二是揭开“自动登录”的神秘面纱。
1.新建项目我为了将本系列所有文章的示例代码保持集中状态,所以直接在 Django_demo 项目中创建应用。
如果第一次看这文章,需要先创建项目(project),再创建应用(app)。
我新建的应用是 demo_session。
然后在 setting.py 中启动请用,并检查 sessions 组件是否启动。
因为需要 Cookie 功能,所以同样需要在 settings.py 增加一些配置。
12345678SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏 ...
Django 使用会话(sessions)功能
淘宝、天猫、京东等电商网站的出现,让我们足不出户就能购物。
在这些网站中,都有一个“购物车”的功能。当我们在不同商品页面将商品加入购物车,然后关闭浏览器。
等下次浏览该网站时,我们会依然发现购物车的商品还在。
这是怎么实现的了?类似这种场景,一般都是采用 Cookie + Session 方式来实现。
1.Cookie 机制HTTP 协议是无状态的。
所以服务器无法根据 HTTP 协议来辨别多个 HTTP 请求来自哪个用户。
在实际场景中,服务器经常需要追踪客户端的状态。为了解决这个问题, Cookie 技术应运而生。
cookie 一开始是服务器产生的一段随机字符串。
它的主要内容包括:名字,值,过期时间,路径与域等信息。
然后服务器将其发送给客户端。
在后续的请求中,cookie 会附在请求资源的 HTTP 请求头上,发送给服务器。
2.Session 机制如果不涉及用户登录等敏感信息时,Cookie 能够满足大部分的场景需求。
而客户端(如浏览器)会将 Cookie 是保存在硬盘中。
如果用户登录敏感信息保存到 cookie 中,会存在安全性问题。
因为当 HTTP 请求被黑客 ...
Django 实现分页功能
当页面因需要展示的数据条目过多,导致无法在一个页面全部显示。
这时,页面经常会采用分页形式进行展示,然后每页显示 20 或者 50 等条数据。分页经常在网站上随处可见,
它大概是这样子:
这样的实现不仅提高了用户体验,还是减轻数据库读取数据的压力。
Django 自带名为 Paginator 的分页工具, 方便我们实现分页功能。本文就讲解如何使用 Paginator 实现分页功能。
1.PaginatorPaginator 类的作用是将我们需要分页的数据分割成若干份。
当我们实现化一个 Paginator 类的实例时,需要给 Paginator 传入两个参数。
第一个参数是数据源,可以是一个列表、元组、以及查询结果集 QuerySet。
第二个参数需要传入一个整数,表示每页显示数据条数。具体写法如下:
12345book_list = []for x in range(1, 26): # 一共 25 本书 book_list.append('Book ' + str(x))# 将数据按照规定每页显示 10 条, 进行分割paginator = Pagin ...
Django 学习笔记之模型高级用法(下)
接着上篇文章内容,本文分享自己对模型一些用法的总结。
1.模型的元数据Meta除了抽象模型,在模型中定义的字段都会成为表中的列。
如果我们需要给模型指定其他一些信息,例如排序方式、数据库表名等,就需要用到 Meta。Meta 是一个可选的类,具体用法如下:
1234567class Author(models.Model): name = models.CharField(max_length=40) email = models.EmailField() class Meta: managed = True db_table = 'author'
不知你是否对上述代码有影响。通过 Django 将数据库表反向生成模型时,Django 会默认带上 managed 和 db_table 信息。
我主要说下 Meta 一些重要的属性,其他属性你可以通过文档信息进行学习。
abstract: 如果 abstract = True,模型会指定为抽象模型。它相当于面向对象编程中的抽象基类。
proxy:如果设置了p ...
Django 学习笔记之模型高级用法(上)
前面有两篇文章简单介绍 Django 的模型,这一部分算是基础知识。
我自己近期也总做了下总结,将花大概两篇的篇幅来分享下模型的一些高级用法。
如果想熟悉 Django 的用法,我认为应该一开始要熟悉一些细节用法,后面再了解 Django 的实现原理。
而细节用法往往体现在一些差别用法,难以理解的知识点上。
1.复杂的字段类型经过前面的学习,我们知道模型的字段类型一方面是指定数据库表的列名称和数据类型,另一方面决定 HTML 中的表单标签类型。
1-1.整数类型的区别Django 的整数类型有三个,分别是 IntegerField、BigIntegerField 和 SmallIntegerField。
这三个字段区别在于取值范围。
IntegerField 在 Django 所有支持的数据库中,合法取值范围是 -2147483648 到 2147483647。
而 BigIntegerField 是一个 64 位整数,它允许的值范围是 -9223372036854775808 到 9223372036854775807。
所以在数据库迁移的时候,特别数据库中有 Sqlite 时,要 ...
想做 Python Web 开发,需要掌握哪些技能?
在 Web 开发领域,Java 凭借企业级支持以及世界丰富的生态环境成为绝对霸主,PHP 紧随其后。
有些公司考虑效率问题而采用 C++ 做后台开发语言, 也有人使用 Node.js 开发后台。
另外 Python 也是能够做后台开发的。Python 具有语言简洁、开发效率高等特点。
还有成熟且不断更新的开源框架,例如 Flask、Django、Tornado等。
所以很多大公司都使用其开发后台。
比如人人皆知的 YouTube、Instagram、Reddit、Quora、知乎、豆瓣、果壳等。
因此,市场有 Python Web 开发的岗位需求。那么我想往这方面发展,我需要掌握哪些技能?
1.Python 语言想使用 Python 做后台开发,第一步就是就是学习 Python 语言。
首先要将学习 Python 基本语法,再学习 Python 高级用法(例如闭包,面向对象等),接着再了解各个标准库的用法,最后熟悉下 PEP8 编码规范。
2.开发框架大部分后台业务逻辑都会使用 Web 框架来开发,目的是提高开发效率。
常用的 Python web框架有 Django、Flask、T ...
Python 编码规范
软件行业现在基本上是协同工作,不再是以前个人单打独斗的年代了。
在一个团队中,每个人可能负责一个或者多个模块。
如果团队没有统一的编程规范,会增加代码理解难度,从而增加维护成本。
所以遵循良好的编码风格,可以有效的提高代码的可读性,降低出错几率和维护难度。
另外,使用(尽量)统一的编码风格,还可以降低沟通成本。
网上有许多的编码规范,我介绍分享几个知名编码规范给大家参考学习。
PEP 8PEP 8 可以算是 Python 官方的标准编码规范。
它是用于规范 Python 主发行版中的标准库的代码。所以这个编码规范是值得一看。
PEP 8 文档地址
Google 的 Python 风格指南总所周知,Google 是开源大户。Google 会将项目托管到 Github 上面,任何人都可以 fork、 修改、提交。
如果代码贡献者的编程风格与 Google 的不一致, 会给代码阅读者和其他代码提交者造成不小的困扰。
Google 因此发布了这份自己的编程风格指南, 使所有提交代码的人都能获知 Google 的编程风格。
Google 的 Python 风格也是遵循 PEP8 规范。
...
该如何学习 Python?
在我的 QQ 学习交流群中,有位读者问我一个很有代表性的问题,在这里和大家分享下。
猴哥,能说下自学的学习经验吗?我都自学 Python 一个月了。
在我看来,这个问题的本质就是找到属于自己的学习方法。
我把自己的经验分享给大家,希望对你们有帮助。在这之前,我要先说下学习效率的问题。
因为我觉得掌握知识 = 学习方法 + 学习效率。
美国著名学习专家爱德家·戴尔曾提出一种学习方式的理论。它其实是一张图,名为学习金字塔效率图。
在国内,我们最经常接触的三种学习方式分别是听讲,阅读,实践。
听讲指的是是上学时听老师讲课或者观看别人的教学视频。
由图可知,这是一种学习方式效率最低的。随着时间地流逝,遗忘的内容最多。
阅读书籍与听讲相比,则相对好点,但还是不高。
而实践以及教授给他人,这两个种方式往往是被大家所推崇。
因此,我们学习新领域的知识时,可以先通过看别人的教学视频或者阅读相关书籍来入门。但一定要去实践,这能确保自己学到大部分知识。
例如你正在看别人的 Python 入门课程,在课后自己要手动去敲代码。
值得注意的是,不要照着课程的代码来敲打,那是没有效果。
如果没有 ...