python - html对css无效

标签 python html css sockets networking

我有一个使用Python Socket制作的简单Web服务器。该服务器在模板文件夹中只有两个文件“home.html”和“home.css”。但是,当我访问home.html时,我的home.css文件没有任何影响。我检查了Microsoft Edge的DevTools,它显示了一个黑色的home.css文件。
我的文件夹:

Website
   - server.py
   - templates
       - home.html
       - home.css
home.html代码:
<!DOCTYPE html>
<html>
<head>
    <title>TITLE</title>
    <link rel="stylesheet" type="text/css" href="home.css">
</head>
<body>
    <div class="header">
        <h1>title name</h1>
    </div>
    <div class="body_container">
        <p>This is body..</p>
    </div>
</body>
</html
home.css代码:
body{
    background-color: gray;
}
server.py:
import time
import socket
import threading

class WebServer():
    def __init__(self):
        self.host = "192.168.0.101"
        self.port = 80
        self.content_dir = 'templates'

    def _generate_headers(self, response_code):
        header = ''
        if response_code == 200:
            header += 'HTTP/1.1 200 OK\n'
        elif response_code == 404:
            header += 'HTTP/1.1 404 Not Found\n'

        time_now = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
        header += 'Date: {now}\n'.format(now=time_now)
        header += 'Server: Orasae\n'
        header += 'Connection: close\n\n' # Signal that connection will be closed after completing the request
        return header

    def handle_client(self, conn, addr):
        """
        Handles Client Connection and Serves Files From self.content_dir.

        parameters:
            - conn: Client Socket Object from self.server.accept();
            - addr: Client Address from self.server.accept();
        """
        PACKET_SIZE = 1024
        CONNECTION = True

        while CONNECTION:
            data = conn.recv(PACKET_SIZE).decode() # Receive Data From Client and Decode it.
            if not data:
                CONNECTION = False

            response = self._generate_headers(200).encode()
            
            directory = data.split(" ")[1] # gets directory for requested file
            
            if directory == '/' or directory == '/home':
                f = open(f"{self.content_dir}/home.html", 'rb')
                htmlCode = f.read()
                f.close()

                response += htmlCode

            conn.send(response)
            conn.close()
            CONNECTION = False


    def _listen(self):
        """
        Listens For Any Connection on self.port and Calls self.handle_client For
        Handling Client Request/Respond. 
        """
        self.server.listen(1)
        while True:
            conn, addr = self.server.accept()
            threading.Thread(target=self.handle_client, args=(conn, addr)).start()

    def start(self):
        """
        Attempts to create and bind to a socket to launch it.
        """
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            print(f"Starting Server on {self.host}:{self.port}")
            self.server.bind((self.host, self.port))
            print(f"Started Server on {self.host}:{self.port}")
        except:
            print(f"[ERROR] Couldn't Start Server on port {self.port}")

        self._listen()
感谢您的帮助!

最佳答案

您的服务器从不读取home.css文件。当客户端请求时,您需要解析该请求并找到客户端正在请求的文件,并相应地进行交付。顺便说一下,HTTP行定界符是\r\n

关于python - html对css无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62618220/

相关文章:

html - 网格元素不会垂直拉伸(stretch)

python - 像字符串这样的 Unicode 问题

python - 在 python 中硬编码精确的浮点值

python - PyCharm 和 unittest 不会运行

Python无法获取文件的完整路径名

javascript - 警报框计数器不增加

javascript - HTML5 <video> 回调?

c# - 如何用C#读取TD的值?

javascript - 在 CSS 中按半像素移动的图像插值

html - 何时使用 Foundation/Bootstrap 或自定义 css?