一个简单额Python MVC框架(3)

MVC中的M已经介绍完了,C和V都是用户代码,先看几个工具类:
A)全局变量类,用户定义全局变量和一个用于产生普通对象的类型:

gl_A=1
gl_B=‘a‘
class Obj:
    def __init__(self):
        self.Obj=self

如果需要,大家可以定义自己的全局性变量。
B)OsHelper.用于动态加载模块,获取类型

import imp
import inspect
import uuid
#加载控制模块和类,读取文件,获取GUID
class OsHelper:
    @staticmethod
    def LoadModule(controllerName):
        return imp.load_source(controllerName,controllerName+‘.py‘)
    @staticmethod
    def LoadClass(module,classname,ignorecase=True):
        if ignorecase :
            theMembers = inspect.getmembers(module)
            for theM in theMembers:
                if theM[0].upper()==classname.upper():
                    return theM[1]
        else:
            return getattr(module,classname)
    @staticmethod
    def GetGuid():
        return uuid.uuid1().__str__().replace(‘-‘,‘‘)
    @staticmethod
    def ReadFile(filepath,AEncoding=‘utf-8‘):
        if AEncoding==None:
            AEncoding=‘utf-8‘
        theFile = open(file=filepath,encoding=AEncoding)
        try:
            return theFile.read()
        finally:
            theFile.close()

C)HtmlHelper模块,主要提供html处理的类。这里提供了一个自动根据表单域给实体赋值的方法和Cookie处理的类。大家可以根据自己的需要增加自己的方法。

from os import environ
import cgi, cgitb
from ListAttr import ObjOpt
class HtmlTools:
    #自动根据表单域给对象赋值
    @staticmethod
    def TryUpdate(obj,form):
        theProperties = ObjOpt.GetPropertyNames(obj)
        theObjName = ObjOpt.GetClassName(type(obj))
        theRet={}
        if theProperties != None:
            for theP in theProperties:
                try:
                    theVal =form.getvalue(theP)
                    if theVal!=None:
                        setattr(obj,theP,theVal)
                    else:
                        theVal =form.getvalue(theObjName+‘.‘+theP)
                        if theVal!=None:
                            setattr(obj,theP,theVal)
                    if theVal!=None:
                        theRet[theP] = theVal
                except Exception:
                    return theRet
        return theRet
    #获取Cookie信息,字典方式返回.
    @staticmethod
    def GetCookies(Environ):
        theRet={}
        theCookieStr=Environ.get(‘HTTP_COOKIE‘)
        if theCookieStr!=None:
            for cookie in theCookieStr.split(";"):
                (key, value ) = cookie.split(‘=‘)
                theRet[key]=value
        return theRet

时间: 2024-10-16 02:56:22

一个简单额Python MVC框架(3)的相关文章

一个简单的Python MVC框架(4)

前面都是准备,这里是整个Web Mvc框架的核心地方,稍微多介绍一下.核心类是一个叫Dspth的模块.这里我没有处理路由,一个是不太熟,另外一个是主要是体会架构.我用的路由规则如下:1)用URL的地址参数进行路由,有两个参数,一个是ctr,表示控制类,一个是act表示执行的方法2)所有执行方法都约定参数格式如下self,Environ,CGI,CGITB,Form,Cookies,SessionId,*Args当然,真正做框架的时候,可以把Environ,CGI,CGITB,Form,Cooki

一个简单的python MVC框架(1)

因为买了本机器学习的书是python的,所以学习了一下python,就用python做了一个简单的web开发的mvc小框架.整个框架分为实体层,数据访问层,业务基类层,Web请求转发层,控制层和视图层.当然也包括一些辅助性工具类.下面一一介绍,希望对跟我一样初学python的有点帮助:1)实体层      由实体基类和用户实体类组成.实体类可以由数据库自动生成,提供了一个DbTools,可以自动生成规则的实体.下面是实体基类: import threading #用户错误类,用于抛出自定义的异常

一个简单的Python MVC框架(2)

2)数据库访问层数据访问层是与数据库进行交互的接口,这里我仅仅实现了mysql的访问接口.下面是代码: import pymysql import os #用于测试 class EmptyModel: def __init__(self,name=None): self.TableName=name #数据库帮助基类,相当于接口.其实对于python这种语言,这个类完全没必要存在. #不过对于多种数据库支持时,还是有点用. #注意:这里的参数是格式化到字符串,无法防止SQL注入.为了防止SQL注

从零构建一个简单的 Python Web框架

为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何工作的很感兴趣,因为你想要成为一位更好的 web 开发者. 接下来的笔墨将着重于最后一点.这篇文章旨在通过对设计和实现过程一步一步的阐述告诉读者,我在完成一个小型的服务器和框架之后学到了什么.你可以在这个代码仓库中找到这个项目的完整代码. 我希望这篇文章可以鼓励更多的人来尝试,因为这确实很有趣.它让

一个简单的python线程池框架

初学python,实现了一个简单的线程池框架,线程池中除Wokers(工作线程)外,还单独创建了一个日志线程,用于日志的输出.线程间采用Queue方式进行通信. 代码如下: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = "pandaychen" 5 6 import Queue 7 import sys 8 import os 9 import threading 10 import time 11

如何设计一个易用的MVC框架

导言 把一件简单的事情做复杂很容易,把一件复杂的事情做简单却不易.在计算机的世界里, 冯.诺依曼把复杂的电脑简化为:存储器,控制器,运算器和I/O设备; 丹尼斯·里奇把晦涩的汇编语言简化为258页的<C程序设计语言>; 詹姆斯高斯林把繁琐的跨平台编码简化为256条字节码指令: 对我们大部分人而言,把简单的事情做简单就足够了. 关于框架 框架是对某一类共通业务的封装,框架设计应该遵循几个基本的原则:1 易用性 2 稳定性3 扩展性,框架从来都是给别人用 的,框架的学习成本与他的复杂度成正比,如果

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

从零开始实现一个简易的Java MVC框架(三)--实现IOC

Spring中的IOC IoC全称是Inversion of Control,就是控制反转,他其实不是spring独有的特性或者说也不是java的特性,他是一种设计思想.而DI(Dependency Injection),即依赖注入就是Ioc的一种实现方式.关于Ioc和DI的具体定义和优缺点等大家可以自行查找资料了解一下,这里就不详细赘述,总之spring的IoC功能很大程度上便捷了我们的开发工作. 在实现我们的Ioc之前,我们先了解一下spring的依赖注入,在spring中依赖注入有三种方式

作业1开发一个简单的python计算器

开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致 hint: re.search(r'\([^()]+\)',s).group() '(-