从Python到Apache再到CGI

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

目录


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

内容


一、Apache安装和启动(windowS)

  1. 下载地址:Apache

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


    从Python到Apache再到CGI_第1张图片
    下载地址
  3. 修改配置文件httpd.conf,具体地址,在apache安装目录里面如下图:

    从Python到Apache再到CGI_第2张图片
    配置文件地址

    • 修改默认目录,将SRVROOT默认的c:/Apache24,修改为apache24的安装目录,以我自己的安装为例:
      从Python到Apache再到CGI_第3张图片
      修改根目录地址

      地址应该是:D:/httpd-2.4.41-win64-VS16/Apache24写法如下:
      从Python到Apache再到CGI_第4张图片
      SeverRoot
    • 修改端口号如下图:


      从Python到Apache再到CGI_第5张图片
      端口号1

      从Python到Apache再到CGI_第6张图片
      端口号2
  4. 启动服务,找到bin目录下的ApacheMonitor.exe,双击,如图:

    从Python到Apache再到CGI_第7张图片
    启动服务

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


    从Python到Apache再到CGI_第8张图片
    服务启动成功

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

从Python到Apache再到CGI_第9张图片
文件目录

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

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

从Python到Apache再到CGI_第10张图片
CGI目录

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

从Python到Apache再到CGI_第11张图片
CGI文件内容

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


从Python到Apache再到CGI_第12张图片
CGI启动失败

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

从Python到Apache再到CGI_第13张图片
Logs路径

提示如下图:


从Python到Apache再到CGI_第14张图片
日志提示

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

从Python到Apache再到CGI_第15张图片
python路径

代码如下:

#!C:/Users/v_yanxdai/AppData/Local/Programs/Python/Python37

print("Content-type:text/html\r\n\r\n")
print('')
print('Hello--我是CGI 文件')

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

从Python到Apache再到CGI_第16张图片
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,打开浏览器页面显示如下:

从Python到Apache再到CGI_第17张图片
CGI启动成功

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

至此, CGI 启动成功。

注意:

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


从Python到Apache再到CGI_第18张图片
乱码

增加如下代码即可

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

效果如下:


从Python到Apache再到CGI_第19张图片
成功

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

你可能感兴趣的:(从Python到Apache再到CGI)