02 Python进阶:CGI编程

什么是CGI

CGI是通用网关接口(Common Gateway Interface)的缩写,它是一种标准协议,用于Web服务器执行外部程序或脚本与Web浏览器进行交互。通过CGI,Web服务器能够动态生成网页内容,处理用户提交的表单数据,并与数据库或其他外部资源进行交互。

基本上,当用户在网页上与Web表单进行交互时,表单数据将被发送到服务器并由CGI程序进行处理。CGI程序可以是任何编程语言编写的脚本(如Perl、Python、PHP、C++等),它接收来自Web服务器的数据,进行逻辑处理,生成新的页面内容,然后将其发送回给用户的浏览器展示。

在简单的例子中,CGI程序可以处理用户输入的数据,比如搜索关键词,然后从数据库中检索相应的结果,最后将结果呈现给用户。这使得网站可以根据用户的请求动态地生成内容,实现高度个性化和互动性。

需要注意的是,虽然CGI在过去广泛使用,但由于性能和安全性方面的考虑,现代的Web开发倾向于使用更先进的技术,如服务器端脚本语言(例如Node.js、Ruby on Rails)、API和框架(如Django、Flask)来取代传统的CGI程序。
在这里插入图片描述

Web服务器支持及配置

在你进行CGI编程前,确保您的Web服务器支持CGI及已经配置了CGI的处理程序。

Apache 支持CGI 配置:

设置好CGI目录:

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

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

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

默认情况下,Linux服务器配置运行的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 程序的例子,它将接收用户输入,并返回一个包含输入内容的网页。在这个例子中,我们假设用户通过表单提交了一个名为 “name” 的字段。

#!/usr/bin/python
print("Content-type: text/html\n")  # 输出 HTTP 头部

print("<html><head><title>CGI Example</title></head><body>")
print("<h1>CGI Example</h1>")
print("<p>Hello, ")

import cgi
form = cgi.FieldStorage()  # 获取提交的表单数据
if "name" in form:
    print(form["name"].value)  # 打印用户输入的名字
else: 
    print("Anonymous")  # 如果没有输入名字,默认为匿名用户
print("</p>")
print("</body></html>")

在这个例子中,我们首先输出 HTTP 头部,然后打印一个简单的 HTML 页面。接着,我们使用 Python 的 cgi 模块来获取用户提交的表单数据,并根据用户输入的名字进行相应的处理。

要让这个 Python CGI 程序生效,需要确保 Web 服务器已经启用了对 Python CGI 程序的支持。在 Apache 服务器中,你需要将这个 Python 文件放置在适当的 CGI 目录(一般为 /usr/lib/cgi-bin/ 目录),并且需要配置 Web 服务器以便它能够执行 Python 脚本。

请注意,上面的示例代码比较简单,并且忽略了安全性和错误处理方面的考虑。在实际开发中,你需要对用户输入进行验证和过滤,以确保安全性。

HTTP头部

HTTP头部(HTTP header)是在发送 HTTP 请求或响应时,用于传输额外信息的部分。它由若干行组成,每行包含一个字段和它的值,字段与值之间用冒号分隔。HTTP 头部通常包含以下几种类型的信息:

  1. 通用头部(General Headers):这些头部可以出现在请求和响应两种消息中,但与消息内容无关,通常包括 Cache-Control、Connection、Date 等。

  2. 请求头部(Request Headers):出现在客户端发送的 HTTP 请求中,用于描述客户端要求的资源或者客户端自身的信息,通常包括 Host、User-Agent、Accept 等。

  3. 响应头部(Response Headers):出现在服务器响应中,用于描述服务器返回的资源信息,通常包括 Server、Content-Type、Content-Length 等。

  4. 实体头部(Entity Headers):这些头部描述了实体主体部分内容,出现在请求或响应的消息体中,通常包括 Content-Length、Content-Type 等。

下面是一个 HTTP 头部的范例,展示了一些常见的字段:

HTTP/1.1 200 OK
Date: Tue, 24 Aug 2021 06:00:00 GMT
Server: Apache/2.4.6 (CentOS)
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

在这个例子中,第一行是响应状态行;其后的几行是响应头部,包括 Date、Server、Content-Type 和 Content-Length 字段。
在这里插入图片描述

HTTP 头部在客户端和服务器之间传递额外的信息,它们对于确定如何处理请求或响应非常重要,并在 Web 通讯过程中发挥着关键的作用。

CGI环境变量

在这里插入图片描述
以下是一个简单的CGI脚本输出CGI的环境变量:

实例
#!/usr/bin/python3

import os

print (“Content-type: text/html”)
print ()
print (“<meta charset=“utf-8”>”)
print (“环境变量
”)
print (“

  • ”)
    for key in os.environ.keys():
    print (“
  • %30s : %s
  • ” % (key,os.environ[key]))
    print (“
”)

GET和POST方法

GET 和 POST 方法是 HTTP 协议中用于客户端与服务器进行信息交换的两种基本请求方法。

  1. GET 方法:GET 方法用于向服务器请求特定资源,通常用于获取数据。当客户端使用 GET 方法发送请求时,请求中的数据会被附在 URL 后面,以查询字符串的形式发送,例如:http://www.example.com/path/to/resource?param1=value1&param2=value2。由于数据附在 URL 后面,因此 GET 请求的数据长度有限制,并且会被保存在浏览器的历史记录和 Web 服务器的日志文件中。

  2. POST 方法:POST 方法通常用于向服务器提交数据,尤其是那些可能包含敏感信息的数据。与 GET 方法不同,POST 请求中的数据不会附在 URL 后面,而是作为请求的正文发送到服务器。因此,POST 请求对发送的数据长度没有限制,并且 POST 请求的数据不会被保存在浏览器历史记录或 Web 服务器日志文件中。

总的来说,GET 方法适合用于从服务器获取资源或数据,而 POST 方法适合用于向服务器提交数据。在实际应用中,需要根据具体的情况选择合适的请求方法。GET 请求通常用于读取数据,而 POST 请求通常用于修改数据或执行涉及状态改变的操作。

需要注意的是,不应该将敏感信息放在 GET 请求的 URL 中,因为这些信息可能会被保存在浏览器历史记录或 Web 服务器日志文件中,并且容易被第三方获取,而 POST 请求的数据传输相对更安全一些。

简单的表单实例:GET方法

下面是一个使用 GET 方法的简单 HTML 表单示例,它将用户输入的数据作为查询字符串附加在 URL 后面,并通过 GET 请求发送给服务器。假设用户输入的数据将用于搜索:

<!DOCTYPE html>
<html>
<head>
    <title>GET 方法表单示例</title>
</head>
<body>
    <h2>使用 GET 方法提交表单</h2>
    <form action="search.php" method="get">
        <label for="searchQuery">搜索内容:</label>
        <input type="text" id="searchQuery" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

在这个例子中,用户可以在文本框中输入搜索内容,然后点击提交按钮。当用户提交表单时,浏览器会将用户输入的内容作为查询字符串附加在 URL 后面,类似于这样:

http://www.example.com/search.php?q=user_input

其中 search.php 是表单的提交目标页面,?q=user_input 是使用 GET 方法提交的查询字符串,其中 q 是表单字段的名称,user_input 是用户输入的内容。

在服务器端,可以通过对查询字符串进行解析来获取用户输入的数据,从而执行相关操作。例如,使用 PHP 可以通过 $_GET['q'] 来获取用户提交的搜索内容。

使用POST方法传递数据

下面是一个使用POST方法传递数据的表单示例。假设这个表单用于用户注册:

<!DOCTYPE html>
<html>
<head>
    <title>使用POST方法提交表单</title>
</head>
<body>
    <h2>用户注册</h2>
    <form action="register.php" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"><br><br>
        
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br><br>
        
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email"><br><br>
        
        <input type="submit" value="注册">
    </form>
</body>
</html>

在这个例子中,用户可以填写用户名、密码和邮箱地址,然后点击“注册”按钮。当用户提交表单时,表单数据将作为请求的正文以POST方法发送到服务器端的register.php页面。

在服务器端的register.php页面,您可以通过解析POST请求来获取用户输入的用户名、密码和邮箱,并进行相应的处理。例如,使用PHP可以通过$_POST['username']$_POST['password']$_POST['email']来获取这些数据。

通过POST方法提交数据可以保护用户输入的隐私信息,因为表单数据不会直接显示在URL中,而是作为请求的一部分发送到服务器端。POST方法通常用于向服务器提交敏感信息或执行对服务器状态产生影响的操作。

通过CGI程序传递checkbox数据

通过 CGI 程序传递复选框(checkbox)数据的基本步骤如下:

  1. 创建包含复选框的 HTML 表单,让用户进行选择。
  2. 使用 CGI 程序处理用户提交的表单数据,并从中提取复选框的数值。
  3. 对于选中的复选框,CGI 程序可以将其值收集起来并进行处理。

以下是一个简单的例子:

HTML 表单代码 form.html

<!DOCTYPE html>
<html>
<head>
    <title>通过CGI程序传递checkbox数据</title>
</head>
<body>
    <h2>复选框示例</h2>
    <form action="process_form.cgi" method="post">
        <input type="checkbox" name="fruit" value="apple"> 苹果<br>
        <input type="checkbox" name="fruit" value="banana"> 香蕉<br>
        <input type="checkbox" name="fruit" value="orange"> 橙子<br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

CGI 程序 process_form.cgi (使用 Python 作为示例):

#!/usr/bin/env python
import cgi

form = cgi.FieldStorage()

print("Content-Type: text/html\n")

print("<html><body>")
print("<h2>已选择的水果:</h2>")
if "fruit" in form:
    if isinstance(form["fruit"], list):  # 如果有多个勾选项
        for value in form.getlist("fruit"):
            print("<p>{}</p>".format(value))
    else:  # 只有一个勾选项
        print("<p>{}</p>".format(form["fruit"].value))
else:
    print("<p>未选择任何水果</p>")
print("</body></html>")

在这个例子中,用户可以勾选苹果、香蕉和橙子,并提交表单。process_form.cgi CGI 程序将从表单中提取勾选的水果,然后生成一个简单的 HTML 页面来显示用户选择的水果。

通过CGI程序传递 Textarea 数据

通过 CGI 程序传递 Textarea 数据的基本步骤如下:

  1. 创建包含 Textarea 元素的 HTML 表单,让用户输入文本信息。
  2. 使用 CGI 程序处理用户提交的表单数据,并提取 Textarea 中的文本内容。
  3. 对于提取的文本内容,CGI 程序可以对其进行处理或显示。

以下是一个简单的例子:

HTML 表单代码 form.html

<!DOCTYPE html>
<html>
<head>
    <title>通过CGI程序传递Textarea数据</title>
</head>
<body>
    <h2>Textarea示例</h2>
    <form action="process_form.cgi" method="post">
        <label for="message">请输入您的留言:</label><br>
        <textarea id="message" name="message" rows="4" cols="50"></textarea><br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

CGI 程序 process_form.cgi (使用 Python 作为示例):

#!/usr/bin/env python
import cgi

form = cgi.FieldStorage()

print("Content-Type: text/html\n")

print("<html><body>")
if "message" in form:
    message = form["message"].value
    print("<h2>您输入的留言是:</h2>")
    print("<p>{}</p>".format(message))
else:
    print("<h2>您未输入任何留言</h2>")
print("</body></html>")

在这个例子中,用户可以在 Textarea 中输入留言内容,然后提交表单。process_form.cgi CGI 程序将提取用户输入的留言内容,并生成一个简单的 HTML 页面来显示用户输入的留言。

通过CGI程序传递下拉数据

通过 CGI 程序传递下拉框(select)数据的基本步骤如下:

  1. 创建包含下拉框的 HTML 表单,让用户进行选择。
  2. 使用 CGI 程序处理用户提交的表单数据,并提取下拉框中选定的值。
  3. 对于选定的值,CGI 程序可以收集并处理它们。

以下是一个简单的例子:

HTML 表单代码 form.html

<!DOCTYPE html>
<html>
<head>
    <title>通过CGI程序传递下拉数据</title>
</head>
<body>
    <h2>下拉框示例</h2>
    <form action="process_form.cgi" method="post">
        <label for="color">请选择您喜欢的颜色:</label>
        <select id="color" name="color">
            <option value="red">红色</option>
            <option value="blue">蓝色</option>
            <option value="green">绿色</option>
        </select><br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

CGI 程序 process_form.cgi (使用 Python 作为示例):

#!/usr/bin/env python
import cgi

form = cgi.FieldStorage()

print("Content-Type: text/html\n")

print("<html><body>")
if "color" in form:
    selected_color = form["color"].value
    print("<h2>您选定的颜色是:</h2>")
    print("<p>{}</p>".format(selected_color))
else:
    print("<h2>您未选定任何颜色</h2>")
print("</body></html>")

在这个例子中,用户可以在下拉框中选择喜欢的颜色,然后提交表单。process_form.cgi CGI 程序将提取用户选择的颜色,并生成一个简单的 HTML 页面来显示用户选择的颜色。

CGI中使用Cookie

在 CGI 中使用 Cookie 可以通过设置响应头来创建和发送 Cookie 给客户端,同时也可以通过请求头从客户端接收和读取 Cookie 的值。下面是一个简单的示例来说明如何在 CGI 中使用 Cookie:

  1. 创建包含设置 Cookie 的 CGI 程序 set_cookie.cgi
#!/usr/bin/env python
print("Set-Cookie: user_id=12345; Expires=Wed, 09 Jun 2023 10:18:14 GMT")
print("Content-Type: text/html\n")

print("<html><body>")
print("<h2>Cookie 已设置</h2>")
print("</body></html>")

在这里,Set-Cookie 头部用于设置名为 user_id 的 Cookie,并将其值设置为 12345,并且设置了过期时间。

  1. 创建包含读取 Cookie 的 CGI 程序 read_cookie.cgi
#!/usr/bin/env python
import os

print("Content-Type: text/html")
print()

print("<html><body>")
if "HTTP_COOKIE" in os.environ:
    cookie_string = os.environ.get("HTTP_COOKIE")
    cookies = cookie_string.split('; ')
    
    for cookie in cookies:
        name, value = cookie.split('=')
        print("<p>Cookie 名称:{},值:{}</p>".format(name, value))

print("</body></html>")

这个 CGI 程序可以从请求头中读取客户端传递的 Cookie,将其解析并显示出来。

请确保将以上两个 CGI 程序保存为 .cgi 文件,并在支持 CGI 的服务器上运行。第一个程序用于设置 Cookie,第二个程序用于读取和显示 Cookie 的值。根据实际需求和场景,你可以相应地设置和读取更多的 Cookie。

Cookie设置

在 CGI 中使用 Cookie 可以通过设置响应头来创建和发送 Cookie 给客户端,同时也可以通过请求头从客户端接收和读取 Cookie 的值。下面是一个简单的示例来说明如何在 CGI 中使用 Cookie:

  1. 创建包含设置 Cookie 的 CGI 程序 set_cookie.cgi
#!/usr/bin/env python
print("Set-Cookie: user_id=12345; Expires=Wed, 09 Jun 2023 10:18:14 GMT")
print("Content-Type: text/html\n")

print("<html><body>")
print("<h2>Cookie 已设置</h2>")
print("</body></html>")

在这里,Set-Cookie 头部用于设置名为 user_id 的 Cookie,并将其值设置为 12345,并且设置了过期时间。

  1. 创建包含读取 Cookie 的 CGI 程序 read_cookie.cgi
#!/usr/bin/env python
import os

print("Content-Type: text/html")
print()

print("<html><body>")
if "HTTP_COOKIE" in os.environ:
    cookie_string = os.environ.get("HTTP_COOKIE")
    cookies = cookie_string.split('; ')
    
    for cookie in cookies:
        name, value = cookie.split('=')
        print("<p>Cookie 名称:{},值:{}</p>".format(name, value))

print("</body></html>")

这个 CGI 程序可以从请求头中读取客户端传递的 Cookie,将其解析并显示出来。

请确保将以上两个 CGI 程序保存为 .cgi 文件,并在支持 CGI 的服务器上运行。第一个程序用于设置 Cookie,第二个程序用于读取和显示 Cookie 的值。根据实际需求和场景,你可以相应地设置和读取更多的 Cookie。

检索Cookie信息

在 CGI 中,你可以通过读取客户端请求中的请求头来获取 Cookie 信息。以下是一个用 Python 编写的示例程序,演示了如何在 CGI 中检索和解析客户端传递的 Cookie 信息:

#!/usr/bin/env python
import os

print("Content-Type: text/html")
print()

print("<html><body>")
if "HTTP_COOKIE" in os.environ:
    cookie_string = os.environ.get("HTTP_COOKIE")
    cookies = cookie_string.split('; ')
    
    print("<h2>检索到的Cookie信息:</h2>")
    for cookie in cookies:
        name, value = cookie.strip().split('=')
        print("<p>{}: {}</p>".format(name, value))

else:
    print("<h2>没有找到Cookie信息</h2>")

print("</body></html>")

在这个示例中,我们从 os.environ 中获取了名为 HTTP_COOKIE 的请求头部分,并使用它来提取传递的 Cookie 信息。然后将其解析并显示在 HTML 页面上。

请确保将以上代码保存为 .cgi 文件,并在支持 CGI 的服务器上运行。当客户端向该 CGI 程序发出请求时,它会解析并显示客户端发送的所有 Cookie 信息。

文件上传实例

在 Web 开发中,文件上传是一个常见的需求。你可以使用 HTML 表单和后端 CGI 来实现文件上传。以下是一个简单的示例,在这个示例中,我们将展示如何使用 HTML 表单和 Python CGI 来进行文件上传。

首先,让我们创建一个 HTML 表单来允许用户上传文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件上传示例</title>
</head>
<body>
    <h2>文件上传示例</h2>
    <form action="upload_file.cgi" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="上传" />
    </form>
</body>
</html>

接下来,创建名为 upload_file.cgi 的 CGI 脚本来处理文件上传:

#!/usr/bin/env python
import cgi
import os

form = cgi.FieldStorage()

if "file" in form:
    fileitem = form["file"]

    if fileitem.file:
        # 指定文件保存路径
        filepath = '/path/to/save/' + os.path.basename(fileitem.filename)

        # 保存文件
        with open(filepath, 'wb') as f:
            f.write(fileitem.file.read())

        print("Content-Type: text/html\n")
        print("<html><body>")
        print("<h2>文件上传成功!</h2>")
        print("<p>文件保存路径:{}</p>".format(filepath))
        print("</body></html>")
    else:
        print("Content-Type: text/html\n")
        print("<html><body>")
        print("<h2>没有选择要上传的文件!</h2>")
        print("</body></html>")
else:
    print("Content-Type: text/html\n")
    print("<html><body>")
    print("<h2>没有找到文件字段!</h2>")
    print("</body></html>")

确保将 upload_file.cgi 中的 /path/to/save/ 替换为服务器上实际用于保存文件的目录路径。

以上代码将允许用户通过 HTML 表单上传文件,并将文件保存到服务器指定的路径中。请注意,对于文件上传功能,需要添加适当的安全措施来验证上传的文件类型、大小以及处理可能存在的安全风险。

文件下载对话框

要在Web页面上实现文件下载对话框,你可以通过HTML超链接和HTTP头部信息来实现。以下是一个简单的示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件下载示例</title>
</head>
<body>
    <h2>文件下载示例</h2>
    <a href="download_file.cgi?filename=file.txt">点击这里下载文件</a>
</body>
</html>

在上面的示例中,我们创建了一个包含超链接的HTML页面,当用户点击超链接时,它将调用名为 download_file.cgi 的CGI脚本,并传递了要下载的文件名作为参数。

下面是 download_file.cgi 的代码示例,它将发送HTTP头部信息告诉浏览器响应内容是一个文件,并指定该文件的名称:

#!/usr/bin/env python

print("Content-Type: application/octet-stream")
print("Content-Disposition: attachment; filename=file.txt")
print()
with open('/path/to/your/file/file.txt', 'rb') as f:
    print(f.read())

在上面的示例中,download_file.cgi CGI脚本发送了HTTP头部信息告诉浏览器响应内容是一个文件(MIME类型为application/octet-stream),并且通过 Content-Disposition 头部指定了使用附件方式下载,并指定了文件名为 file.txt。接着,在空行后输出了文件的内容。

请注意,你需要将 /path/to/your/file/file.txt 替换为实际文件的路径。

这样,当用户点击链接时,浏览器会显示文件下载对话框,提示用户下载文件。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

背景知识 当我们探索未来的交通系统和智能交通解决方案时&#xff0c;车辆到一切&#xff08;Vehicle-to-Everything, V2X&#xff09;通信技术显得尤为重要。V2X是指在车辆与车辆&#xff08;V2V&#xff09;、车辆与基础设施&#xff08;V2I&#xff09;、车辆与行人&#x…

年薪50w的网络安全工程师是如何炼成的?

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

“三电”打不过极氪007、比亚迪海豹?我还是选小米SU7 Pro

文 | AUTO芯球 作者 | 雷歌 我真是越来越烦小米汽车的这帮脑残粉了。 小米SU7热闹的发布会过后&#xff0c; 友商们开始在价格上狙击小米SU7。 这两天&#xff0c; 问界M7降价2万&#xff0c;22万多就能提&#xff0c; 极氪001现在送1.6万的选装配置&#xff0c; 银河E…

ChatGPT 上线新功能:DALL·E 可以编辑图片了

ChatGPT 上线新功能&#xff1a;DALLE 可以编辑图片了。可以对生成的图片内容进行修改、添加和删除。 前几天看到消息说还在内测中&#xff0c;今天就体验上了。 这是官方文档&#xff1a;https://help.openai.com/en/articles/9055440-editing-your-images-with-dall-e 界面…

【fastadmin】脚本模式下,日志钩子函数执行出现死循环,导致内存溢出奔溃

问题出现原因是想对项目中error级别的日志&#xff0c;接入钉钉告警&#xff0c;方便查看 于是使用钩子方法&#xff0c;日志写入完成后&#xff0c;自动调用自定义的告警方法中 1、在application/tags.php 中添加log_write_done > [app\\common\\behavior\\Common, ],2、在…

GPTs构建广告文案Agent(只需要一个网址链接即可生成文案及配图)

在大家已经有账号的前提下&#xff0c;我们来看看怎么做&#xff01;&#xff01;&#xff01; 进入GPTs的编辑界面 如下图&#xff1a; 如何配置呢&#xff1f; Name&#xff1a;给我们的GPTs起个名字。Description&#xff1a;简单介绍一下&#xff0c;我们创建的GPTs是…

家用洗地机选购指南,哪款洗地机性价比高且用户评价好?

在当今快节奏的生活中&#xff0c;无论是商业场所还是家庭&#xff0c;清洁环境都是我们追求的目标之一。而一台高性价比的洗地机在频繁清洁地面时尤为重要。市面上的洗地机种类繁多&#xff0c;如何选择适合自己的洗地机成为了一个挑战。那么&#xff0c;到底哪款牌子的洗地机…

隐语SecretFlow实训营-第9讲:隐语多方安全计算在安全核对的行业实践

业务背景&#xff1a;安全核对产生的土壤 行业背景&#xff1a; 隐私计算技术&#xff0c;实现数据可用不可见、可用不可得。 产品方案&#xff1a;从试点到规模化的路 基于隐语SCQL的数据比对应用&#xff1a;风洞隐私安全核对。 支持 1 to N的规模化核对。 特色功能&…

经典卡尔曼滤波完整公式推导

文章目录 1. 例子1.1 kalman跟踪车道线1.2 鼠标跟踪-匀速运动 2. 卡尔曼滤波3. 卡尔曼公式推导3.1 数学基础1(递归)3.2 数学基础2(数据融合、协方差、状态空间方程、观测器问题)3.3 卡尔曼增益公式推导3.4 误差协方差矩阵3.5 误差来源3.6 滤波调参 运动模型参考资料 1. 例子 1…

【重学C语言】三、C语言最简单的程序

【重学C语言】三、C语言最简单的程序 最简单的程序头文件使用尖括号 < >使用双引号 ""区别与注意事项示例 主函数认识三个错误 常量和变量常量ASCII 码表转义字符 关键字数据类型关键字存储类关键字修饰符关键字控制流程关键字函数相关关键字其他关键字 变量变…

SQL语句生成器,支持MSSQL/MYSQL/SQLITE/ACCESS/EXCEL

经过7个月的艰苦开发&#xff0c;SQL语句生成器终于和各位见面了&#xff0c;因为工程量浩大&#xff0c;一度做到崩溃&#xff0c;差点烂尾&#xff0c;好在经过N次激烈思想斗争后还是坚持了下来累累累累累累累 本软件能够自动生成SQL语句及对应的易语言代码&#xff0c;还有相…

HCIA笔记

console 登录设备的特点&#xff1a; 1、带外&#xff0c;不依赖网络本身的连通性。 2、独占&#xff0c;console口不能被多人同时使用&#xff0c;具备唯一性。 3、本地&#xff0c;console口长度有限&#xff0c;一般只能在机房或者设备现场来使用。 4、只能实现命令行的管理…

安泰电子 :电压放大器的技术指标有哪些

电压放大器是电子设备中常见的一种电路&#xff0c;它的作用是将输入信号的电压放大到所需的输出电压。电压放大器的技术指标描述了其性能和特征&#xff0c;涵盖了许多方面。下面西安安泰将详细介绍一些电压放大器的技术指标。 增益&#xff1a;增益是电压放大器最基本的指标之…

央视曝光!耗资超800万元建高标准农田,两年后改建光伏电站

近期&#xff0c;央视报道揭露湖北部分乡村存在基本农田被光伏项目侵占的情况。报道称湖北孝感市安陆市木梓乡发现光伏项目占用基本农田&#xff0c;却只得每亩500元租金且光伏项目未配套农业种植&#xff0c;导致村民收入减少和噪音扰民的情况。 据央视走访调查该地发现存在工…

【C++第三阶段】模板类模板通用数组实现案例

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 模板怎么使用模板函数模板注意事项普通函数与函数模板的区别普通函数与函数模板调用规则函数模板限制 类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函…

文心一言指令词宝典之旅行篇

作者&#xff1a;哈哥撩编程&#xff08;视频号、抖音、公众号同名&#xff09; 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5;…

创业者的三大法宝:自我进化、自我激励与诚信坚守

一、摘要&#xff1a; 在创业的道路上&#xff0c;每一位创业者都如同航海家&#xff0c;驾驶着自己的船只&#xff0c;在波涛汹涌的大海中探寻成功的彼岸。而在这条充满未知与挑战的旅程中&#xff0c;创业者们需要具备哪些关键的品质和能力呢&#xff1f;京东集团创始人刘强…

Codigger Desktop:开发者的利器,每个人的好帮手(二)

昨日&#xff0c;我们为大家揭开了Codigger Desktop开发者利器的三种特性&#xff0c;展现了其独特的亮点。今日&#xff0c;我们将继续为大家呈现另外三项引人注目的特性&#xff0c;以展现这款工具的全面实力。 一、AI辅助&#xff1a;智能识别Module&#xff0c;环境配置一步…

小米造车为什么能够成功?

#小米汽车 #小米su7交付 引言 小米官方公告&#xff0c;今天(4月3日)小米SU7将正式交付&#xff0c;预示着我们将在道路上见到越来越多的小米汽车。 3月28日&#xff0c;小米汽车在官方微博发文宣布&#xff0c;小米SU7开启大定4分钟订单突破1万台&#xff0c;7分钟订单突破2万…

内存管理是如何影响系统的性能的

大家好&#xff0c;今天给大家介绍内存管理是如何影响系统的性能的&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 内存管理对系统性能的影响至关重要&#xff0c;主要体现在以下…