自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 WSGI,uwsgi,uWSGI梳理

WSGI,uwsgi,uWSGI梳理由于项目用的是uWSGI部署,想要了解uWSGI的工作流程,理清其在整个项目中的角色定位。在看了很多所谓技术文章之后脑子越发混沌,但最终在uWSGI的文档中找到了我所需的所有答案。uWSGI的中文文档的翻译虽然很欢乐,但还是免不了浓重的翻译腔,英文文档的表达更为清晰。本文涵括WSGI,uwsgi,uWSGI的关系梳理uWSGI不同情况下的角色定位uWSGI所支持的http,WSGI,uwsgi协议用在何处。定性WSGIWSGI规定了web服务器与应用

2022-02-19 01:03:42 1408

原创 scrapy的Pipeline类不可使用yield

scrapy的Pipeline类不可使用yield业务需求在scarpy的pipeline中处理过数据后再生成新的Request。但如果直接再Pipeline类的process_item方法中yield Request,会导致爬虫执行直接跳过该Pipeline,连个报错都看不到。排查发现是yield使该函数的调用的返回值成为生成器,而不是相关返回值。如何在Pipeline中生成新请求1.参照MediaPipeline。之所以我会先入为主地认为可以在Pipeline中直接yield出新Request

2022-01-22 23:24:45 607

原创 mongo的$push与$setOnInsert冲突解决

mongo的push与push与push与setOnInsert冲突解决业务需求 update时集合中若不存在则插入文档,若存在则将该文档的一个数组字段添加一个元素。示例# 集合中一开始不存在name为1的文档,插入该文档doc = {'name':1,'year':[2000]}# 现在集合中有name为1的文档,则将year为2001添加到上面的文档中的year字段中doc = {'name':1,'year':[2001]}满足这个需求使用push,push,push,setOnIns

2022-01-12 23:58:26 705

原创 scrapy的cookie管理

scrapy的cookie管理单个请求的cookie管理1.设置headers需要把settings.py的COOKIES_ENABLED设置为falseCOOKIES_ENABLED = False示例def start_requests(self): headers = { "cookie":"填入cookie" } url = '请求url' yield Request(url, callback=self.parse, headers=h

2022-01-12 01:17:02 1574

原创 课程交流网站项目架构

课程交流网站项目架构课程交流网站项目最终赶在3月初部署成功。其功能主要提供一个平台交流,分享课程评价及学习资料。附有自用开发的智慧树刷课,网课答题助手,百度文库文本提取,漫画模块,都可免费使用。如果你是暨大的,甚至还有抢课助手自动抢课。网址课程交流网站基础设施所含基础设施:腾讯云香港服务器两台广州轻量云服务器腾讯云COS存储腾讯云短信服务域名 campusutopia.cn项目架构图服务解析前端网站前端页面分两种:前台页面应用传统服务器渲染,由django处理返回h

2021-03-09 19:58:23 281 2

原创 docker容器中启动uwsgi秒退

docker容器中启动uwsgi秒退docker容器中启动uwsgi秒退,若用docker logs 容器 只有 [uWSGI] getting INI configuration from uwsgi.ini,无其他错误信息。那么就是 uwsgi.ini里用了daemonize 参数。该参数会使uwsgi在后台运行。而docker容器启动时若无-d参数(用docker-compose的时候是无-d参数的),需要一个前台应用才不会自动退出。因为Docker容器仅在它的1号进程(PID为1)运行时,会保持

2021-03-02 01:41:53 1309

原创 mongoDB中update_one与find_one_update异同

mongo中update_one与find_one_update异同在使用mongo时,想要更新一个文档的数据时,有update_one与find_one_update两种方法可供使用。共同点两个方法的传入参数都差不多,主要参数都是filter,update,upsert。两个方法都是用于更新一个文档的数据。差异update_one并不会返回文档的数据,而find_one_update会返回文档的数据。并根据returnNewDocument参数确定返回的是更新前的数据还是更新后的数据find_

2021-02-17 17:24:15 2108

原创 Vue集成CKEditor5源代码

概述对于简单的富文本编辑器,使用ckeditor的即用型编辑器构建(名字中带有build的,如ckeditor5-build-classic)是个很好的选择,简单易用。但只能包含一些基础的功能。很多实用的功能如自动保存,自定义图片上传是无法使用的。使用源代码集成CKEditor使您可以使用CKEditor全部功能。本文使用Vue CLI 4.0从源使用CKEditor安装必要的依赖项及配置vue.config.js要使用您的应用程序构建CKEditor,必须对默认项目配置进行某些更改。首先,安

2021-01-16 23:10:57 877

原创 Vue的index.html与其他静态文件分离部署

Vue的index.html与其他静态文件分离部署概述需求开发类似论坛的网站,由于域名备案政策,作为个人开发者很难备案成功,当然因为懒也没去尝试过。所以部署web的服务器只能选择香港的。但又因为穷,只能买最低配的1G1核,1M宽带的服务器。就这配置SSH连上去都费劲,还经常会丢包,那就更别说处理繁杂的请求了。刚好双11趁优惠买了个广州的轻量云,以及以学生的身份买了个广州的轻量云。那么需求就来了,域名解析至香港服务器,香港服务器提供index.html文件,而其他静态文件以及网站api的路径则指向广州

2020-12-30 19:21:45 990

原创 scrapy-redis分布式爬虫使用及docker swarm集群部署

使用及docker部署scrapy-redis分布式爬虫概述本文大致分为两部分scrapy-redis分布式爬虫使用流程使用docker部署分布式爬虫部署流程逐渐从手动创建容器到容器编排部署。演变流程大致如下单机Dockerfile+mongo+redis --> 单机docker-compose up --> 分布式 单机docker-compose +修改源码ip连通容器 --> 分布式 docker swarm 手动create服务 --> 分布式 docke

2020-12-07 00:15:39 563

原创 django中form组件的校验时raise ValidationError与self.add_error异同

异同当我们在form组件用clean函数(无论是局部或者全局钩子函数)验证字段是否有错误时,如果字段正确则最终clean函数要返回该字段值(全局钩子返回self.cleaned_data),是为了放入form对象的cleaned_data字典中,以供后续使用。出现错误则有两种选择raise ValidationError(‘错误信息’)self.add_error(‘校验字段名’,‘错误信息’),而后返回校验字段值两种方法都能将字段名及错误信息作为键值对放入对象的errors字典中。

2020-11-05 00:13:22 1212 1

原创 axios与djangopost通信 后端获取数据

前置知识ajax形式post提交数据的content-type有主要常用三种application/x-www-form-urlencodedmultipart/form-data(上传文件)application/json原生的django对于content-type为application/x-www-form-urlencoded 的ajax请求,且data经过urlencoded编码,其数据是放在request.POST(request.body中也会有数据,但是格式得自己重新反序列化

2020-11-05 00:07:33 568

原创 Vue项目打包到django部署

前言Vue项目一般用于实现前端的单页面富应用,其打包后的文件可简单看作静态文件,所以可以通过Nginx部署,当然也可以通过django部署(毕竟本质上还是一个html文件及各CSS,JS文件的集合)。通过django部署还可以省去一些跨域的麻烦,不过前后端的耦合性就比完全分开部署的差一点。测试所使用框架版本 django 3.06,VueCli 3.0Vue打包修改vue.config.js(VueCli3.0新建的项目里没有,要在项目目录新建一份)修改为module.exports = {

2020-10-28 23:53:46 3460 2

原创 慎用django模板include 与extend标签

别做django html组件化开发的梦django模板include 与extend标签最好只是在很简单,如只有html代码,无css,js情况下使用,这两个标签只能让你减少一些简单的重复的HTML代码的编写。千万不要做用这俩完成像Vue一样的组件化开发的美梦(当然可能只有我会这么傻)。我个人认为除非要复写的html代码十分简单且复写次数多才使用include 或extend标签进行html代码的复用,否则还是不用吧。原因一.css,js难以抽取成静态文件由于如果使用include 与exten

2020-10-21 17:15:58 243 1

原创 as_completed函数用例

使用ThreadPoolExecutor可以简洁地完成简单多线程任务,获取线程返回值的顺序有两种,一种是按线程创建顺序返回,第二种是按线程完成顺序返回(虽然返回顺序不同,执行时间应该是一样的)。按线程创建顺序返回import timeimport concurrent.futurestimes = [3, 1, 2]def sleeper(secs): time.sleep(secs) print('I slept for {} seconds'.format(secs))

2020-10-13 12:40:41 1796

原创 aiohttp中ClientSession使用注意事项

最近在研究协程,想写个协程实现的爬虫,选用aiohttp,对aiohttp中 ClientSession使用有些不解,然而中文资料有点少,大多是写怎么用就没了,不是很详细,就直接看英文官网了。aiohttp可用作客户端与服务端,写爬虫的话用客户端即可,所以本文只关于aiohttp的客户端使用(发请求),并且需要一点协程的知识才能看懂。如果想要研究aiohttp的话推荐直接看英文官网,写的很通俗易懂,就算不大懂英文,直接翻译也能看懂七八成了。如有纰漏,欢迎斧正。简单请求如果只发出简单的请求(如只有一

2020-10-12 21:33:29 7823 5

原创 celery使用eventlet模式task中操作django的orm报错解决

celery使用eventlet模式task中操作django的orm报错解决若celery使用eventlet模式task中操作django的orm会出现报错如下django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. 结论与解决方法结论原因是eventlet对thread的获取线程id的方法get_ident()进行了重写,导

2020-09-18 16:48:46 1191 4

原创 python 归并排序的递归法与循环法(利用队列)实现,以及性能测试

python 归并排序的递归法与循环法(利用队列)实现,以及性能测试递归排序核心递归排序的核心是 分与合分的最终结果 就是将原数组中每一个数字分作一个数组, 合就是 所有小数组不断排序,合并的过程。合并的过程是先将两个含有一个数字的数组排序,合并(每次比较两个数组的最小值,将更小值加入新数组中,当有一个数组无元素,则将还有元素的数组追加到新数组中即完成排序,合并。新数组已是有序)为一个含有两个元素的有序数组。然后是两个含两个元素的有序数组排序合并为含四个元素的有序数组,两个含四个元素的有序数组合并为

2020-09-18 16:38:36 562

空空如也

空空如也

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

TA关注的人

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