学习python(二)

学习要有成就感,才有动力。
环境搭建成功后,一开始就使用别人的框架,不太理解框架的流程,自己建一个web框架吧,下面搭建一个自己的WEB项目。
我们开始做一个web项目。
apache 已经是一个web服务器了,我们主要工作是响应浏览器,反馈出我们需要的东西。
1.main.py中我们能够得到浏览器输入地址后的得到的内容。

{‘mod_wsgi.listener_port’: ‘80’, ‘mod_wsgi.listener_host’: ‘’, ‘CONTEXT_DOCUMENT_ROOT’: ‘/var/www/html’, ‘SERVER_SOFTWARE’: ‘Apache/2.4.34 (Ubuntu)’, ‘SCRIPT_NAME’: ‘/main’, ‘mod_wsgi.enable_sendfile’: ‘0’, ‘mod_wsgi.handler_script’: ‘’, ‘SERVER_SIGNATURE’: ‘

Apache/2.4.34 (Ubuntu) Server at
127.0.0.1 Port 80
\n’, ‘REQUEST_METHOD’: ‘GET’, ‘PATH_INFO’: ‘/’, ‘SERVER_PROTOCOL’: ‘HTTP/1.1’, ‘QUERY_STRING’: ‘’, ‘wsgi.errors’: <mod_wsgi.Log object at 0x7f0ff3d00670>, ‘HTTP_USER_AGENT’: ‘Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0’, ‘HTTP_CONNECTION’: ‘keep-alive’, ‘SERVER_NAME’: ‘127.0.0.1’, ‘REMOTE_ADDR’: ‘127.0.0.1’, ‘mod_wsgi.request_handler’: ‘wsgi-script’, ‘apache.version’: (2, 4, 33), ‘wsgi.url_scheme’: ‘http’, ‘PATH_TRANSLATED’: ‘/var/www/html/index.html’, ‘SERVER_PORT’: ‘80’, ‘mod_wsgi.thread_id’: 1, ‘wsgi.multiprocess’: True, ‘SERVER_ADDR’: ‘127.0.0.1’, ‘DOCUMENT_ROOT’: ‘/var/www/html’, ‘mod_wsgi.process_group’: ‘’, ‘mod_wsgi.thread_requests’: 0L, ‘mod_wsgi.total_requests’: 0L, ‘mod_wsgi.request_id’: ‘luudC6JAG/Q’, ‘SCRIPT_FILENAME’: ‘/var/www/html/main.py’, ‘SERVER_ADMIN’: ‘webmaster@localhost’, ‘mod_wsgi.ignore_activity’: ‘0’, ‘wsgi.input’: <mod_wsgi.Input object at 0x7f0ff3d58880>, ‘HTTP_HOST’: ‘127.0.0.1’, ‘CONTEXT_PREFIX’: ‘’, ‘mod_wsgi.callable_object’: ‘application’, ‘wsgi.multithread’: True, ‘HTTP_UPGRADE_INSECURE_REQUESTS’: ‘1’, ‘REQUEST_URI’: ‘/main/’, ‘HTTP_ACCEPT’: ‘text/html,application/xhtml+xml,application/xml;q=0.9, /;q=0.8’, ‘mod_wsgi.path_info’: ‘/’, ‘wsgi.file_wrapper’: <type ‘mod_wsgi.FileWrapper’>, ‘wsgi.version’: (1, 0), ‘GATEWAY_INTERFACE’: ‘CGI/1.1’, ‘wsgi.run_once’: False, ‘mod_wsgi.script_name’: ‘/main’, ‘REMOTE_PORT’: ‘38630’, ‘HTTP_ACCEPT_LANGUAGE’: ‘zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2’, ‘REQUEST_SCHEME’: ‘http’, ‘mod_wsgi.version’: (4, 5, 17), ‘mod_wsgi.script_start’: ‘1553309477249490’, ‘mod_wsgi.application_group’: ‘127.0.1.1|/main’, ‘mod_wsgi.script_reloading’: ‘1’, ‘mod_wsgi.request_start’: ‘1553309477235606’, ‘HTTP_ACCEPT_ENCODING’: ‘gzip, deflate’} -----------------

2.制作控制访问的网址,就必须对输入网址内容进行解析。
现我们解析env[‘PATH_INFO’]
我们约定网址结构http://120.0.0.1/main.do?valuename=value
地址中 main.do 理解为需要加载main类,do为调用main类中的方法。
valuename=value 需要输入的变量名和变量值。

def application(environ,start_response):
    status = '200 OK'
    output = 'Hello World!'+str(environ)
    out = outclass(environ)
    output = out.echo()
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [output]

class outclass:
    def __init__(self, environ):
        self.env = environ
        #self.mehtod=self.env['REQUEST_METHOD']
        self.path=self.env['PATH_INFO']
    def echo (self):
        #import mytest
        url=self.load()
        out = self.load_to_do(url[0],url[1],a=1,b=2)
        #out ='bbbb' #str(index.index(abc=1,dd=2).main())
        return out

    def load(self):
        str=self.path[1:]
        my_data = str.split('/')
        my_class=my_data[0].split('.')
        return my_class



    def load_to_do(self,my_file_py, todo='main', **kw):
        import importlib ,sys
        sys.path.append("\var\www\html\main") 
        try:
            _load_class = importlib.import_module('modle.'+my_file_py)
        except ImportError,x:
            st=str(x)
            return 'load ' + my_file_py + '.py unsuccess!'+st
        else:
            _in_class = getattr(_load_class, my_file_py)
            _do = _in_class(**kw)
            try:
                _doit = getattr(_do, todo)
            except AttributeError:
                return 'in [' + my_file_py + ']not find [' + todo + '] function'
            else:
                return _doit()

在当前目录下建立了modle目录,并建index.py

class index:
    def __init__(self,**kw):
        self.getdata=kw
    def main(self):
        abc=str(self.getdata)
        return abc

在浏览器中就是报类不能加载“No module named modle.index”,即:在引入其他模块时 执行: _load_class = importlib.import_module(‘modle.’+my_file_py)总会出错,在编辑器中调试输出正常,不知为什么??有高手吗????

问题解决了,引入模块时搜索路径不正确导致不能查询到该模块,加入sys.path.append("\var\www\html\main") 立刻解决,搞了2天。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值