找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2981|回复: 1

[代码与实例] ubuntn+apache2+wsgi+python2 实战练习碰到的问题

1

主题

2

帖子

2

积分

贫民

积分
2
zhoujun 发表于 2019-3-26 23:14:05 | 显示全部楼层 |阅读模式
        环境搭建成功后,一开始就使用别人的框架,不太理解框架的流程,下面搭建一个自己的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': '<address>Apache/2.4.34 (Ubuntu) Server at
   127.0.0.1 Port 80</address>\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=vaule  需要输入的变量名和变量值。

    def application(environ,start_resp**e):
        status = '200 OK'
        output = 'Hello World!'+str(environ)
        out = outclass(environ)
        output = out.echo()
        resp**e_headers = [('Content-type', 'text/plain')]
        start_resp**e(status, resp**e_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
            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)总会出错,在编辑器中调试输出正常,不知为什么??有高手吗????我是新手,请多指教!
回复

使用道具 举报

2

主题

11

帖子

11

积分

贫民

积分
11
xiaochengxu 发表于 2019-3-27 14:50:58 | 显示全部楼层
沙发  顶一下

大量招聘python程序员兼职开发 加 QQ 308292805 备注python
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表