首页 > 编程语言 >21.12 Python 实现网站服务器

21.12 Python 实现网站服务器

时间:2023-10-29 11:34:27浏览次数:33  
标签:__ Web jinja index Python html 21.12 服务器

Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端,完成客户端的请求。Web服务器可以使用多种编程语言和技术实现,通过对套接字的处理并遵循HTML等浏览器兼容格式即可实现。

如果需要自行实现一个Web服务器则本质上就是需要完成套接字的处理,并在处理时增加遵循HTTP格式的头部数据即可,如下是一个简单的支持Web服务器的套接字程序,该程序运行后会在本机的80端口侦听,当用于通过浏览器访问时则会自动传输一段话。

import socket

def handle_request(client):
    buf = client.recv(1024)
    client.send(bytes("HTTP/1.1 200 OK\r\n\r\n","UTF-8"))
    client.send(bytes("<b>Hello lyshark</b>","UTF-8"))

if __name__ == "__main__":
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(("localhost",80))
    sock.listen(5)

    while True:
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

运行上述代码片段,读者可自行打开浏览器并访问http://localhost:80端口,则此时会弹出一段问候语,说明我们的服务器已经可以被浏览器解析了。

当然上述代码还有很大的优化空间,首先要解决的问题是让页面具有动态渲染的功能,此处我们可以采用jinja2模板,该模板允许在Web应用程序中渲染HTML,其主要特点是可配置性高、快速、安全且易于使用,使用时读者需要自行执行pip install jinja2来安装此模板,至此我们就可以在Web服务器带啊吗中使用模板引擎进行输出。

如下代码片段则是一个使用了make_server类的服务器实现,在代码中我们定义了一个url_func列表用于存储路由规则,路由规则代表的是当有浏览器访问服务器时则自动使用特定规则内的特定函数处理这个规则,在代码中我们分别定义了两个路由函数,其中index()用于展示首页信息,而jinja()则用于展示模板渲染功能实现,至此读者需要在主目录下分别创建两个文件index.html代表网站主页,而jinja.html则代表模板渲染页面,我们以jinja.html为例创建如下代码;

<body>
<h1>{{name}}</h1>
<ul>
    {% for item in user_list %}
    <li>{{item}}</li>
    {% endfor %}
</ul>
</body> 

接着编写服务器程序,在jinja()路由函数内通过读取jinja.html文件并使用template.render()函数给特定的变量传入不同的参数,当页面渲染好以后,则通过return将该请求返回给RunServer函数,再由该函数return [response,]返回给被调用客户。

from wsgiref.simple_server import make_server
from jinja2 import Template

# /index/的路由函数
def index():
    with open("./index.html","r",encoding="utf-8")as fp:
        recv = fp.read()
    return recv.encode("utf-8")

# /jinja/的路由函数
def jinja():
    with open("./jinja.html","r",encoding="utf-8")as fp:
        data = fp.read()
        template = Template(data)
        recv = template.render(name='John Doe', user_list=['lyshark', 'wang'])
        return recv.encode("utf-8")

# 定义路由规则
url_func = [
    ('/index/',index),('/jinja/',jinja)]

def RunServer(environ,star_response):
    star_response("200 OK",[('Content-Type','text/html;charset=urf-8')])
    url = environ["PATH_INFO"]
    rAddr = environ["REMOTE_ADDR"]
    rHost = environ["HTTP_HOST"]
    print("[+] 根域名: {} 路径: {} 目标IP: {}".format(rHost,url,rAddr))
    func = None
    for i in url_func:
        if i[0] == url:
            func = i[1]
            break
    if func:
        response = func()
    else:
        response = b"** 404 not found **"
    return [response,]

if __name__ == "__main__":
    httpd = make_server("0.0.0.0",80,RunServer)
    print("[*] 服务已启动 0.0.0.0:80")
    httpd.serve_forever()

运行上述代码,读者可以打开浏览器并访问localhost/jinja/路径,此时即可看到经过选然后的HTML页面,如下图所示;

标签:__,Web,jinja,index,Python,html,21.12,服务器
From: https://www.cnblogs.com/LyShark/p/17795656.html

相关文章

  • python分析银行流水
    Python分析银行流水1.整体流程首先,让我们来看一下分析银行流水的整体流程。journeytitle分析银行流水的整体流程section下载银行流水section数据清洗和预处理section数据分析和可视化section结果呈现2.下载银行流水在这一步,我们需要从银行......
  • python合并行变量
    Python合并行变量在Python编程中,我们经常会遇到需要将多个变量合并为一个的情况。这种操作在处理数据结构、字符串连接等场景中非常常见。本文将介绍Python中合并行变量的几种常见方法,包括使用加号、join()函数、列表推导式等。使用加号合并变量在Python中,使用加号可以将多个变......
  • python获取企业微信的验证码
    Python获取企业微信的验证码介绍在企业微信中,验证码是一种常见的安全验证方式,用于确认用户的身份。作为一名开发者,你需要掌握如何使用Python来获取企业微信的验证码。本文将为你详细介绍整个获取验证码的流程,并提供相应的代码示例。流程概述下面是获取企业微信验证码的整个流程......
  • python返回所有
    Python返回所有的流程流程图graphLRA(开始)-->B(定义一个函数)B-->C(输入一个列表)C-->D(在函数内部创建一个空列表)D-->E(遍历输入的列表)E-->F(将遍历到的元素添加到空列表中)F-->G(返回结果列表)G-->H(输出结果列表)H-->I(结束)步骤详解步骤......
  • python开发的股市行情看板
    演示地址:https://geeeeeeeek.github.io/stock_page/简介近期股市又骚动起来,回忆起昔日炒股经历,历历在目,悲惨经历让人黯然神伤,去年共投入4000元入市,最后仅剩1000多,无奈闭关修炼,忘记股市,全身心投入代码世界,享受代码带来的乐趣。近日,当看到别人用python进行量化投资暴富的消息,顿时振......
  • 基于python+django的二手商品交易平台-二手商品供需系统
    项目简介该项目是基于python的web类库django开发的一套web网站,二手商品交易平台,给师弟开发的课程作业。大家在学习过程中,遇到问题可以github咨询作者。预览展示http://mask.gitapp.cn源码地址https://github.com/geeeeeeeek/mask开发步骤:启动项目django-adminstartproject......
  • 机房WSUS服务器搭建方案-服务器安装
    1、服务器安装在服务器运行下载的安装文件WSUSSetup.exe,开始安装(以下是几个重要截图)为了进行测试,产品选择只选择了OFFICE2003;其它的略......
  • python的异常处理
    python的异常处理: Try-except语句   在上面的例子中,我们使用了两个占位符{}来表示要插入的变量的位置。然后,通过在format()方法中传递变量name和age来替换这些占位符。 你还可以通过在占位符{}中添加索引来指定要替换的参数的顺序。例如:  pythonname=......
  • Python拆分列中文和 字符
    需求描述:我们日常实际的工作中经常需要把一列数据按中文和数字或者字母单独拆分出来导入所需的库:importpandasaspd定义函数extract_characters,该函数接受三个参数:file_path(Excel文件路径)、sheet_name(工作表名称)和column_name(列名)。defextract_characters(file_path,......
  • Python环境下LaTeX数学公式转图像方案调研与探讨
    @目录引言方案一:基于LaTeX环境方案二:基于KaTeX(推荐)方案三:基于Matplotlib写在最后引言近来,涉及到一些公式识别的项目,输入是公式的图像,输出是LaTeX格式的数学公式字符串。这类项目一般都采用深度学习的方法来做,这就涉及到构造公式LaTeX字符串和对应渲染后图像的数据集。来训练......