美文网首页互联网科技女猿1024
从Python到Apache再到CGI

从Python到Apache再到CGI

作者: 代艳霞 | 来源:发表于2019-08-27 22:06 被阅读0次

    三天学完Python的我,没有想到一个CGI让我研究了两天,没有大牛带路的日子,我是要记录一下自己成长的过程了。也最终明白了一个道理,坚持很重要。。。。虽然我是前端,可是知识没有边界。。。。

    目录


    • 一、Apache安装和启动
    • 二、CGI启动

    内容


    一、Apache安装和启动(windowS)

    1. 下载地址:Apache

    2. 根据自己的电脑系统安装相应的版本,如图:


      下载地址
    3. 修改配置文件httpd.conf,具体地址,在apache安装目录里面如下图:

      配置文件地址
      • 修改默认目录,将SRVROOT默认的c:/Apache24,修改为apache24的安装目录,以我自己的安装为例:
        修改根目录地址
        地址应该是:D:/httpd-2.4.41-win64-VS16/Apache24写法如下:
        SeverRoot
      • 修改端口号如下图:


        端口号1
        端口号2
    4. 启动服务,找到bin目录下的ApacheMonitor.exe,双击,如图:

      启动服务
    5. 打开浏览器,如果显示如下效果,证明服务启动成功,效果如图:


      服务启动成功

    自己的测试文件应该如何启动:
    文件存放位置为htdocs,建立自己的测试文件hello.py,如下图:

    文件目录

    至此,apache安装并启动成功。

    二、CGI启动
    CGI的文件存放目录为 apache24 下面的cgi-bin,如图所示:

    CGI目录

    在此目录下,我新建了dyx.cgi测试文件,文件内容如下:

    CGI文件内容

    之后我们按照配置的路径,在浏览器打开文件,效果如下:


    CGI启动失败

    然后我们去查看一下log日志:目录为apache24下面的logs文件夹,如图:

    Logs路径

    提示如下图:


    日志提示

    然后经过研究,得出:
    该错误的原因是cgi文件写的内容有缺失,之后在文件头部增加一行代码,来告诉服务用什么来解析文件,也就是要把python.exe的安装路径写进去,路径查找如下图:

    python路径

    代码如下:

    #!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37
    
    print("Content-type:text/html\r\n\r\n")
    print('')
    print('<b>Hello--我是CGI 文件</b>')
    

    然后浏览器打开页面依然报错,查看log日志,报错如下:

    Log拒绝访问

    之后,查看了很多文档,毕竟身边都是前端,也没法找人探讨,只能自己摸索,查看了几种解决方案,大致如下:

    • 方案1:增加文件编码代码:
      # -*- coding: utf8 -*-
      
    • 方案2:引入gci
      import cgi
      import cgitb;cgitb.enable()
      
    • 方案3:修改httpd.conf配置文件
         # Options Indexes FollowSymLinks
          Options +Indexes +FollowSymLinks +Multiviews
          #
          # AllowOverride controls what directives may be placed in .htaccess files.
          # It can be "All", "None", or any combination of the keywords:
          #   AllowOverride FileInfo AuthConfig Limit
          #
          # AllowOverride None
          AllowOverride all
      

    然而这些方案还是没有解决我的问题,极尽放弃的边缘,又坚持看了一些文档,把第一行的代码#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37修改为:#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37/python.exe,打开浏览器页面显示如下:

    CGI启动成功

    原因:
    我们脚本中的第一行文本有点儿神秘。它看起来应该是一条注释,因为它起始于一个符号,但是它看起来太有意义,以至于不仅仅是注释。事实上,这个是被用来告诉操作系统将执行此脚本所用的解释器的名字。 每个脚本都应该把这一文本行作为它的第一行。

    至此, CGI 启动成功。

    注意:

    如果CGI返回的内容是html页面,有可能会出现页面乱码的情况,效果如下:


    乱码

    增加如下代码即可

    import codecs, sys
    # CGI处理模块
    import cgi, cgitb
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
    

    效果如下:


    成功

    至此2天的时间已经耗完,好在问题得到了解决,总结经验就是,第一要学会看Log日志,第二就是,多尝试。第三就是遇到问题,要耐心解决,能解决问题比没有遇到任何问题更能增加我们对新知识的理解。

    相关文章

      网友评论

        本文标题:从Python到Apache再到CGI

        本文链接:https://www.haomeiwen.com/subject/ekjdectx.html