python
文章平均质量分 88
Cap_liu
这个作者很懒,什么都没留下…
展开
-
向全栈迈进——Angular+Tornado开发树洞博客(九)
在上一篇博客中,我们建立了story模块,并在其中完成了书写故事功能的开发。在这篇博客中,我们将实现首页上展示的故事列表,并开始开发评论功能。十二 故事列表的开发1 前端部分我们需要建立一个home组件作为我们呈现故事列表的地方。我们打开cmd,输入以下命令,建立一个home组件:ng g c home然后,我们在app.module.ts中引入NG-ZORRO提供的标签组件,以便在之后对故事进行分类展示://app.module.ts//...import { NzTabsModule原创 2021-10-06 15:37:56 · 870 阅读 · 0 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(八)
在上一篇博客中,我们实现了用户登录功能,并介绍了如何在angular中使用cookie,以及angular中路由事件的使用。在这期博客中,我们将开始开发我们的核心功能——故事系统与评论系统。我们的故事系统和评论系统如下图所示:故事系统由一个简单的表单组成,包括标题栏和内容栏,内容栏我们会使用之前安装好的ngx-quill富文本框插件来实现,以支持富文本功能。我们的评论系统如下图所示:用户可以对每篇故事发表评论,且可以对故事下的每篇评论再次评论,形成一个评论树。下面,就让我们看看该如何实现这两个原创 2021-09-20 20:50:10 · 390 阅读 · 0 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(七)
在上一篇博客中,我为大家介绍了angular调用服务的原理,以及实现了用户登录功能的前端部分。在这期博客中,我们将继续实现用户登录的后端部分,以及介绍angular的路由事件。十 用户登录功能的开发2 后端部分我们打开util/users/userutil.py文件,实现loginuser函数:# util/users/userutil.pydef loginuser(username,password): password = encryption(password) user原创 2021-09-04 21:01:43 · 269 阅读 · 0 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(五)
在上一篇博客中,我们实现了注册组件的前端部分,使用了angular提供的表单系统,并构造了一个服务来访问后端服务器。在这篇博客中,我们将搭建后端部分的框架,并继续实现注册功能的后端部分。八 用户注册功能的开发3 后端部分3.1 后端框架介绍如我们在这个系列第一篇所言,我们的后端部分采用tornado框架,搭配sqlalchemy和alembic这款ORM框架,来组成我们的后端server。而我们的数据库部分采用sqlite3这种轻量型的数据库。tornado是一款异步非阻塞的web框架,其既是we原创 2021-08-15 17:04:18 · 505 阅读 · 1 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(三)
在上一期博客中,我们建立了第一个angular项目,并介绍了angular项目中的重要文件。在这期博客中,我们开始安装重要的第三方插件,并开始编写我们的第一个angular组件。六 使用npm命令安装第三方组件我们首先来安装NG-ZORRO,这是一个遵循Ant Design设计规范的Angular UI组件库,提供了非常多的常用组件,任何组织、企业和个人均可免费使用。我们在cmd中进入到项目目录,输入以下命令来安装NG-ZORRO:npm install ng-zorro-antd@11 --save原创 2021-07-25 22:18:04 · 699 阅读 · 0 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(二)
在上一篇博客中,我向大家介绍了这个系列要开发的博客的技术栈以及总体架构图,相信大家对我们要开发的东西已经有了一个初步的了解。在这期博客中,就让我们把相关的软件工具安装好,并开始我们第一个angular项目。三 软件工具的安装1 node.js的安装从node.js官网https://nodejs.org/zh-cn/download/下载node.js的LTS版本(当前为14.17.3),下载好后选好安装路径,一路next即可。安装完成后,打开cmd界面,输入node -v命令,若能显示版本号,原创 2021-07-12 22:09:22 · 546 阅读 · 1 评论 -
向全栈迈进——Angular+Tornado开发树洞博客(一)
在写了Django和Tornado两个纯后端系列的博客后,我决定在前端方面也提升一下自己的技术,不再用原生的html凑合写个页面来支持后端的开发了。正好最近公司正在推动angular框架技术,因此我将前端学习的重点放在了angular框架上。这个系列将为大家带来angular+tornado这一组合,我们将使用这个组合来实现一个树洞博客。所谓树洞博客,就是一个大家可以匿名倾诉秘密的地方,大家可以把内心想说出的东西匿名发布在网络上,从而疏解内心的压力。我们的树洞博客雏形如下:在首页中可以看到用原创 2021-07-06 22:11:29 · 556 阅读 · 1 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(十一)
在上一篇博客中,我们实现了填写假单以及查看假单的功能。在这篇博客中,我们将实现审批假单的功能,以及构建用户权限系统,防止用户执行没有权限的功能。十五 审批假单审批假单的界面如下所示:在这个页面,用户可以看到他所有下级提交的假期申请,并对其进行操作批准或拒绝。打开util/users/timesheetutil.py,实现util函数:# util/users/timesheetutil.pydef changevacationapplystate(vacationId,state原创 2021-03-20 21:41:46 · 260 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(十)
在上一篇博客中,我们完成了请假系统的数据库部分设计,现在让我们来实现后端和前端的功能。十三 填写假单我们打开base_nav.html,在其中添加新的展开栏,用于放置请假相关功能:<!--base_nav.html--><!--之前代码略,总之就是左侧导航栏继续往下加就是--> <li> <a href="#" data-toggle="colla原创 2021-02-21 20:31:32 · 239 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(九)
在上一篇博客中,我们完成了考勤系统的基本功能。现在,让我们继续开发请假系统。十一 构建事件种类还记得我们之前建立的考勤事件么?在当前的设计中,考勤事件有两个字段:事件代码和事件名称,现在我们决定给考勤事件增加一个种类的字段,来表明该事件属于何种事件。我们需要建立一个新表来存储考勤事件的种类,就叫它TimeSheetEventCategory吧。在database目录下建立tbltimesheeteventcategory.py,输入以下代码:# database/tbltimeshee原创 2021-01-24 20:37:30 · 245 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(八)
在上一篇博客中,我们补全了一些用户系统的相关功能,这期让我们来实现用户的上下级关系以及考勤审批十 用户上下级和考勤审批在我们的系统中,每个用户只有一个上级,但每个用户可以有多个下级。因此,我们需要给User表加一个名为supervisor的字段,表明该用户的上级是谁。一个用户的可以审批其所有下级的考勤,他自身的考勤也只能被他的上级审批。我们migrate目录下打开Powershell,输入以下命令:alembic revision -m "add supervisor on user ta原创 2021-01-17 20:54:50 · 262 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(七)
在上一篇博客中,我们对项目结构进行了一些调整,并且实现了查看考勤功能。今天我们来补全一些用户系统的功能:用户管理、批准用户、注销用户、用户登出这4个功能。9 用户管理、批准、注销及登出此功能的作用是批准用户的注册,并同时调整其用户组。只有得到了批准的用户在之后的权限系统中才能使用相关功能。该功能的页面如下:在这个页面,我们可以看到所有的用户(除了Root用户外),也会显示出每个用户的邮箱、所属用户组、状态、注册时间和最后登录时间。在每行的最后,可以对用户进行注销或批准的操作。从图上可知,te原创 2021-01-10 20:47:52 · 340 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计考勤系统(六)
这篇和上一篇博文隔的时间有点远了,希望大家还记得我们这个系统之前都做了什么。在上一篇博客中,我们构造了一个复杂的表单和calendar类来实现填写考勤的功能。现在,我们要实现查看考勤以及审批考勤的功能。6 项目目录结构的调整现在我们的项目已经有了很多的RequestHandler,把这么多RequestHandler都放在一个main.py文件里会很不好管理,因此,我们需要对项目的结构做一点调整,把这些RequestHandler按功能放到不同的目录里。调整后的目录结构如下:我们主要调.原创 2021-01-09 20:49:53 · 286 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计系统(五)
在上篇博客中,我们搭建了考勤部分的主页,提供填写考勤和查看考勤的入口。在这篇博客中,将继续为大家带来填写考勤和查看考勤部分的代码。目前,本系列博客的所有代码都已上传到github,库地址为git@github.com:CapLiu/LeaveManage.git,大家可以上去查看,之后的代码也将更新到这个库中。5 填写考勤在介绍填写考勤部分之前,我们先对上篇博文中提到的Calendar类做一点小改动。这是我们上篇博客的图,可见这个日历是从周三开始的,而不是从周一开始的。事实上,在之前的Cal原创 2020-11-29 21:04:08 · 288 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计系统(四)
目前,我们已经实现了基本的用户系统,现在让我们进入考勤部分的开发。十 考勤管理1 考勤系统总览我们初步实现如下几个功能:创建考勤事件、考勤填写以及考勤查看。创建考勤事件可以让我们创建不同的考勤事件,如正常出勤、事假、病假等;考勤填写顾名思义,是用来填写考勤的;而考勤查看用于查看已经填写好的考勤。我们的考勤系统为月度考勤,即每次填写一个月的考勤记录。可以看到,我们左边的导航栏发生了一些变化:原本的创建用户组和查看用户组现在被放在了用户组管理的一级菜单下;原本的用户管理现在也变成了一个新的一级菜原创 2020-11-15 20:26:48 · 285 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计系统(三)
在上一篇博客里,我们实现了建立用户组的功能,现在让我们来注册我们的第一个用户,并实现一个初始化系统的功能。七 用户注册我们的用户注册界面长这个样子:这个页面包含一个简单的表单,可供用户输入用户名、密码、Email以及选择用户组。这次我们先写后端函数,我们需要两个util函数来完成用户注册功能:createuser和encryption。前者用于根据参数来创建用户,而后者实现对密码的加密功能,最终存放在数据库中的是加密后的密码。# util/users/userutil.py# .原创 2020-10-17 20:56:20 · 305 阅读 · 0 评论 -
Tornado笔记——用Tornado搭建假单统计系统(二)
在上一篇博客里,我们用Tornado初步搭好了这个系统的架子,现在让我们开始往里填充一些内容。五 Tornado基础介绍首先让我们复习一下这个架子的后端代码:# server/main.py import sysimport platformimport osimport tornado.ioloopimport tornado.webfrom tornado.web import urlfrom setting.globalsettings import getconfig,原创 2020-10-11 16:36:39 · 499 阅读 · 1 评论 -
Tornado笔记——用Tornado搭建假单统计系统
距离上一次写博客已经有些日子了,之前的阎王殿工程由于未能明确脑洞的方向无疾而终,但相关的技术已转为了我的技术储备。在这半年里,我使用Tornado搭建了工作中所用的内部网站,对于Tornado的相关开发也有了一定的体会。因此,我决定再写一个关于Tornado的系列建站教程,这次我们要搭建一个假单(出勤)统计系统,可以统计员工每周的请假和出勤情况。一 框架和工具在这个系列中,我将选择以下工具和框架作为后端开发工具:Web框架:Tornado ORM框架:SQLAlchemy+Alembic 数原创 2020-10-07 17:40:08 · 585 阅读 · 1 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(一)
最近对写爬虫有些厌倦了,于是将方向转移到了Web开发上。其实在之前自己也看过一部分Flask的资料,但总觉得Flask的资料有些零散,而且需要的各种扩展也非常多。因此,我将研究方向转移到了另一个主流的框架——Django上。与Flask框架相比,Django框架提供了更全面的文档支持,其初始教程也很容易上手。而且,相比Flask,Django并不需要很多扩展的支持,其自身就提供了很多便利的类。原创 2017-11-19 19:55:49 · 1279 阅读 · 2 评论 -
技术笔记外传二——用elasticsearch搭建自己的搜索框架(二)
三 ElasticSearch的搜索功能以及esengine搜索的实现在上期博客中,我们用elasticsearch为我们的博客建立了索引,为我们的框架提供了数据基础。这期博客中,我们将介绍elasticsearch中的核心功能——搜索,并实现框架中的单字段搜索以及多字段搜索功能。在实现了框架中的搜索功能后,我们可以得到以下结果:页面右上角出现了一个带有复选框的搜索表单,我们可以对...原创 2019-03-09 21:21:05 · 445 阅读 · 0 评论 -
技术笔记外传二——用elasticsearch搭建自己的搜索框架(三)
四 esengine的高级搜索这篇博客中,我们将介绍esengine的高级搜索,如下图所示:在图中右上角是一个多字段搜索表单,以及一个通向高级搜索功能的链接。点击高级搜索,会进入到高级搜索页面中:在高级搜索页面中,esengine提供一个复杂的表单来设置搜索的各种条件,包括要包含的关键字以及要排除的关键字,还有在指定的范围内进行搜索;在得到搜索结果后,我们可以在页面右上角的表单...原创 2019-03-16 22:34:27 · 566 阅读 · 0 评论 -
技术笔记外传二——用elasticsearch搭建自己的搜索框架(四)
五 esengine的视图表单类在上一篇博客中,我们实现了高级搜索的后台部分。高级搜索可以使我们组合各种条件来进行搜索,从而得到更精确的结果。在这篇博客中,我将为大家介绍esengine的视图表单类,以及一个自定义django标签highlightresult。通过自定义标签,用户可以在前端对搜索结果进行自定义。esengine的表单与之前的whoosh版框架表单大同小异,这里主要介绍它的...原创 2019-03-24 16:21:18 · 690 阅读 · 0 评论 -
生死簿后台管理系统(一)——使用Docker构建开发环境
最近有个段子非常火,说有个程序员梦见自己被阎王召见,让他帮忙开发一个后台管理系统。在一笑而过之后,我觉得如果要是能把这个系统做出来,应该颇具娱乐性,也顺便了解一下高并发以及大数据的相关技术——每天要上生死簿的人估计不会少。于是,本着娱乐大众的目的,我抓来了一个mysql的DBA@BigCat_X还有一个前端@MC,开始构建这个系统。我们初步决定的技术路线为:数据库使用mysql,web服务器使...原创 2019-06-07 16:16:12 · 6615 阅读 · 5 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(十三)
在上一篇博文中,我们使用django自带的auth.user重写了users App的所有相关功能,并且将旧模型的user全部迁移到了新的model下。在这篇博文中,我们继续将blog App中与user相关的功能迁移到auth.User中。这样,在这篇博文结束时,我们整个博客的用户系统均会迁移到auth.User下。首先是对数据模型的更改。blog App涉及到user相关的数据模型为Blo...原创 2018-08-20 21:33:58 · 491 阅读 · 0 评论 -
技术笔记外传二——用elasticsearch搭建自己的搜索框架(一)
在上一个系列的外传中,我们实现了用whoosh搭建的搜索框架。Whoosh作为纯python的搜索库,其使用方便简单,适合作为搜索方面的入门库。然而,elasticsearch由于其强大的分布式设计,以及易于扩容的特性,被更广泛地应用在各个商业场景中。在这个系列中,我们将使用elasticsearch来搭建我们的搜索框架,主要会涉及到以下方面:elasticsearch的安装及运行;建立elast...原创 2019-01-20 19:51:05 · 1023 阅读 · 0 评论 -
技术笔记外传——用whoosh搭建自己的搜索框架(四)
在上一篇博客中,我对这个搜索框架的搜索功能进行了扩展,使其能搜索模型中外键字段的内容,大幅增强了搜索能力。这篇博文中,我将继续介绍这个搜索框架中最后两部分:表单和视图类。五 blogsearchengine的表单与视图类如haystack一样,我们的blogsearchengine框架也提供了基本的表单类和视图类,以供用户快速实现他们自己的搜索功能。blogsearchengine框架提供...原创 2018-12-01 21:25:24 · 636 阅读 · 2 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(四)
由于在上篇博文中仍然介绍了相当多的后端部分,导致原定于上篇介绍的前端部分“跳票”到了这篇。在此篇博文中,我将会介绍Users App和主页的前端部分,从而形成我们博客的一个雏形。在前端部分,我们主要使用前端模板来建立我们的网页。Django提供了默认的模板引擎供我们使用。借助模板引擎,我们可以方便地将服务器的数据显示在页面中,实现前后端的交互。此外,模板的另一个好处是可继承性。借助模板继承,我原创 2017-12-17 13:56:44 · 475 阅读 · 0 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(五)
在上一篇博文中,向大家介绍了Users App和Index的前端部分的实现,以及前端与Django的通信部分。至此,我们的博客已经具备一个简单的雏形,可以将其部署在本地的服务器上了。目前较为流行的web服务器有apache,nginx等等,我们这里选择uwsgi+nginx的方式进行部署。在部署博客之前,我们首先来看看Django、uwsgi和nginx三者之间的关系。Django为Web框架原创 2017-12-24 15:48:41 · 930 阅读 · 1 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(二)
继上篇博文,此篇博文介绍了Users model的相关内容,以及Users App的后台功能实现原创 2017-11-25 17:46:00 · 602 阅读 · 0 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(三)
(本来打算在这篇博文中介绍Users App的前端部分的,但写着写着就发现还需要铺垫很多东西才能把整个项目串的比较流畅些,因此这篇就继续介绍了后端的一些东西,前端的部分只好跳票到下一篇了~)在上一篇博文中,向大家介绍了User App的model以及后台功能实现。这篇博文将会介绍对Users App的一些修改、myblog/settings.py文件中的配置以及Django后台程序的使用。原创 2017-12-10 21:55:04 · 440 阅读 · 0 评论 -
SearchAppoint v0.16
最近由于工作的原因,没有太多功夫来更新这个小程序。这两天终于腾出空来又对它更新了两个功能:常用用户的手机号和密码存储以及常用用户的快速选择。这两个功能主要通过sqlite3数据库实现。数据库的设计比较简单,只有一个SA_usr表,4个字段:id, mobile,pwd和comment。id作为每个用户在程序内的唯一标识(虽然现在还没什么用……),mobile和pwd分别存储用户的手机号原创 2016-11-20 16:09:52 · 555 阅读 · 0 评论 -
SearchAppoint——北京市预约挂号平台查询器
这个算是用python写的第一个GUI程序,功能是查询北京市预约挂号平台上的各医院各科室的最近预约号源。由于这个比较偏应用,所以这里不直接贴代码。github地址:点击打开链接程序主界面:在启动程序时,由于要实时从网络中检索医院的名单,所以启动时会比较慢。在医院一栏中,列出了网站上所有的医院。然后选择医院,在诊室一栏中会列出该医院下所有的科室:然后选择科室,原创 2016-09-25 16:29:34 · 1655 阅读 · 0 评论 -
SearchAppoint v0.13
之前写的北京市预约挂号平台查询器更新了。做完v0.10后,好好分析了一下从登录到完成预约整个过程的请求,发现这个挂号平台的ajax参数还是相当直观的,没有设置什么障碍。实现请求的关键就是用一个session对象发送登录请求后拿到cookies,之后的所有请求均通过这个session发起,从而实现在登录状态下的请求发送与接收。从v0.12开始,程序的GUI实现从Tkinter改为了pyq原创 2016-10-05 19:34:45 · 763 阅读 · 0 评论 -
爬取msdn.itellyou.cn网站
最近一直在琢磨爬虫,从最早的BeautifulSoup爬取游民福利图,后来要爬取的动态网页多了,就逐渐过渡到了selenium+chromedriver/phantomJs的爬虫组合。偶然间听基友说有个msdn.itellyou.cn里收集了各种微软程序的ed2k安装包,因此便开始了对它的爬取之旅。这个网站的页面结构还是挺复杂的。通过观察,发现软件的名称和地址都在右侧内容项中的label>ch原创 2016-08-13 20:23:21 · 19434 阅读 · 0 评论 -
基于wxbot微信框架的微信遥控电视程序
最近买了个树莓派,打算在上面部署一点小应用。因此,想到了这个基于wxbot微信框架的遥控电视程序。程序的原理比较简单:对wxbot类进行继承,修改其中的信息处理函数,使其对自己给自己发送的消息进行处理,再根据发送的内容,调用selenium打开chrome浏览器,并播放相应的视频。程序的启动和退出均可通过微信命令遥控。然而,在开发完之后才发现树莓派上的Raspberry pi系统上装不原创 2016-08-28 13:55:59 · 4089 阅读 · 0 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(六)
这篇应该是2017年的最后一篇博客了,在这里首先祝大家元旦快乐!从这篇博客开始,将会介绍Blogs App的功能实现,包括数据模型的建立、相关功能的视图函数的实现、前端页面的设计等,这意味着我们即将可以书写真正的博客了。首先来建立我们的Blogs App,方法同建立Users App,即在manage.py目录下输入以下命令:python3 manage.py startapp blo原创 2017-12-31 19:11:59 · 1774 阅读 · 0 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(七)
上一篇博客中介绍了Blogs App的部分后端功能的实现,在这篇博客中,将继续为大家介绍Blogs App中前端功能的实现。首先来看发布博客功能的前端页面。在blogs/templates/blogs目录下建立名为addBlog.html的文件,作为我们的发布博客页面。addBlog.html内容如下:{% extends "blogTemplate.html" %}{% block原创 2018-01-07 13:52:07 · 582 阅读 · 0 评论 -
技术笔记——Django+Nginx+uwsgi搭建自己的博客(八)
在这篇博客中,我们开始为我们的博客开发Blogs App和Users App相关的管理功能,以便每个用户都能管理自己的博客以及评论。目前,Users App的管理功能相对简单,主要功能为查看用户资料以及切换到博客管理页面,如下所示:在点击了博客管理后,页面将跳转到管理页面,在此可进行对博客的各种管理:我们的博客管理操作支持对博客的编辑、删除,对草稿的编辑、删除和对评论的删除原创 2018-01-16 22:00:31 · 447 阅读 · 0 评论 -
技术笔记外传——用whoosh搭建自己的搜索框架(三)
四 blogsearchengine的高级模式在上一篇博文里,我们实现了我们搜索框架的核心功能——建立更新索引,以及搜索功能。在这篇博文里,我们将实现一个高级模式,此模式允许我们对模型的外键建立索引。在我们之前的代码中,我们建立的索引仅针对模型本身的字段,而不会对该模型涉及的外键模型进行索引。这样就引出了一个问题:我们的blogs模型的auther字段是连接到User模型的外键,在我们现有...原创 2018-11-24 16:56:07 · 413 阅读 · 0 评论 -
技术笔记外传——用whoosh搭建自己的搜索框架(二)
在上一篇博客中,我们为我们的搜索框架实现了建立索引schema以及初始化索引的工作。对于一个搜索引擎来说,应该可以跟踪搜索对象的更新,确保永远将最新的内容保存在索引中,因此我们需要一个更新算法以确保我们搜索的内容永远是最新的。我们向engine.py文件中添加如下代码,实现对搜索内容的增量更新:# blogsearchengine/searchengine.pyclass search...原创 2018-11-17 21:13:36 · 1344 阅读 · 1 评论