- 2.8节: Mixin模式
- 已经是最后一篇了
广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
2.9.1 MVC模式
MVC是一种框架设计模式,Tornado框架 ,Django框架(MTV模式)等就是基于MVC的思想来实现的。
M即Model, 指业务模型, 对数据的存储和操作进行了抽象
V即View, 指界面视图,用来处理数据的显示
C即Controller, 指控制器,负责处理具体的业务逻辑,接受用户的输入并调用模型和视图来处理用户的需求
2.9.2 理解MVC
MVC模式将软件解耦为模型,视图,控制器三大模块,每个模块各司其职,这样方便维护和重用,也便于团队成员进行合作:前端工程师专注于界面的显示和交互,后端工程师专注于处理业务逻辑。
2.9.3 源码实现
# __author__ = 薯条老师,微信公众号:薯条编程 """ MVC模式将软件解耦为模型,视图,控制器三大模块,每个模块各司其职,这样方便维护和重用 """ from urllib.parse import urlparse import abc """ (1) 定义抽象基类Model,表示MVC中的Model:模型对数据的存储和操作进行了抽象 """ class Model(abc.ABC): @classmethod def get(cls, **kwargs): pass """ (2) GoodsModel是一个具体的模型子类,封装了商品数据的存储和获取操作 """ class GoodsModel(Model): GOODS = { 1: {"name": "洗发水", "price": 22}, 2: {"name": "牙膏", "price": 15}, 3: {"name": "宠物绳", "price": 29}, 4: {"name": "面包", "price": 16}, 5: {"name": "啤酒", "price": 8}, 6: {"name": "咖啡", "price": 30}, } @classmethod def get(cls, **kwargs): if "pk" in kwargs: return GoodsModel(kwargs["pk"]) def __init__(self, pk): self.__data = [] if pk not in self.GOODS else [self.GOODS[pk]] @property def data(self): return self.__data """ (3) 定义抽象基类View,表示MVC中的View,提供了数据显示的抽象接口 """ class View(abc.ABC): @staticmethod def show(data): """ """ """ (4) GoodsView是View的具体子类,负责将商品数据以表格的形式来展示 """ class GoodsView(View): @staticmethod def show(goods): """ :param goods: e.g:{"name": "洗发水", "price": 22} :return: """ tr = "+" + "-" * 5 + "+" + "-" * 16 + "+" + "-" * 10 + "+" heading = "|{:^8s}|{:^18s}|{:^9s}|".format("id", "商品名", "售价") print(tr + "\n" + heading + "\n" + tr) for id_, data in enumerate(goods): print("|{0:^8s}|{1:{3}^8s}|{2:^10s}|".format(str(id_+1), data["name"], str(data["price"]), chr(12288))) print(tr) """ (5) 定义抽象基类RequestHandler,表示MVC中的控制器, 负责处理具体的业务逻辑,接受用户的输入并调用模型和视图来处理用户的需求 """ class RequestHandler(abc.ABC): @abc.abstractmethod def get(self, **kwargs): pass """ (6) GoodsDisplayHandler用来处理商品数据显示的具体业务逻辑 """ class GoodsDisplayHandler(RequestHandler): def get(self, **kwargs): if "goods_id" in kwargs: goods_model = GoodsModel.get(pk=int(kwargs["goods_id"])) GoodsView.show(goods_model.data) def __call__(self, **kwargs): method = None if "method" not in kwargs else kwargs["method"] if method == "GET": self.get(**kwargs) if __name__ == "__main__": urlpatterns = {"/goods/": GoodsDisplayHandler} url = "http://chipscoco.com/goods/?goods_id=1" parse_result = urlparse(url) short_url = parse_result.path params = {} for item in parse_result.query.split("&"): param = item.split("=") params[param[0]] = param[1] if short_url in urlpatterns: handler = urlpatterns[short_url] params["method"] = "GET" handler()(**params)
2.9.4 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料:
- 2.8节: Mixin模式
- 已经是最后一篇了