第35章 Python CGI编程教程

本文详细介绍了CGI(Common Gateway Interface)的概念,包括其作用、工作流程、配置方法以及如何在Python中创建CGI程序。讲解了GET和POST方法在传递数据时的区别,以及如何处理表单数据、Cookie和文件上传。还提供了多个示例脚本,帮助理解CGI在Web服务器上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是CGI

CGI 目前由NCSA维护,NCSA定义CGI如下:

CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在server 上如:HTTPserver ,提供同客户端HTML页面的接口。


网页浏览

为了更好的了解CGI是如何工作的,咱们可以从在网页上点击一个链接或URL的流程:

  • 1、使用大王您的浏览器访问URL并连接到HTTP web server 。
  • 2、Webserver 接收到请求信息后会解析URL,并查找访问的文件在server 上是否存在,如果存在return 文件的内容,否则return 错误信息。
  • 3、浏览器从server 上接收信息,并显示接收的文件或者错误信息。

CGI程序可以是Python脚本,PERL脚本,SHELL脚本,C或者C++程序等。



Webserver 支持及配置

在大王您进行CGI编程前,确保您的Webserver 支持CGI及已经配置了CGI的处理程序。

Apache 支持CGI 配置:

设置好CGI目录:


    ScriptAlias /cgi-bin/ /var/www/cgi-bin/

所有的HTTPserver 执行CGI程序都保存在一个预先配置的目录。这个目录被称为CGI目录,并按照惯例,它被命名为/var/www/cgi-bin目录。

CGI文件的扩展名为.cgi,python也可以使用.py扩展名。

默认情况下,Linuxserver 配置运行的cgi-bin目录中为/var/www。

如果大王您想指定其他运行CGI脚本的目录,可以修改httpd.conf配置文件,请在输出结果查看


    <Directory "/var/www/cgi-bin">
       AllowOverride None
       Options +ExecCGI
       Order allow,deny
       Allow from all
    </Directory>

在 AddHandler 中添加 .py 后缀,这样咱们就可以访问 .py 结尾的 python 脚本文件:


    AddHandler cgi-script .cgi .pl .py


第一个CGI程序

咱们使用Python创建第一个CGI程序,文件名为hello.py,文件位于/var/www/cgi-bin目录中,内容如下:


    实例 
    #!/usr/bin/python3
    
    print ("Content-type:text/html")
    
    print ()                             # 空行,告诉server 结束头部
    
    print ('<html>')
    
    print ('<head>')
    
    print ('<meta charset="utf-8">')
    
    print ('<title>Hello Word - 我的第一个 CGI 程序!</title>')
    
    print ('</head>')
    
    print ('<body>')
    
    print ('<h2>Hello Word! 我是来自phlcsdn2023教程的第一CGI程序</h2>')
    
    print ('</body>')
    
    print ('</html>')

文件保存后修改 hello.py,修改文件权限为 755:


    chmod 755 hello.py

以上程序在浏览器访问显示结果请在输出结果查看

这个的hello.py脚本是一个简单的Python脚本,脚本第一行的输出内容"Content-type:text/html"发送到浏览器并告知浏览器显示的内容类型为"text/html"。

用 print 输出一个空行用于告诉server 结束头部信息。


HTTP头部

hello.py文件内容中的" Content-type:text/html"即为HTTP头部的一部分,它会发送给浏览器告诉浏览器文件的内容类型。

HTTP头部的格式如下:


    HTTP 字段名: 字段内容

例如:


    Content-type: text/html

以下表格介绍了CGI程序中HTTP头部经常使用的信息:

描述
Content-type: 请求的与实体对应的MIME信息。例如: Content-type:text/html
Expires: Date 响应过期的日期和时间
Location: URL 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Last-modified: Date请求资源的最后修改时间
Content-length: N请求的内容长度
Set-Cookie: String 设置Http Cookie

CGI环境变量

所有的CGI程序都接收以下的环境变量,这些变量在CGI程序中发挥了重要的作用:

变量名描述
CONTENT_TYPE这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH如果server 与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE客户机内的 COOKIE 内容。
HTTP_USER_AGENT提供包含了版本数或其他专有数据的客户浏览器信息。
PATH_INFO这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
QUERY_STRING如果server 与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号'?'分隔。
REMOTE_ADDR这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Webserver 的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
REMOTE_HOST这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持大王您想查询,则无需定义此环境变量。
REQUEST_METHOD提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
SCRIPT_FILENAMECGI脚本的完整路径
SCRIPT_NAMECGI脚本的的名称
SERVER_NAME这是大王您的 WEB server 的主机名、别名或IP地址。
SERVER_SOFTWARE这个环境变量的值包含了调用CGI程序的HTTPserver 的名称和版本号。例如,上面的值为Apache/2.2.14(Unix)

以下是一个简单的CGI脚本输出CGI的环境变量:


    实例 
    #!/usr/bin/python3
    
    import os
    
    print ("Content-type: text/html")
    
    print ()
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<b>环境变量</b><br>")
    
    print ("<ul>")
    
    for key in os.environ.keys():
    
        print ("<li><span style='color:green'>%30s </span> : %s </li>" % (key,os.environ[key]))
    
    print ("</ul>")

将以上点保存为 test.py ,并修改文件权限为 755,执行结果请在输出结果查看


GET和POST方法

浏览器客户端通过两种方法向server 传递信息,这两种方法就是 GET 方法和 POST 方法。

使用GET方法传输数据

GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 请在输出结果查看


    http://www.test.net/cgi-bin/hello.py?key1=value1&key2=value2

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

简单的url实例:GET方法

以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数:


    /cgi-bin/test.py?name=phlcsdn2023教程&url=http://blog.csdn.net/phlcsdn2023

以下为 hello_get.py 文件的代码:


    实例 
    #!/usr/bin/python3
    
    # CGI处理模块
    
    import cgi, cgitb 
    
    
    
    # 创建 FieldStorage 的实例化
    
    form = cgi.FieldStorage() 
    
    # 获取数据
    
    site_name = form.getvalue('name')
    
    site_url  = form.getvalue('url')
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
    
    print ("</body>")
    
    print ("</html>")

文件保存后修改 hello_get.py,修改文件权限为 755:


    chmod 755 hello_get.py

浏览器请求输出结果请在输出结果查看

简单的表单实例:GET方法

以下是一个通过HTML的表单使用GET方法向server 发送两个数据,提交的server 脚本同样是hello_get.py文件,hello_get.html 代码如下:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/hello_get.py" method="get">
    
    站点名称: <input type="text" name="name">  <br />
    
    站点 URL: <input type="text" name="url" />
    
    <input type="submit" value="提交" />
    
    </form>
    
    </body>
    
    </html>

默认情况下 cgi-bin 目录只能存放脚本文件,咱们将 hello_get.html 存储在 test 目录下,修改文件权限为 755:


    chmod 755 hello_get.html

Gif 演示请在输出结果查看

使用POST方法传递数据

使用POST方法向server 传递数据是更安全可靠的,像一些敏感信息如用户password 等需要使用POST传输数据。

以下同样是hello_get.py ,它也可以处理浏览器提交的POST表单数据:


    实例 
    #!/usr/bin/python3
    
    # CGI处理模块
    
    import cgi, cgitb 

    # 创建 FieldStorage 的实例化
    
    form = cgi.FieldStorage() 
    
    # 获取数据
    
    site_name = form.getvalue('name')
    
    site_url  = form.getvalue('url')
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2>%s官网:%s</h2>" % (site_name, site_url))
    
    print ("</body>")
    
    print ("</html>")

以下为表单通过POST方法(method=“post”)向server 脚本 hello_get.py 提交数据:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/hello_get.py" method="post">
    
    站点名称: <input type="text" name="name">  <br />
    
    站点 URL: <input type="text" name="url" />
    
    <input type="submit" value="提交" />
    
    </form>
    
    </body>
    
    </html>
    
    </form>

请在输出结果查看

通过CGI程序传递checkbox数据

checkbox用于提交一个或者多个选项数据,HTML代码如下:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/checkbox.py" method="POST" target="_blank">
    
    <input type="checkbox" name="phlcsdn2023" value="on" /> phlcsdn2023教程
    
    <input type="checkbox" name="google" value="on" /> Google
    
    <input type="submit" value="选择站点" />
    
    </form>
    
    </body>
    
    </html>

以下为 checkbox.py 文件的代码:


    实例 
    #!/usr/bin/python3
     
    # 引入 CGI 处理模块 
    
    import cgi, cgitb 
    
    # 创建 FieldStorage的实例 
    
    form = cgi.FieldStorage() 
    
    # 接收字段数据
    
    if form.getvalue('google'):
    
       google_flag = "是"
    
    else:
    
       google_flag = "否"
    
    if form.getvalue('phlcsdn2023'):
    
       phlcsdn2023_flag = "是"
    
    else:
    
      phlcsdn2023_flag = "否"
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2> phlcsdn2023教程是否选择了 : %s</h2>" % phlcsdn2023csdn_flag)
    
    print ("<h2> Google 是否选择了 : %s</h2>" % google_flag)
    
    print ("</body>")
    
    print ("</html>")

修改 checkbox.py 权限:


    chmod 755 checkbox.py

通过CGI程序传递Radio数据

Radio 只向server 传递一个数据,HTML代码如下:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/radiobutton.py" method="post" target="_blank">
    
    <input type="radio" name="site" value="phlcsdn2023" /> phlcsdn2023教程
    
    <input type="radio" name="site" value="google" /> Google
    
    <input type="submit" value="提交" />
    
    </form>
    
    </body>
    
    </html>

radiobutton.py 脚本代码如下:


    实例 
    #!/usr/bin/python3
    
    
    
    # 引入 CGI 处理模块 
    
    import cgi, cgitb 
    
    
    
    # 创建 FieldStorage的实例 
    
    form = cgi.FieldStorage() 
    
    
    
    # 接收字段数据
    
    if form.getvalue('site'):
    
       site = form.getvalue('site')
    
    else:
    
       site = "提交数据为空"
    
    
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2> 选中的网站是 %s</h2>" % site)
    
    print ("</body>")
    
    print ("</html>")

修改 radiobutton.py 权限:


    chmod 755 radiobutton.py

通过CGI程序传递 Textarea 数据

Textarea 向server 传递多行数据,HTML 代码如下:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/textarea.py" method="post" target="_blank">
    
    <textarea name="textcontent" cols="40" rows="4">
    
    在这里输入内容...
    
    </textarea>
    
    <input type="submit" value="提交" />
    
    </form>
    
    </body>
    
    </html>

textarea.py 脚本代码如下:


    实例 
    #!/usr/bin/python3
    
    
    
    # 引入 CGI 处理模块 
    
    import cgi, cgitb 
    
    
    
    # 创建 FieldStorage的实例 
    
    form = cgi.FieldStorage() 
    
    
    
    # 接收字段数据
    
    if form.getvalue('textcontent'):
    
       text_content = form.getvalue('textcontent')
    
    else:
    
       text_content = "没有内容"
    
    
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2> 输入的内容是:%s</h2>" % text_content)
    
    print ("</body>")
    
    print ("</html>")

修改 textarea.py 权限:


    chmod 755 textarea.py

通过CGI程序传递下拉数据。

HTML 下拉框代码如下:


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
    <form action="/cgi-bin/dropdown.py" method="post" target="_blank">
    
    <select name="dropdown">
    
    <option value="phlcsdn2023" selected>phlcsdn2023教程</option>
    
    <option value="google">Google</option>
    
    </select>
    
    <input type="submit" value="提交"/>
    
    </form>
    
    </body>
    
    </html>

dropdown.py 脚本代码请在输出结果查看


    实例 
    #!/usr/bin/python3
    
    # 引入 CGI 处理模块 
    
    import cgi, cgitb 
    
    # 创建 FieldStorage的实例 
    
    form = cgi.FieldStorage() 
    
    # 接收字段数据
    
    if form.getvalue('dropdown'):
    
       dropdown_value = form.getvalue('dropdown')
    
    else:
    
       dropdown_value = "没有内容"
    
    print ("Content-type:text/html")
    
    print ()
    
    print ("<html>")
    
    print ("<head>")
    
    print ("<meta charset=\"utf-8\">")
    
    print ("<title>phlcsdn2023教程 CGI 测试实例</title>")
    
    print ("</head>")
    
    print ("<body>")
    
    print ("<h2> 选中的选项是:%s</h2>" % dropdown_value)
    
    print ("</body>")
    
    print ("</html>")

修改 dropdown.py 权限:


    chmod 755 dropdown.py


CGI中使用Cookie

在 http 协议一个很大的缺点就是不对用户身份的进行判断,这样给编程人员带来很大的不便, 而 cookie 功能的出现弥补了这个不足。

cookie 就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie 常用在身份校验中。

cookie的语法

http cookie的发送是通过http头部来实现的,他早于文件的传递,头部set-cookie的语法如下:


    Set-cookie:name=name;expires=date;path=path;domain=domain;secure

  • name=name: 需要设置cookie的值(name不能使用";“和”,"号),有多个name值时用 “;” 分隔,例如:name1=name1;name2=name2;name3=name3
  • expires=date: cookie的有效期限,格式: expires=“Wdy,DD-Mon-YYYY HH:MM:SS”
  • path=path: 设置cookie支持的路径,如果path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如: path=“/cgi-bin/”,如果path是一个文件,则cookie指对这个文件生效,例如:path=“/cgi-bin/cookie.cgi”。
  • domain=domain: 对cookie生效的域名,例如:domain=“blog.youkuaiyun.com/phlcsdn2023”
  • secure: 如果给出此标志,表示cookie只能通过SSL协议的httpsserver 来传递。
  • cookie的接收是通过设置环境变量HTTP_COOKIE来实现的,CGI程序可以通过检索该变量获取cookie信息。

Cookie设置

Cookie的 设置非常简单,cookie 会在 http 头部单独发送。以下实例在 cookie 中设置了 name 和 expires:


    实例 
    #!/usr/bin/python3
    
    print ('Set-Cookie: name="phlcsdn2023教程";expires=Wed, 28 Aug 2023 18:30:00 GMT')
    
    print ('Content-Type: text/html')
    
    
    
    print ()
    
    print (""" <html>   <head>     <meta charset="utf-8">     <title>phlcsdn2023教程(blog.youkuaiyun.com/phlcsdn2023)</title>   </head>     <body>         <h1>Cookie set OK!</h1>     </body> </html> """)

将以上代码保存到 cookie_set.py,并修改 cookie_set.py 权限:


    chmod 755 cookie_set.py

以上实例使用了 Set-Cookie 头信息来设置 Cookie 信息,非必输项中设置了 Cookie 的其他属性,如过期时间 Expires,域名 Domain,路径 Path。这些信息设置在 “Content-type:text/html” 之前。


检索Cookie信息

Cookie信息检索页非常简单,Cookie信息存储在CGI的环境变量HTTP_COOKIE中,存储格式如下:


    key1=value1;key2=value2;key3=value3....

以下是一个简单的CGI检索cookie信息的程序:


    实例 
    #!/usr/bin/python3
    
    
    
    # 导入模块
    
    import os
    
    import http.cookies
    
    
    
    print ("Content-type: text/html")
    
    print ()
    
    
    
    print (""" <html> <head> <meta charset="utf-8"> <title>phlcsdn2023教程(blog.youkuaiyun.com/phlcsdn2023)</title> </head> <body> <h1>读取cookie信息</h1> """)
    
    
    
    if 'HTTP_COOKIE' in os.environ:
    
        cookie_string=os.environ.get('HTTP_COOKIE')
    
        c= http.cookies.SimpleCookie()
    
       # c=Cookie.SimpleCookie()
    
        c.load(cookie_string)
    
    
    
        try:
    
            data=c['name'].value
    
            print ("cookie data: "+data+"<br>")
    
        except KeyError:
    
            print ("cookie 没有设置或者已过去<br>")
    
    print (""" </body> </html> """)

将以上代码保存到 cookie_get.py,并修改 cookie_get.py 权限:


    chmod 755 cookie_get.py

文件上传实例

HTML设置上传文件的表单需要设置 enctype 属性为 multipart/form-data,代码请在输出结果查看


    实例 
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
    <meta charset="utf-8">
    
    <title>phlcsdn2023教程(blog.csdn.net/phlcsdn2023)</title>
    
    </head>
    
    <body>
    
     <form enctype="multipart/form-data" 
    
                         action="/cgi-bin/save_file.py" method="post">
    
       <p>选中文件: <input type="file" name="filename" /></p>
    
       <p><input type="submit" value="上传" /></p>
    
       </form>
    
    </body>
    
    </html>

save_file.py 脚本文件代码如下:


    实例 
    #!/usr/bin/python3
    
    import cgi, os
    
    import cgitb; cgitb.enable()
    
    form = cgi.FieldStorage()
    
    # 获取文件名
    
    fileitem = form['filename']
    
    # 检测文件是否上传
    
    if fileitem.filename:
    
       # 设置文件路径 
    
       fn = os.path.basename(fileitem.filename)
    
       open('/tmp/' + fn, 'wb').write(fileitem.file.read())
    
       message = '文件 "' + fn + '" 上传成功'
    
    else:
    
       message = '文件没有上传'
    
    print ("""\ Content-Type: text/html\n <html> <head> <meta charset="utf-8"> <title>phlcsdn2023教程(blog.youkuaiyun.com/phlcsdn2023)</title> </head> <body>    <p>%s</p> </body> </html> """ % (message,))

将以上代码保存到 save_file.py,并修改 save_file.py 权限:


    chmod 755 save_file.py

如果大王您使用的系统是Unix/Linux,大王您必须替换文件分隔符,在window下只需要使用open()语句即可:


    fn = os.path.basename(fileitem.filename.replace("\\", "/" ))


文件download 对话框

咱们先在当前目录下创建 foo.txt 文件,用于程序的download 。

文件download 通过设置HTTP头信息来实现,功能代码如下:


    实例 
    #!/usr/bin/python3
    
    # HTTP 头部
    
    print ("Content-Disposition: attachment; filename=\"foo.txt\"")
    
    print ()
    
    # 打开文件
    
    fo = open("foo.txt", "rb")
    
    str = fo.read();
    
    print (str)
    
    # 关闭文件
    
    fo.close()

第1章 Python3 教程第2章 Python3 简介教程
第3章 Python3 环境搭建教程第4章 Python3 VScode教程
第5章 Python3 基础语法教程第6章 Python3 基本数据类型教程
第7章 Python3 数据类型转换教程第8章 Python3 推导式教程
第9章 Python3 解释器教程第10章 Python3 注释教程
第11章 Python3 运算符教程第12章 Python3 数字(Number)教程
第13章 Python3 字符串教程第14章 Python3 列表教程
第15章 Python3 元组教程第16章 Python3 字典教程
第17章 Python3 集合教程第18章 Python3 编程第一步教程
第19章 Python3 条件控制教程第20章 Python3 循环语句教程
第21章 Python3 迭代器与生成器教程第22章 Python3 函数教程
第23章 Python3 数据结构教程第24章 Python3 模块教程
第25章 Python3 输入和输出教程第26章 Python3 File教程
第27章 Python3 OS教程第28章 Python3 错误和异常教程
第29章 Python3 面向对象教程第30章 Python3 命名空间/作用域教程
第31章 Python3 标准库概览教程第32章 Python3 实例教程
第33章 Python 测验教程第34章 Python3 正则表达式教程
第35章 Python3 CGI编程教程第36章 Python3 MySQL(mysql-connector)教程
第37章 Python3 MySQL(PyMySQL)教程第38章 Python3 网络编程教程
第39章 Python3 SMTP发送邮件教程第40章 Python3 多线程教程
第41章 Python3 XML 解析教程第42章 Python3 JSON教程
第43章 Python3 日期和时间教程第44章 Python3 内置函数教程
第45章 Python3 MongoDB教程第46章 Python3 urllib教程
第47章 Python uWSGI 安装配置教程第48章 Python3 pip教程
第49章 Python3 operator教程第50章 Python math教程
第51章 Python requests教程第52章 Python random教程
第53章 Python3 os.replace() 方法教程

寄语

本文有 phlcsdn2023 原创,欢迎点赞、转载,博客地址:https://blog.youkuaiyun.com/phlcsdn2023

  • 相信追逐阳光的人,总会收获到满满的阳光。
  • 公众的信任不能随便托付给人,除非这个人首先证实自我能胜任并且适合从事这项工作。
  • 因果循环的纺车,辗转织出的红线,与可悲的愿望同生,永远的轮回。
  • 要想撬起世界,他的最佳支点不是整个地球,不是一个国家、一个民族,也不是别人,而只能是自己的心灵。
  • 别说思想境界很渺茫,如迷看不见,似风摸不着,可心能感受得到,境随心生,境由心造;莫言未来梦想太遥远,它就源于你心船的起航,就取决于你当下的进击,梦起于心,梦由心定。所以,修心乃人生之大道,你坚持什么、摒弃什么,接纳什么、拒绝什么,皆是心中一念,决定了你往何处去、能够走多久。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你得不到的念想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值