自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fortuna_的博客

本博客仅作为记录、分享学习的过程,不喜勿喷。

  • 博客(41)
  • 收藏
  • 关注

原创 Nginx 踩坑之405 not allow

最近项目加了一个批量上传的功能,本地实测后没问题,上线后发现有问题,上传的API报了405 not allow一顿分析后发现问题来自于线上部署用到的nginx, 这个错误的原因就是nginx不允许用户使用post请求访问静态资源,那么我们就需要在nginx把这个请求判为405 error后去做转发,转发到对应的后端接口上面去。如下配置:location / { root /www/vue-dist; try_files $uri $uri/

2020-10-28 14:14:04 4810 1

转载 本地消息表,最常用解决方案

核心是把大事务转变为小事务,逻辑如下:举例说明:我拿100元去买一瓶水1.当你扣钱的时候,你需要在你扣钱的服务器上新增加一个本地消息表,你需要把你扣钱和减去水的库存写入到本地消息表,放入同一个事务(依靠数据库本地事务保证一致性)。2.这个时候有个定时任务去轮询这个本地事务表,把没有发送的消息,扔给商品库存服务器,叫它减去水的库存,到达商品服务器之后,这时得先写入这个服务器的事务表,然后进行扣减,扣减成功后,更新事务表中的状态。3.商品服务器通过定时任务扫描消息表或者直接通知扣钱服务...

2020-08-17 11:09:27 2259

原创 python property的AttributeError的问题

上面的例子可以看到我们确实有name这个属性,但是程序确抛出没有name这个属性的错误:1/在name方法中我们调用了不存在的属性missing_attribute;2/通过__getattr__方法来处理获取不存在属性时的错误;通过分析与网上查找的出的结论是,出现这个错误需要满足两个条件:1/使用property装饰器的方法中有未预期的属性调用,说白了就是调用了不存在的属性,如上述例子中的missing_attribute属性;2/实现了__getattr__方法;这个其...

2020-08-12 16:17:03 2164

原创 nginx踩坑之vue页面404问题

新项目上线需要部署,部署环境为 nginx + gunicorn + supervisor + vue + flask前端的路由名有/api前缀,而我后端的接口地址没有这个前缀,所以在nginx转发的时候没有将/api前缀去掉,导致后端识别不了请求过来的地址而返回404错误比如前端的路由是/api/getuserlist?page=1 , 后端的实际接口地址是/getuserlist 所以是识别不了的需要在nginx转发的时候在gunicorn绑定地址后加上一个斜杠可以解决。当然这只是404的其

2020-08-06 09:22:13 1499

原创 Gunicorn + Flask 踩坑之 Address already in use[127.0.0.1:8000]

出现这类错误有两种可能性1\ 你在本机已经运行了一个地址为127.0.0.1:8000的服务,你需要找到这个进程并结束掉,或者更改你的端口号2\ 更改你程序的入口文件, eg:把运行部分放到__main__的作用域中去可以解决c...

2020-08-06 09:01:03 983

原创 MongoDB随机获取表有的n条数据

db.user.aggregate( [ { $sample: { size: 10 } } ] )上面的命令可以随机返回集合user中的20条数据使用MongoDB的aggregate聚合函数 + $sample表达式db.collection_name.aggregate()$sample 表达式:3.2+版本中新增,类似于大数据中的“数据采样”方式,从input中随机选择N条documents,语法“{$sample: {size: <N>}}”。如果N大于coll..

2020-06-11 09:32:11 3904

原创 nmap使用之异常解决nmap.nmap.PortScannerError: nmap program was not found in path.

根据错误描述可以看出是Nmap程序没有在系统变量中找到1\手动在命令行中输入 which nmap 看是否在系统变量中, 先卸载掉已安装的包pip uninstall python-nmap2\没有找到说明可能是你没有安装Nmap二进制包,或者没有配置好环境变量,没有就到这边Nmap's official download page去下载。下载安装好后需要去运行一下nmap.exe的再查看系统变量和用户变量是否有Nmap的路径,不出意外是有的.没有再重新安装3\上述步骤完成后再次执行pip in

2020-05-18 14:19:26 11245 1

转载 进入大型互联网企业所需具备的基础技术栈

想要进入大型互联网公司,首先我们面对的就是面试这一道坎。一般而言,需要3~5面才能最终拿到offer。一面是考查基础知识,二三面是考查专业技能、项目经验等,四五面大致是HR面,也就是谈薪资了。万丈高楼平地起,对于二三面的专业技能、项目经验等因人而异,各不相同,但是第一面的基础知识却是万变不离其宗。越是大型公司,面试官对于数据结构和计算机原理等计算机基础知识的要求也就越高。既然决定作一个程序...

2019-07-30 09:37:21 671

原创 比较全面的Python各领域书籍

https://github.com/china-testing/python-api-tesing/blob/master/books.md#python

2019-06-03 14:29:44 369

原创 conda下创建虚拟环境: 'setuptools' is a dependency of conda and cannot be removed from conda operating env

作为python开发,总会有需要不同虚拟环境的时候,Anaconda作为Python程序员最喜爱的集成开发工具之一无疑也内置了这个选项。废话不多说,直接上图尴尬了,想要创建个新的虚拟环境怕了这个什么错误。于是乎度娘上找呗,度娘老是让我失望,直接上Stack Overflow吧,找到解决办法了https://stackoverflow.com/questions/54392995/remov...

2019-04-09 17:12:25 10564 7

原创 当下比较流行的Python图像化GUI开发框架

作为Pyhon开发者,我们迟早都会碰到图形用户界面(GUI)应用开发任务,目前市场上有大量Python GUI开发框架可供选择,Python wiki GUI programming给出了超过30个跨平台框架方案,包括Pyjamas这样的跨浏览器web开发框架。Kivy这是一个非常有趣的项目,基于OpenGL ES 2,支持Android和iOS平台的原生多点触摸,作为事件驱动的框架,...

2019-03-14 10:27:53 2342

原创 python中eval的使用

eval(expression, globals=None, locals=None) --- 官方文档中的解释是,将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dict类型;如果提供了locals参数,那么它可以是任意的map对象。python是用命名空间来记录变量的轨迹的,命名空间是一个d...

2019-03-13 09:56:37 725

原创 sqlalchemy框架下orm对象转为源生sql方法

假如你的项目有需要将orm对象转为sql语句去拼接的需求,可以试试下面这种方法通常要将orm对象转为sql,可以直接str(对象),但出来的sql在条件值的地方可能不是你想要的,比如:orm对象是:str()转出来的是:这肯定是不符合我们的需求的用下面这种方式可以转出源生sql,具体原理自己多研究下...

2019-03-06 16:06:13 1129

转载 Python资源大全--收藏好

Python 资源列表内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等环境管理管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具。官网 pyenv:简单的 Python 版本管理工具。官网 Vex:可以在虚拟环境中执行命令。官网 ...

2019-03-05 13:56:50 1220

原创 celery+redis实现定时任务遇到的坑

这是关于设置时区TimeZone的坑,一开始按照默认的设置时区为UTC,如图后面在crontab折腾了半天都没有成功执行,后面心想会不会跟时区有关系,把时区改为"Asia/Shanghai",居然就成功执行了!坑...

2019-01-07 14:58:40 3250 1

原创 Flask + React 的cookie跨域问题

1、flask作为后端框架,首先要在配置文件中设置跨域:supports_credentials = True 表示支持身份凭证开启,在浏览器Response Header 的可以看到2、相应的在React也要进行配置,我这个项目的前端配置在http.js下,根据实际项目结构更改:3、配置完上面两项以后,就可以在看到Response Header 的set-cookie 与...

2018-12-19 15:54:43 1258

原创 为啥“return s and s.strip()”在filter时这么好用?

如题:给定一个数组,其中该数组中的每个元素都为字符串,删除该数组中的空白字符串。_list = ["A", "", "", "B", "", "C", "", "", "D", "", ' ']根据廖大神文章,答案是这样的:def not_empty(s): return s and s

2018-12-19 15:11:50 1383

原创 使用Anaconda切换Python3.x环境与Python2.7环境

1、首先确保你的系统里已经安装了Conda,打开命令行窗口,执行命令:conda --version2、查看你的系统当前已有的Python环境,执行命令:conda info --envs,从图中我们看到,我的机器里目前只有安装Anaconda时创建的默认Python环境,环境名称叫root,对应的Python版本是3.73、现在,我想添加一个Python2.7的环境,执行命令:c...

2018-11-21 11:53:54 27747 5

转载 常用排序算法的总结

转自https://www.cnblogs.com/eniac12/p/5329396.html目录冒泡排序   鸡尾酒排序   选择排序 插入排序 二分插入排序   希尔排序   归并排序 堆排序 快速排序   我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。  排序算法大体可分为两种:    一种是比较排序,时间复杂度...

2018-11-02 23:13:26 145

原创 【python】list的append与extend方法添加对象返回None问题

对Python的List进行更新主要用到两个方法:append()跟extend()append()是在List最后进行插入extend()更像是拼接,可以拼接另一个列表需要注意的是这两个方法都没有返回值,只是在原列表上进行修改,不会返回一个新的修改后的列表如下代码:print()输出的都是None,因为append没有返回值,所以new_menulist的值为Noneses...

2018-10-10 16:21:50 4113

转载 FlaskSQLAlchemy 学习笔记

一、写在前面这篇文章主要介绍了Python的SQLAlchemy框架使用入门,SQLAlchemy框架是Python中用来操作数据库的ORM框架之一,学习过程中主要参考网上现有资料,整理成笔记以便后续自己查阅。 如果转载,请保留作者信息。 邮箱地址:[email protected] SQLAlchemy: http://www.sqlalchemy.org/ 中文参考:http...

2018-09-13 10:29:00 3105 1

原创 理解Python的yield与send()语句

在generator中,我们不但可以通过for循环来迭代,还可以不断调用next()函数获取由yield语句返回的下一个值。但是Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。例子:def consumer(): r = '' while True: n = yield r if not n: ...

2018-09-07 10:37:00 3865

原创 Django项目部署报错:ModuleNotFoundError: No module named 'django.core.urlresolvers'

今天把原来在window环境下写的django项目在Linux系统上部署出现一下错误在stackflow上找到答案:意思就是之前我的django版本可能是1.9的,但现在Linux系统上安装的是2.1的,而django2.0开始就把 django.core.urlresolvers 包 更改为了 django.urls包,所以在导入时需要更改下包的路径...

2018-08-22 17:35:49 5724

原创 Python一个函数return两个值的取法(tuple的切片)

dict = { '元旦': '0101', '情人节': '0214', '植树节': '0312', '国庆节': '1001', }def get_holiday(words): for key,value in dict.items(): if str(words).__conta...

2018-08-18 16:45:15 8752

原创 给Ubuntu系统清理垃圾

  1、清理下载的软件包 不过与你想象的可能有很大的不同,Ubuntu系统在运行时是不会产生无用垃圾的。这一点与Windows系统有很大的不同。但是我们在升级系统时,软件管理器下载的软件包,系统则不会自动删除,其实这样做也是考虑到你可能会再次安装从而加快再次安装的速度考虑。当然了,我们普通用户,一旦下载安装完毕,其安装包也就没有存在的必要了,当然如果你是要安装更新并管理一大堆电脑的系统管...

2018-08-16 18:20:24 17296 1

转载 python下几种打开文件的方式

python下打开文件超级简单,不用导入任何包,直接输入f = open('your_file.txt','r')就可以打开一个文件进行操作。第二个参数为对文件的操作方式,’w’是写文件,已存在的同名文件会被清空,不存在则会创建一个;’r’是读取文件,不存在会报错;’a’是在文件尾部添加内容,不存在会创建文件,存在则直接在尾部进行添加;还有’wb’是写二进制文件;’rb’是读取二进制文件...

2018-08-13 09:58:34 20705

原创 git 远程推送代码仓异常:Updates were rejected because the tip of your current branch is behind问题解决

有如下几种解决方法:1.使用强制push的方法:$ git push -u origin master -f这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。2.push前先将远程repository修改pull下来$ git pull origin master$ git push -u origin master3.若不想merge远程和本地修改,可以先创建新的分支...

2018-08-06 18:24:26 1502

原创 Linux下vi编辑器命令大全

默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。 vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:Ctrl+u:向文件首翻半屏;Ctrl+d:向文件尾翻半屏;Ctrl+f:向文件尾翻一屏...

2018-08-01 17:36:02 10749 2

原创 Ubuntu下删除一个带锁的文件或目录

shell下执行sudo  chmod  -R  777  文件夹

2018-08-01 16:18:33 2466

转载 Ubuntu16.04安装搜狗输入法

1.下载搜狗输入法的安装包            下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包         2.按键Ctr+Alt+T打开终端,输入以下命令切换到下载文件夹: [html] view plain copycd ~/Downloads/  ...

2018-08-01 09:46:12 200

原创 ubuntu为普通用户设置root权限

使用的方法为修改 /etc/sudoers  1. 一般情况下 /etc/sudoers 的文件权限是 440,即只读权限,需要修改为可写。 [root@localhost ~]#  chmod 770 /etc/sudoers 2. 修改 /etc/sudoers 文件,找到 root    ALL=(ALL)    ALL 的字段,在下面添加一行:username   ...

2018-07-31 11:36:33 9254

原创 数据结构:链表与顺序表的优缺点

1.顺序表存储     原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度     优点:存取速度高效,通过下标来直接存储     缺点:1.插入和删除比较慢,2.不可以增长长度                    比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序:     适用场景:频繁查询但很少用到插入与删除可以考虑顺序表2...

2018-07-09 11:20:26 2469

原创 Redis异常:redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of

今天在测试爬虫的时候在Redis中手动添加了一个key,key值是要爬取的url。之前也是这么测试的都没有任何问题,今天出了个Redis异常:响应错误:大概意思是说key的类型不对,然后我去把这个key删掉就没问题了,后面添加新的还是报这个错误,就懵逼了。最后网上查了资料才发现是创建key的时候的类型选错了,估计是什么时候手抖了点到的,如下图位置改为list就了,其实就是粗心导致的错误!!...

2018-07-05 09:57:38 14511

原创 Python爬虫工程师面试常见题

一.项目问题:    一般面试官的第一个问题八成都是问一下以前做过的项目,所以最好准备两个自己最近写的有些技术含量的项目,当然一定要自己亲手写过的,在别的地方看的源码,就算看的再清楚,总归没有自己敲的了解的多。以下是抽出的几点1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎么解决的2.用的什么框架,为什么选择这个框架(我用的是scrapy框架,所以下面的问题也是针对scrapy)二.框架问题(sc...

2018-06-25 10:45:12 6590 3

转载 正则表达式验证邮箱格式

需满足的验证逻辑:@之前必须有内容且只能是字母(大小写)、数字、下划线(_)、减号(-)、点(.)@和最后一个点(.)之间必须有内容且只能是字母(大小写)、数字、点(.)、减号(-),且两个点不能挨着最后一个点(.)之后必须有内容且内容只能是字母(大小写)、数字且长度为大于等于2个字节,小于等于6个字节邮箱验证的正则表达式:^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-z...

2018-06-22 22:33:10 29006 2

转载 http.cookiejar库之CookieJar

CookieJar和HTTPCookieProcessor我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问。在使用urllib库做爬虫,我们需要借助http.cookiejar库中的CookieJar来实现。CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。CookieJar:管理HTTP cookie值、存...

2018-06-03 17:10:40 29045

转载 Scrapy框架之Spiders类理解

SpidersSpider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。对spider来说,爬取的循环类似下文:以初始的URL初始化Request,并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参...

2018-06-03 16:08:14 982

原创 scrapy框架中选择器的使用

Selector选择器Scrapy框架提供了自己的数据解析方法,即Selector(选择器)。1、Selector(选择器)是基于lxml来构建的,支持XPath、CSS选择器以及正则表达式,功能全面,解析速度和准确度非常高。2、Selector(选择器)是一个可以独立使用模块。 直接导入模块就可实例化使用。=============================================...

2018-05-29 22:43:34 586

原创 os.mkdir()与o.makedirs()的区别

[html] view plain copy#-*-coding:utf-8-*-  import os    path_01 = 'Test\\path_01\\path_02\\path_03'      try:      os.mkdir(path_01)      print u'第一次创建成功!'  except:      print u'第一次创建失败!'      try:   ...

2018-05-26 22:35:11 2951 1

转载 深入理解Python中yield关键字

阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结:通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。生成器是可以...

2018-05-18 21:08:30 335

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除