如果你做的项目是偏向中小型的话,MTV或者MVC已经足够支撑起整个项目,而如果你做的项目比较大大话,或者说可能以后的业务量很大的话,那你就需要用到四层架构的思想了,那么我们就各自分析下俩框架的结构。
1、MVC
MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其中:
M 管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。
C 接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。
V 负责把数据格式化后呈现给用户。
2、四层框架
我们通常所说的四层框架,实际上是DAO层、Service层、Controller层、View层这四层的相互组合形成。
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口
Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类
Controller层:Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程
View层 : 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示
UI--->Service---->Model------>Repository
验证码
验证码原理在于后台自动创建一张带有随机内容的图片,然后将内容通过img标签输出到页面
安装图像处理模块:
pip3 install pillow
#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web import io import check_code li = [] class CheckCodeHandler(tornado.web.RequestHandler): def get(self): mstream = io.BytesIO() img, code = check_code.create_validate_code() li.append(code) #这里可以保存到session中 img.save(mstream, "GIF") self.write(mstream.getvalue()) print(code) class LoginHandler(tornado.web.RequestHandler): def get(self): self.render('login.html',status="") def post(self, *args, **kwargs): user = self.get_argument("user",None) pwd = self.get_argument("pwd",None) mima = self.get_argument("mima",None) if user == "alex" and pwd == "123" and mima.upper() == li[0].upper(): #不区分大小写 self.write("登录成功") else: # self.redirect("/login") self.render("login.html",status = "验证码错误") settings = { 'template_path': 'tpl', 'static_path': 'static', 'static_url_prefix': '/static/', 'cookie_secret': 'aiuasdhflashjdfoiuashdfiuh', } application = tornado.web.Application([ (r"/login", LoginHandler), (r"/check_code", CheckCodeHandler), ], **settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()