- 博客(351)
- 资源 (9)
- 收藏
- 关注
原创 用flask开发个人博客(39)—— 在flask中定义Rest API
一、什么是Rest API Rest 是将业务逻辑从后端转移到前端的一种Web架构,它使用URL来定位Web中的资源,将资源的URL和其他一些信息封装成JSON或者XML格式,在客户端和服务端之间进行传递。它支持http协议中GET、POST、PUT、DELETE等一般方法,作为服务端,就是根据客户端的请求方法,调用实现定义好的API,通过这种方式,服务端不再关心业务逻辑,只需要
2017-01-19 17:26:07 4205
原创 一张图解释SMTP、POP和IMAP协议
SMTP和POP协议:SMTP和IMAP协议: POP和IMAP都是客户端接收电子邮件的协议,两者的不同在于POP中的邮件由客户端进行管理,而在IMAP中邮件则由服务器进行管理。而且使用IMAP时不必从服务器上下载所有的邮件也可以阅读,比如我们可以选择下载邮件中多个附件中的某一个,也可以在IMAP服务器上将邮件标记“已读/未读”,这样在不同的客户端中打开邮
2017-01-19 09:34:47 22717 1
原创 【C#函数式编程】C#中的函数式编程(三) —— yield关键字的使用
在C#和Python中都有yield关键字,在Python中通过使用yield关键字我们可以得到一个generator生成器,而在C#中使用yield关键字可以得到一个IEnumerable类型的对象,可以理解成C#中的生成器。 IEnumerable对象是一种集合对象,比如List对象、Dictionary对象,可以用foreach进行遍历,而yield关键字的提出就是为了简化
2017-01-18 18:43:27 956
原创 【C#函数式编程】C#中的函数式编程(二) —— IEnumerable和IEnumerator使用详解
一、IEnumerable接口 IEnumerable接口可以暴露一个Celltions的元素的迭代器,它只含有一个方法GetEnumerator,这个方法返回一个IEnumerator对象,而通过这个IEnumerator对象,我们就可以遍历整个Celltions中的元素。二、代码示例 下面的代码,演示如何继承IEnumerable接口和IEnumerat
2017-01-17 15:50:18 2048
原创 【C#函数式编程】C#中的函数式编程(一) —— =>表达式
一、函数式编程 函数式编程,简单来理解,就是把函数当成是组成一个功能模块最小的单位。相对于之前接触的面向对象的思想,把类对象当成一个功能模块的组成部件,在函数式编程中把函数也当成一个可拆卸的对象。 二、C#中的Lambda表达式=> Labmda也称作匿名函数,在C#中我们通过一个简单的符号”=>”即可定义一个lamda表达式,下面分别针对不同的=>的使用方
2017-01-16 10:29:08 4892
原创 用flask开发个人博客(38)—— 使用MarkDown实现博客文章存储成富文本格式
一、MarkDown语法 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。Github中项目的MD文件就是用MarkDown语法进行编写,它内嵌支持Html,可以使用Html的大部分标签。我们使用构建博客表单body字段的PageDownFiled生成的是MarkDown格式的文本,在上一文中我们通过Flask-
2017-01-14 13:49:50 10163
原创 用flask开发个人博客(37)—— 使用Flask-pagedown实现博客文章预览的功能
一、引言 本文主要讨论的内容,是将我们写的纯文本的博客文章,使用Flask-pagedown模块,将文本转换成html富文本数据,并在浏览器上显示,类似于博客文章的预览功能。PageDown是用JavaScript实现的由文本到Html的转换程序,而Flask-pagedown是对PageDown的一个封装,把其集成到了Flask-WTF表单中。二、Flask-PageDow
2017-01-14 11:42:31 9087 1
原创 用flask开发个人博客(36)—— 使用SQLAlchemy对博客文章进行分页
我们在浏览某个博客网站时,如果博客文章过多,往往都进行了分页显示,比如CSDN中个人博客的首页显示。在flask中SQLAlchemy不但可以进行数据建模和数据查询等等,由于其支持分页查询,我们还可以利用其对我们的文章进行分页。一、创建博客数据模型 在介绍使用SQLAlchemy对博客进行分页之前,我们需要先创建博客的数据模型,并向数据库中插入试验用的博客的数据。我们将博客的
2017-01-12 23:39:24 4338
原创 网络编程(58)—— Windows下使用CSocket搭建回声服务端和客户端
CSocket是对CAsyncSocket的一个再次封装,它将CAsyncSocket这种异步不阻塞的socket封装成了同步阻塞的socket。它的实现原理其实很简单,我们应该留意到在CAsyncSocket中Accept、Send、Receive函数被定义成了虚函数:virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR*
2017-01-11 22:38:25 2049
原创 网络编程(57)—— Windows下使用CAsyncSocket搭建回声服务端和客户端
一、 引言 CAsyncSocket是MFC中对WSAAsyncSelect异步非阻塞通知IO的一个封装类。我们在《Windows下使用WSAAsyncSelect实现窗口处理socket消息》一文中讨论过WSAAsyncSelect的用法,知道它绑定一个窗口到一个socket,并注册了我们自定义的消息和需要监视的IO事件类型(FD_ACCEPT、FD_READ、FD_WRITE
2017-01-11 22:32:58 2221
原创 网络编程(56)—— Windows下使用IOCP构建socket服务端
一、完成端口对象 不同于IO重叠对象在IO完成时通过触发事件或者触发CompletionRoutine回调函数,IOCP模型将socket和完成端口对象(CompletionPort,简称CP对象)绑定,当IO操作完成时,会改变该对象的状态,而我们通过完成端口对象,便可以确认IO操作是否完成。 创建完成端口对象的API如下:HANDLE WINAPI Crea
2017-01-10 15:20:49 2435
原创 网络编程(55)—— Windows下使用WSASocket基于Completion Routine进行IO重叠
一、引言 上一文中我们介绍了使用基于事件进行IO重叠的方法,本文主要介绍另外一种,基于回调函数void CALLBACK CompletionRoutine(DWORD dwError,DWORDszRecvBytes,LPWSAOVERLAPPED lpOverlapped,DWORD flags)进行IO重叠。首先,我们先介绍一种线程的状态——alertable wait状态
2017-01-09 14:03:55 2576
翻译 【Python模块】functools —— 作用于可调用对象的高阶函数集合
英文原文出自:https://docs.python.org/2/library/functools.html functools 是一系列高阶函数的集合,这些函数可以接受其他函数作为参数或者返回其他函数。一般说来,凡是可被调用的对象,都可以当成这个模块的作用对象。 functools 模块定义了下面的一系列函数:functools.cmp_to_key(func)
2017-01-07 17:45:28 839
原创 【Python语法】Python中的三种装饰器语法
一、装饰器不带参,被装饰函数不带参from time import ctime def InsertTimestamp(f): def decorator(): strInfo='[%s] %s() called'%(ctime(),f.__name__) print strInfo return f() return dec
2017-01-07 10:50:01 776
原创 用flask开发个人博客(35)—— flask中的上下文处理器app_context_processor
app_context_processor在flask中被称作上下文处理器,借助app_context_processor我们可以让所有自定义变量在模板中可见,如下面的代码,我们将email作为一个变量在所有模板中可见:@main.app_context_processordef admin_email(): email='879651072@qq.com' return d
2017-01-06 22:48:47 14669
原创 网络编程(54)—— Windows下使用WSASocket基于事件进行IO重叠
一、引言 本文主要研究下Windows下的IO重叠技术。 何为IO重叠?按照它的定义,在同一个线程中,我们同时向多个目标socket发送数据或者从多个socket接收数据,而我们用于传递和接收的函数未等IO过程结束就返回,而数据的传递和接收工作完全交给了操作系统,在这个过程中针对目标socket的每个IO操作在时间片上都发生了重叠,这就是IO重叠,如下图所示:
2017-01-06 08:27:48 2309
原创 网络编程(53)—— Windows下使用WSAAsyncSelect实现窗口处理socket消息
一、引言 上一文中我们介绍了使用WSAEventSelect实现异步通知IO的方法,本文我们主要讨论下使用WSAAsyncSelect处理socket的方法。本文的主要目标,是创建一个带界面的回声服务端,接收并返回客户端传过来的字符串,并在界面上显示该字符串。为此,我们将采用MFC的编程环境,建立如下的对话框程序:二、WSAAsyncSelect函数
2017-01-05 08:23:08 3142
原创 用flask开发个人博客(33)—— 使用itsdangerous进行账户的确认
我们在某个网站进行开户时,往往会收到网站发过来的确认邮件,只有点击确认邮件里面的链接后,我们所开的账户才能生效。本文主要介绍在flask中进行这种确认机制的方法。一、定义邮件发送的方法send_email 首先,我们在email.py中定义一个发送邮件的方法send_email:from flask_mail import Messagefrom app import
2017-01-04 22:31:46 3822
原创 网络编程(52)—— Windows下使用WSAEventSelect实现异步通知IO
一、同步IO和异步IO 同步IO是指发生IO事件的时间点和相关函数返回的时间点一致。如使用send函数发送数据时,所有的数据发送到输出缓冲区后,send函数才会返回,这种IO方式就是同步IO。异步IO指函数先于IO事件返回。还是以send函数为例,调用send函数后其马上返回,而数据传送到输出缓冲区交给操作系统完成。这种IO方式就是同步IO。 什么是异步IO通知
2017-01-04 09:02:52 1250
原创 用flask开发个人博客(32)—— 进行表单字段的验证
一、引言 本文主要讨论FlaskForm中各个表单字段的限制方法。我们在定义表单对象时,往往需要处理很多细节功能,诸如限制字段的长度,填写的email要符合格式等等。FlaskForm中提供了很多限制表单字段的方法。下面,我们将提供几种常用的方法进行讨论。 为了方便进行试验,我们定义一个RegisterForm的表单类,并在该类中定义试验的字段。class
2017-01-03 23:28:16 6799
原创 网络编程(51)—— Windows下使用select进行IO复用
本文主要介绍在Windows系统下使用select搭建回声服务端的方法。在之前的《网络编程(16)—— IO复用技术之select》一文中我们介绍了在Linux使用Select进行IO复用的方法。本文对其原理不再详述,旨在通过对比使用加强对select的理解和应用。整个Windows版的select服务端的代码如下,稍后我们将对关键代码进行解释。// SelectServ.cpp : 定义控制
2017-01-03 08:40:20 4586 1
原创 用flask开发个人博客(31)——用flask_login管理用户的登录
一、flask_login的安装 本文主要介绍使用flask_login管理用户的登录和登出。flask_login的安装:pip install flask-login二、User模型继承UserMixin 使用flask_login进行用户的登录和登出管理,需要将我们的User模型继承flask_login的UserMixin基类:from f
2017-01-02 22:27:05 22171 2
原创 网络编程(50)—— 使用poll搭建回声服务端
一、 引言 本文主要介绍在linux中使用poll搭建回射服务端。我们在前面的文章中研究了使用select和epoll搭建服务端的方法。poll的用法和select类似,只不过用来描述操作符集合的是pollfd而非select的fd_set。Poll在Linux 2.5.44版本后被epoll取代,本文只为研究其用法。二、函数原型poll的函数原型如下:#includ
2016-12-31 12:14:53 1332
原创 错误处理(三)—— 剪贴板为空。 (异常来自......)
异常类型:System.Runtime.InteropServices.COMException ErrorCode = -2146823683 这种错误在Excel和Word之间进行复制和粘贴操作时经常出现,主要原因就是操作剪贴板过于频繁,导致里面的内容很多剪贴板响应不过来。解决方法是在每次复制之前先清空剪贴板即可:System.Windows.Form
2016-12-30 17:25:24 10210
原创 网络编程(49)—— epoll的条件触发和边缘触发
一、条件触发和边缘触发 在《网络编程(21)—— 使用epoll进行IO复用》一文中,我们介绍了在linux平台下使用epoll进行IO复用的方法。本文主要介绍epoll中进行IO复用的两种触发方式:条件触发和边缘触发。1.1 什么是条件触发和边缘触发? epoll进行IO复用的基本原理我们可以概括如下:1、 使用epoll_create()创建用来保存e
2016-12-30 17:15:42 3436 3
原创 网络编程(48)—— windows平台下的四种线程同步技术(二)
四、内核同步对象—— 互斥(Mutex) 内核线程同步对象包括互斥、信号量和事件,它们使用时存在很多共通之处。下面先介绍在Windows平台利用互斥进行线程的同步。HANDLE WINAPI CreateMutex(__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,__in BOOL bInitialOwner,__in_
2016-12-29 08:16:46 1089
原创 网络编程(47)—— windows平台下的四种线程同步技术(一)
一、用户模式和内核模式 Windows操作系统在运行时,存在以下两种模式:用户模式:是运行应用程序的基本模式,不能访问硬件,且访问的内存的范围也有限制。内核模式:是操作系统运行的基本模式,可以访问硬件,访问的内存范围无限制。 Windows的程序在运行时,往往频繁的在用户模式和内核模式之间切换。以多线程程序为例,我们所创建的线程属于操作系统,在创建线
2016-12-28 09:01:31 1457
原创 网络编程(46)—— windows内核对象的两种状态
一、 什么是内核对象? 我们知道进程、线程、文件、互斥、信号量这些都是操作系统级别的资源。我们在使用这些资源时,实际上都是由操作系统进行创建和管理的。操作系统为了管理这些资源,会在其内部创建一个数据块,也可以理解为一个结构体对象。这个数据块就是内核对象。二、 内核对象有哪两种状态? 内核对象的状态共有两种:signaled(有信号)状态和non-sign
2016-12-27 08:52:05 1811
转载 网络编程(45)—— windows平台下销毁线程的四种方法
原文出自:http://www.cnblogs.com/goalone1985/articles/2126420.html终止线程运行 若要终止线程的运行,可以使用下面的方法: • 线程函数返回(最好使用这种方法)。 • 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。 • 同一个进程或另一个进程中的线程调用 TerminateThre
2016-12-26 08:46:42 2451
原创 Win32 SDK基础(10)—— 几种常见的Windows消息处理
一 引言 本文主要介绍几种Windows常见的消息的处理,在《Win32 SDK基础(8)—— Windows消息机制》中,我们介绍了WM_CREATE消息的处理,在窗口创建之前,我们利用消息处理函数弹出了一个MessageBox,本文在此基础之上,介绍WM_DESTROY、WM_SYSCOMMAND、WM_QUIT、WM_SIZE等其它常见的Windows消息。首先,我们引入在
2016-12-25 23:35:24 3665
原创 用flask开发个人博客(30)—— 用WerkZeug实现密码的加密存储
一 引言 我们在进行用户的注册时,往往需要将用户输入的明文密码加密成密文进行存储。flask中使用WerkZeug模块可实现这一功能。WerkZeug中有两个方法:generate_password_hash(password)和check_password_hash(hash,password)。前者用来将明文密码加密,返回加密后的密文,用来进行用户注册。后者将明文和密文进
2016-12-24 12:22:08 3433
原创 网络编程(44)—— windows平台下创建线程的四种方法(三) 工作者线程和CWinThread线程类管理
四、AfxBeginThread4.2 工作者线程 工作者线程类似我们之前介绍的用CreateThread创建的线程,它在后台处理数据,和主界面线程共享消息循环。它用AfxBeginThread的重载版本创建,函数原型如下:CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pPar
2016-12-23 08:37:51 4337
原创 网络编程(43)—— windows平台下创建线程的四种方法(二)之用户界面线程
四、AfxBeginThread 在介绍使用AfxBeginThread进行多线程编程之前,我们先介绍下MFC中两种线程的概念,这也是在MFC编程中无法绕过的两种类型的线程 —— 用户界面线程和工作者线程。4.1 用户界面线程 用户界面线程,顾名思义,它是一种可以管理UI界面的线程。它含有自己的消息循环,可以处理UI界面的各种消息。最常见的用户界面线程,就是
2016-12-22 08:47:57 1551
mock框架插件 mod.dll
2018-09-29
Win7 64位安装DNS root.zone等配置文件
2016-12-10
MICROSOFT SILVERLIGHT 4从入门到精通
2016-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人