python制作web数据库系统_用Python打造在线盈利的项目-Web应用

前言

好!沉寂了将近半年的时间,我将继续告诉大家如何用Python来实现一个Web应用!这个Web应用是基于这里的教程发展而来!有兴趣的Python朋友们可以到那里去看看!

在这篇教程里,我希望大家能够学到编写Web应用的通用思想,而不是仅仅只学会了如何实现这个Web应用。因为这个Web应用还与RequestRelayer系统互联了,所以这个Web应用不是一个孤立的系统。这篇文章里讲述的内容与之前的文章所讲述的内容形成了最后的系统,所以读者们最好先去阅读之前的文章,以便从整体来把握Python,加深我们对Python的认识。以下便是之前的姐妹篇:

那么让我们通过Python来玩转Web应用吧!

这是Python学习系列文章的末篇,当你学完这个系列的文章之后,我希望你能学到以下知识点:上线一个Web应用需要依赖哪些基本组件,以及每个组件的作用

这个Web应用提供了哪些功能,以及这个Web应用属于基础组件中的哪一部分

研发一个Web应用之前需要知道基础知识

分解这个Web应用

各个击破Web应用的每一组成部分

自动化部署一个Web应用需具备的知识

把前瞻,代理服务,Web应用3篇文章讲述的内容放在一起学习Python,并用Python来盈利

内容目录1.回顾过去1.1 情景回顾

1.2 认识SS Controller

2.SS Controller模块分解2.1 SS Controller如何与Nginx,gunicon,Mysql配合

2.2 SS Controller都有哪些模块构成

3.SS Controller对接RequestRelayer3.1 用户如何与SS Controller交互

3.2 SS Controller如何与RequestRelayer交互

4.自动化部署SS Controller与总结4.1 通过自动化提高你的开发效率

4.2 SS Controller,RequestRelayer完结

1.回顾过去

1.1 情景回顾

在之前的前瞻、代理服务这2篇文章中,我曾经在图片中提到了SS Controller这个模块,以便让大家从整体上了解整个系统是如何运作的。而在这篇文章中,我们将着重分析SS Controller是如何实现的,因此希望大家能通过下图快速回顾一下整个系统,以及搞清楚SS Controller在整个系统中哪一个位置(绿色的方块就是 SS Controller了)!

1.2 认识SS Controller

SS Controller是一个用Python实现的Web app。用户打开浏览器,输入这个Web app所绑定的域名(比如http://www.google.com)就可以访问这个Web app,并且通过这个Web app来订购代理服务。因此我们需要将这个Web app用Python实现,并且能够在我们本地计算机上正常运行。当这个Web app实现好了以后,我们就得考虑把它暴露在互联网上,让互联网用户能够在任何时间任何地点都能访问到。

因此,思想上我们需要知道,开发一个Web app的步骤一般如下:

1.在自己的计算机上安装好开发工具(VSCode,Python2.7);编写好Web app程序;测试自己的Web app,确保正常运行之后方可考虑下一步

2.当我们写好Web app的程序代码之后,需要考虑租用一个公网机器或者VPS,我们之所以用用公网机器或VPS的原因在于我们需要让人能够访问到我们的Web app。此外我们需要自己部署Web服务器等生产环境。

所以我们日常的研发工作中,除了编写代码,调试代码之外,我们还需要经常与远程VPS或者公网机器打交道!那么这个时候我们就需要通过自动化部署工具,有效率的帮助我们将本地计算机上的程序更新到远程的VPS或者公网机器。

以上便是我们对Web app简单的认识!接下来我们要搞清楚我们这个Web app要做什么!

SS Controller要做的事情可以分为以下几部分:

1.展示官网的服务信息

2.提供用户注册,购买代理服务的功能

3.提供管理员管理用户的功能

4.提供Paypal支付功能

5.提供管理RequestRelayer功能

也就是说用户可以到这个Web app上订购代理服务,查看服务信息,管理员可以对代理服务器进行日常管理(添加服务器,删除服务器之类的活儿)。

2.SS Controller模块分解

2.1 SS Controller如何与Nginx,gunicon,Mysql配合

仅仅是实现一个Web app是不够的,因为你无法让大家有效的访问你写好的Web app。因此我们需要借助于别人的系统,来让我们的Web app让大家所用。既然是一个Web app,那么我们就要借助Web服务器 Nginx来帮助我们处理http(s)请求。如果你不使用Nginx,那么你就要自己写处理http(s)协议的系统,光是理解http(s)这套协议就会让你望而生畏,彻底绝望,因此一般情况下我们会使用别人已经写好的模块,而把精力放在我们感兴趣的业务上面,也就是SS Controller。

在编写服务器端的程序时,我们需要考虑一个问题是:如何异步处理每一个请求?那么这个问题的解决办法也是要依赖一些模块,在这里大家可以考虑gevent来帮忙处理异步IO。

此外,我们需要考虑的一个问题是Nginx如何与SS Controller交互?这时,我们就必须依赖实现WSGI协议的系统,其中有一个系统是gunicon,因此我们也需要依赖gunicon。

最后,大家想想,我们的Web app要处理很多数据,那么我们就需要有一个数据库,也就是我们的Mysql了,当SS Controller需要操作Mysql的时候,我们需要借助mysql-connector-python。

当我们把数据处理好之后,我们就需要通过后端jinja根据template生成html文件,返回给前端或者浏览器。

以上是服务端需要准备的东西,可是一个正常的Web app会让大家使用,一般情况大家会在浏览器中使用你的Web app。这个时候我们就要考虑提供一个UI界面。因此涉及到UI界面的问题,我们又得依赖很多三方库。

首先,我们需要一个库叫Vue,方便我们以MVVM的设计模式去设计Web app的前端系统。

此外,我们需要一个CSS样式库,Uikit,方便我们快速布局UI界面上的元素。

好了,我们来总结一下我们到底需要别人的什么东西:

后端:nginx,gunicon,gevent,mysql-connector-python,jinja,mysql

前端:vue,uikit

如果以上这些东西都要自己写,你会发现你将寸步难行。因此我们要善于利用别人的东西来加快我们研发的步伐!

2.2 SS Controller都有哪些模块构成

我们已经了解了上线一个Web app所需的知识,那么这一节让我们来看看SS Controller要完成的业务逻辑吧!

任何一个Web app的研发都需要一个框架去支撑,那么让我们先来了解了解上图的框架。由上图可以看到,在实现任何Web app的时候,我们需要设计这个Web app的框架,以便我们在这一个框架下面有效的添加我们的处理逻辑。

这个框架由由以下几个部分组成:

1.user_interceptor:每一个用户访问Web app的时候必定会经过的一层

2.manage_interceptor:每一个管理员用户访问Web app的时候必定会经过的一层

3.urls:这个是将http(s)请求的路径映射为对应的处理函数的一层

4.orm:这个是将class映射到关系型数据库的一层

5.db:这个是Web app访问数据库的一层

其中1,2,3我们把它们划分到web框架,4就是我们的orm框架,5就是db框架

我们划分了3个框架的目的是让大家知道其实一个Web app好多时候都是这么划分的,此外我们也能够从整体上了解这个Web app。

好了,有了整体把握之后,我们来具体了解1,2,3是如何在代码里体现出来的。看看下图:

我们会编写一个def wsgi(env, start_response)的函数,这个函数将会接收来自gunicon的参数(通过env拿到,这个env是一个dict),然后经过处理得到的一个html页面返回给gunicon,并且通过调用start_response返回http状态信息。gunicon得到html页面以及http状态信息之后将2者组合在一起,返回给Nginx,紧接着Nginx把http响应返回给浏览器。

我们应该这么理解上图:

浏览器发送一个http(s)请求,经过若干层后,最终会到达你的第一层wsgi,紧接着会经过一层user_interceptor来提前处理用户的Cookie信息,接着会经过manage_interceptor来判断是否是管理员,接着会在urls里找到对应的handler来进行处理,最终处理结果会传递给template_engine来生成html页面返回给浏览器。

以上便是web这个框架要做的事情,此外我们也可以借助其它框架比如Flask!接下来我们将来了解一下orm这个框架。

我们在平时编写业务逻辑的时候少不了要与model打交道,所以你会发现一大堆Model,那么如果我们创建一个Model的实例,我们能不能把这个model的实例方便的存储到数据库里?答案是当然可以!ORM就是干这个事情的!所以我们需要自己写一个ORM的框架,当然你也可以用别人的框架比如SQLAlchemy。下图就是构成ORM的组件

首先我们要定义各种Field,这些Field对应于数据库的字段类型以及字段名称,其次我们需要定义一个基础的Model类,这个类是实现ORM的关键。Model用到了Python的metaclass特性,简单的说,metaclass特性允许我们在Python运行过程中创建class的定义。

举例说明:

上图定义了User Order PC_Machines三个class,这三个class用到了类属性(类型为各种Field),通过继承Model之后每个类在实例化一个实例的过程中,会因为ModelMetaclass动态的根据User,Order,PC_Machines等定义创建出每个类自己的定义。

有了ORM框架,你发现我们虽然把Model与数据库映射了,但是你发现上图根本没有数据库相关的模块!那么接下来我们将了解db这个框架所在位置以及它的构成,先看下图:

我们看到其实Model这个class已经引用了db框架!而且db框架向外提供了6个接口(insert,update等)。所以也就不难理解ORM连接了db框架的同时也向上层暴露了Model以便定义自己的类型。这样一来,上层就可以实例化任何实例,然后调动以上6个接口,把数据存到数据库,或者从数据库取数据!

让我们来把web,orm,db框架放到一起理解!浏览器发起http(s)请求,输入到web框架中,由web框架根据请求的url到urls中找到该url对应的处理函数,在这个处理函数中你会生成User或者Order实例,然后将这个实例借助ORM中的Model,Model借助db中的insert,最终将数据存储到数据库中,最后再把处理函数处理的结果以dict的格式返回到template_engine中,由template_engine生成html页面,最后返回给浏览器。

3.SS Controller对接RequestRelayer

3.1 用户如何与SS Controller交互

SS Controller的用户分为2类:购买服务的用户和管理员用户

对于购买服务的用户,我们要提供以下几个功能(通过user_orders.html提供):用户注册

用户选择套餐类型

用户选择服务节点

用户创建订单

用户通过Paypal支付订单

对于管理员用户,我们提供以下几个功能(通过manage_blog_list.html提供):包含购买服务用户的所有功能

添加/删除服务节点

添加/删除用户订单

切换用户服务信息

为用户续费

因此我们需要设计2个html页面,一个页面叫user_orders.html;另外一个页面叫manage_blog_list.html。

3.2 SS Controller如何与RequestRelayer交互

SS Controller与RequestRelayer都是用Python实现的,同时都是运行在不同VPS上的应用。因此要完成SS Controller与RequestRelayer之间的交互,我们必须使用Socket,而且为了确保通信速度,我们选择UDP协议进行交互。在这2个系统之间的交互中,RequestRelayer一直都是被动的,通俗的说SS Controller让RequestRelayer做啥都行,只要RequestRelayer提供对应的功能。有了以上概念之后我们就应该清楚我们得为SS Controller编写一个模块,这个模块专门用于对接RequestRelayer!同时由于两个不同的模块之间需要跨Internet交互,那么为了不让信息明文传播,我们需要为SS Controller添加加密模块。以下便是完成SS Controller与RequestRelayer交互所需要完成的任务。

1.ssManager对接RequestRelayer

既然SS Controller通过ssManager来控制RequestRelayer,那么我们就要考虑SS Controller都有哪些业务逻辑与RequestRelayer相关,因此来定义ssManager需要提供哪些接口给SS Controller。以下就是ssManager需要为SS Controller提供的接口:

2.encrypt加密模块

加密简单的说就是为一个明文通过一个加密算法,得到一个密文。而加密的算法又有很多,我们这里就用aes-256-cfb加密即可,我们只要知道这个加密算法具备流加密特性(加密解密的最小单位是字节)。因此我们只需要让encrypt提供两个函数即可,一个是加密,一个是解密。

4.自动化部署SS Controller与总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值