框架---根据不同的路径返回不同的内容--代码--返回具体的HTML文件

HTML通过href实现页面跳转的几种不同路径写法 Html中利用a标签实现页面跳转是很常见的操作,但是其中的href怎么填却需要小心点。绝对路径,相对路径到底有什么区别,这一节我们一起用实例来看看。 我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。 文章目录测试环境跳转的三种方式同网站相对路径同网站绝对路径不同网站绝对路径 测试环境 不同的浏览器也许前端的表现不太一样... 阅读详情
import socket
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9998))
server_sk.listen(130)#.listen使套接字变为可以被动链接
def index(path):
    msg='这是{}页面'.format(path).encode('utf-8')
    return msg
def home(path):
    msg='this is {} html'.format(path).encode('utf-8')
    return msg
def error(path):
    msg='这是一个错误的请求'.encode('utf-8')
    return msg
while True:
    client,addrs=server_sk.accept()
    content=client.recv(1024).decode('utf-8')
    print(content)
    #首先应该将路径截取出来,利用切片
    head_lst=content.split('\r\n')
    title=head_lst[0].split(' ')
    path=title[1]
    if path=='/home':
        msg=home(path)
    elif path=='/index':
        msg=index(path)
    else:
        msg=error(path)
    #给浏览器返回消息
    msg0='HTTP/1.1 200 OK\r\n'.encode('utf-8')
    msg1='Content-type:text/html;charset=utf-8\r\n'.encode('utf-8')
    msg2='\r\n'.encode('utf-8')
    client.send(msg0)
    client.send(msg1)
    client.send(msg2)
    client.send(msg)

优化:

import socket
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9998))
server_sk.listen(130)#.listen使套接字变为可以被动链接
def index(path):
    msg='这是{}页面'.format(path).encode('utf-8')
    return msg
def home(path):
    msg='this is {} html'.format(path).encode('utf-8')
    return msg
def error(path):
    msg='这是一个错误的请求'.encode('utf-8')
    return msg
def html(path):
    msg='这是一个HTML网页'.encode('utf-8')
    return msg
while True:
    client,addrs=server_sk.accept()
    content=client.recv(1024).decode('utf-8')
    print(content)
    #首先应该将路径截取出来,利用切片
    head_lst=content.split('\r\n')
    title=head_lst[0].split(' ')
    path=title[1]
    path_list=[
        ('/index',index),
        ('/home',home),
        ('/html',html)
    ]
    func=None
    for lis in path_list:
        if lis[0]==path:
            func=lis[1]
            break
    if func:
        msg=func(path)
    else:
        msg=error(path)
    #给浏览器返回消息
    msg0='HTTP/1.1 200 OK\r\n'.encode('utf-8')
    msg1='Content-type:text/html;charset=utf-8\r\n'.encode('utf-8')
    msg2='\r\n'.encode('utf-8')
    client.send(msg0)
    client.send(msg1)
    client.send(msg2)
    client.send(msg)

返回具体的HTML文件:

import socket
def index():
    with open('index.html',mode='rb') as f:
       msg= f.read()
    return msg
def home():
    with open('home.html',mode='rb') as f:
        msg=f.read()
    return msg
def html():
    with open('HTML2.html',mode='rb') as f:
        msg=f.read()
    return msg
def error():
    with open('error.html',mode='rb') as f:
        msg=f.read()
    return msg
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9997))
server_sk.listen(120)
path_list=[
    ('/index',index),    
    ('/home',home),
    ('/html',html)
]
while True:
    print('等待客户端连接')
    client_sk,addrs=server_sk.accept()
    content=client_sk.recv(1024).decode('utf-8')
    print(content)
    header_lst=content.split('\r\n')
    title_lst=header_lst[0].split(' ')
    path=title_lst[1]
    func=None
    for path_tup in path_list:
        if path_tup[0]==path:
            func=path_tup[1]
            break
    if func:
        msg=func()
    else:
        msg=error()
    client_sk.send('HTTP/1.1 200 OK\r\n'.encode('utf-8'))  # 设置响应首行
    client_sk.send('Content-Type:text/html;charset=utf-8\r\n'.encode('utf-8'))  # 响应头
    client_sk.send('\r\n'.encode('utf-8'))  # 响应空行
    client_sk.send(msg)
    # client_sk.send('你好啊'.encode('utf-8'))  # 响应内容
    print('客户端发来贺电')
    client_sk.close()
让网页动起来:
import socket
def index():
    with open('index.html',mode='r',encoding='utf-8') as f:
       msg= f.read()
       msg=msg.replace('姑姑','女朋友').encode('utf-8')
    return msg
def home():
    with open('home.html',mode='rb') as f:
        msg=f.read()
    return msg
def html():
    with open('HTML2.html',mode='rb') as f:
        msg=f.read()
    return msg
def error():
    with open('error.html',mode='rb') as f:
        msg=f.read()
    return msg
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9997))
server_sk.listen(120)
path_list=[
    ('/index',index),
    ('/home',home),
    ('/html',html)
]
while True:
    print('等待客户端连接')
    client_sk,addrs=server_sk.accept()
    content=client_sk.recv(1024).decode('utf-8')
    print(content)
    header_lst=content.split('\r\n')
    title_lst=header_lst[0].split(' ')
    path=title_lst[1]
    func=None
    for path_tup in path_list:
        if path_tup[0]==path:
            func=path_tup[1]
            break
    if func:
        msg=func()
    else:
        msg=error()
    client_sk.send('HTTP/1.1 200 OK\r\n'.encode('utf-8'))  # 设置响应首行
    client_sk.send('Content-Type:text/html;charset=utf-8\r\n'.encode('utf-8'))  # 响应头
    client_sk.send('\r\n'.encode('utf-8'))  # 响应空行
    client_sk.send(msg)
    # client_sk.send('你好啊'.encode('utf-8'))  # 响应内容
    print('客户端发来贺电')
    client_sk.close()

(7).总结
总结
1.web框架的本质:socket 服务端 与浏览器的通讯。
2.socket 服务端功能可以划分为3部分:

  • a.负责与浏览器收发消息(socket)在python中有专门的框架
    wsgiref/uWsgi/gunicorn…
  • b.根据用户访问不同的路径执行不同的函数
  • c.从HTML中读取出内容,并且完成字符串的替换
    3.Python中 web 框架的分类:
  • 按照2上面的功能分类
    (1).框架自带a,b,c 功能 ----> Tornado
    (2).框架自带b,c,使用第三方的a ---->Django
    (3).框架自带b,使用第三方的a,c ---->Flask
    -按照另一个维度划分
    (1).Diango ,Tornado–>大而全(做一个网站用到的技术都有)
    (2).其他 例如 Flask 轻量级只封装了核心功能。
    a部分和b、c 部分通讯需要遵守WSGI 协议。
vue中如何解析后台返回的html路径并展示html内容 很简单哦~~~~~~~ 用iframe标签即可实现---- 第一步:添加iframe标签代码 <iframe :src="this.url" class="htmlShow" frameborder="0" width="100%" height="100%" scrolling="auto"></iframe> 第二步:保存从后台获取的url地址 第三步:即可完成在页面中的呈现 ... 阅读详情

相关推荐

HTMLTestRunner - 识别不同目录下面的文件(需要配合修改后的discover方法)

HTMLTestRunner - 识别不同目录下面的文件(需要配合修改后的discover方法)

python判断操作系统类型

有时候为了方便,想写一Python脚本,让其既能在windows下运行又可以在linux中运行,只需要改一下后缀。   由于python是解释性的语言,所以在不同平台下执行其对应的代码,而不必担心针对某个平台的代码块不符合当前平台,使整个文件不能运行。我们只需要通过if语句来判断当前平台,执行相应代码块即可:   通过以下方法: import sys...

weixin_34242331的博客 207

Qt多线程实战:如何优雅地处理Modbus设备通信中的线程安全问题

本文深入探讨了在Qt框架下实现Modbus设备通信时的多线程安全问题,提供了优雅的解决方案。通过生产者-消费者模型、任务队列与锁机制等设计模式,有效解决了界面卡顿、数据包错乱等问题。文章还详细介绍了对象生命周期管理、信号槽连接类型选择等关键实现细节,帮助开发者构建稳定可靠的Modbus通信模块。

weixin_30897233的博客 488

根据数据库中字段的不同数字,页面使用不同的html标签

当数据库中的 type为0的时候 要用  标签 当数据库中的type为1的时候 要用 标签 及其他字段用其他标签。  首先 从后台将需要的数据传入前台 Controller: @RequestMapping(value = "/xxx", method =RequestMethod.GET)     public Stringxxx(Page page,HttpSe

Hero_QHZ的博客 1889

如何实现电路级别的CDM ESD防护

采用先进制程的CMOS工艺,可能具有比以前更薄的栅极氧化物和更大的芯片尺寸,大的衬底可能积累大量的电荷,导致CDM事件期间的高ESD放电峰值电流。传统CDM保护器件使用栅极接地NMOS被添加到输入级的栅极。然而,这种方法通常会在信号路径上引入显著的寄生电容,这不适合RF应用。

weixin_42693135的博客 2504

华三R4900 G5服务器实战:用PMC P460-B4阵列卡配置RAID1+RAID6,并搞定CentOS 7.9安装(含热备盘设置)

本文详细解析了在华三R4900 G5服务器上使用PMC P460-B4阵列卡配置RAID1+RAID6混合阵列的全过程,包括热备盘设置和CentOS 7.9系统安装。通过实战步骤和性能优化建议,帮助企业IT人员高效部署高可用存储方案,特别适合需要数据冗余和系统稳定性的企业级应用场景。

weixin_29248653的博客 358

nginx配置访问图片路径以及html静态页面的调取方法

给大家讲一个快速配置nginx访问图片地址,以及访问html静态页面的配置。 1.实验环境 首先随便某个路径下创建相应的目录。如图下 2.在里面放自定义的html或者图片。 3.nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.

kjsayn的博客 10万+

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器直接操作硬件外设,实现感知、决策与执行。这项技术的核心价值在于为物联网、智能硬件和机器人等领域提供了低功耗、高可靠性的解决方案。在机器人应用场景中,嵌入式平台常作为主控大脑,驱动舵机、传感器并处理交互逻辑。本文聚焦的Stack-chan项目,正是这一理念的生动实践:它采用流行的ESP32微控制器,并创新性地通过Moddable运行时支持使用JavaScript进行嵌入式开发,极大地降低了机器人编程的门槛。开发者可以基于此平台,轻松实

weixin_28729173的博客 439

Django学习笔记(二):Django处理用户请求,返回一个HTML而不是一个字符串!

第一步:在linux命令窗口中找到pycharm要存放项目的目录下,创建一个项目: 输入Django-admin startproject exercise3 第二步:打开pycharm,选择file—open—找到刚才创建的项目—ok 此时进入这样的界面: 这就是我们创建一个Django项目,然后生成一个现成的框架,我们需要做的就是往这个里面填我们想要的。 这个时候我...

weixin_39542568的博客 2493

2ED2410-EM的使用

2ED2410-EM的使用

让你爱上电路设计 980

8 卡 GPU 服务器与 NVLink/NVSwitch 互联技术

NVLink 是一种点对点的高速互连技术,单条 NVLink 就是一条全双工双路信道,每条 NVLink 链路可以将 2 个 GPU 直连起来,并且每个 GPU 可以提供多条 NVLink 接口连接多个 GPU。另外,PCIe Switch 互联拓扑中的 GPU 之间可能存在 GPU0→Switch0→CPU0→CPU1→Switch1→GPU7 的通信链路,它的通信不可避免的存在一定的延迟,因而更适合用于对信号效率不敏感且追求性价比的使用场景,如:推理、云计算等领域。本文讨论的是单机 GPU 卡间互联。

烟云的计算 4267

http 根据不同的 URL 响应不同的 HTML 内容

Node.js HTTP服务器根据不同URL路径返回不同HTML内容的教程。使用Node.js的http和url模块创建一个Web服务器,通过不同的URL响应不同的页面。代码示例包括根路径、关于我们页面、联系我们页面和404页面。详细步骤和代码说明,帮助学习如何使用Node.js处理HTTP请求。

2402_84971234的博客 932

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1527

微信小程序判断文件是否为图片的方法,以及根据不同字段返回不同内容,时间进行转换

formatSX(item){ let title=""; switch(item){ case 1 : title ="制定和修改业主大会议事规则" ;break; case 2 : title ="制定和修改管理规约" ;break; case 3 : title ="制定物业服务内容、标准以及物业服务收费方案" ;break; case 4 : title ="选聘和解聘物业服务企业" ;break; c

qq_45432996的博客 1855

npm报错 npm WARN deprecated....的问题解决方式

报错 :npm WARN deprecated … 现象:无法进行有效的vue项目的部署以及npm install 命令的执行。 原因一:版本问题 说明:由于npm的版本过低或者过高导致的报错 检查版本: npm -v 如果版本是比较旧的,或者是最新的,这里可以进行对npm的更新和回退。 更新npm版本: npm updated -d 查看可以更新的版本 npm install -g npm 默认安装最新版本 安装回退指定的版本: npm updated -d 查看所有的版本 npm -g i.

任聪聪的博客 16万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Django 之 根据不同的URL地址返回不同的内容(自己写不完善的URL)

代码: #Author Kang import socket # 创建一个socket实例 sk = socket.socket() # 绑定IP地址与端口 sk.bind(('localhost',8004)) # 启动监听 sk.listen() def kang(url): ''' 定义了一个kang函数,用于返回HTML页面 :param url: 网页传...

weixin_33885676的博客 805

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

node.js:学习根据不同的请求路径返回:不同数据

node.js:学习1.学习根据不同的请求路径返回:不同数据2.发送的数据:数据类型,和什么编码:Content-Type3.关于读入文件的:相对路径和绝对路径4.读图片 1.学习根据不同的请求路径返回:不同数据 var url=req.url //获取req.url值(req:是request简写) req.url: 获取的是端口号之后的路径 实现不同路径返回不同数据 我的端口号:3000,网址:http://127.0.0.1:3000 if(url===’/’){ res.end(

qq_51813155的博客 427

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

flask返回 html_Flask中怎样返回html文件?

一般而言,我们在视图中返回的是字符串的形式,但是也会有其他返回的需求,比如html文件。那么这时我们就要用到flask的render_template,来对返回的对象进行改变。当然还有其他的返回方法,不过本篇要带来的这种方法使用更广泛一点。下面我们就具体返回html文件的方法进行详解。1、在templates文件夹建立一个html文件,内容随便写一点如下:html>IndexThisis...

weixin_39932611的博客 5240

java 根据html模板生成html文件

1.代码部分 import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java....

云下的你 5922

【前端】实现文件夹上传,并将后端返回的文件数据,根据路径还原成文件夹格式展示。

前端实现文件夹上上传,并根据后端返回的文件数据,根据文件路径还原文件树形结构渲染

codingClerk的博客 2776

如何用服务器根据输入的路径读取html内容

如何用服务器根据输入的路径读取html内容 //引入http模块 const http = require('http'); const url = require('url'); const path = require('path'); const fs = require('fs'); //引入mime模块 以得到要读取的文件的编码形式 const mime = require('mime'); const app = http.createServer(); app.on('request', (

weixin_46500485的博客 369

html文件路径_HTML文件路径

html文件路径An HTML file path specifies the location of a file in the website folder. The file paths are very similar to an address of file for the web browser. With the HTML file paths, one could link an...

2463

@ControllerAdvice根据不同的HTTP客户端返回不同的结果

前言 该注解的作用就不用多说,但有时候我们的项目接口存在前后端混合接口(即有JSON格式,也有HTML格式的),要想在处理异常的时候根据不同情况来区分该如何做呢? 这个问题我看到很多博客封装了各种工具类来判断是Web还是Ajax等等一大堆的逻辑,说实在我并不看好这种配置。现在SpringBoot兴起,不知道大家有没有发现当我们在浏览器上请求接口(浏览器返回的是HTML格式)与在Postman请求接口(Postman返回的是JSON格式)返回的结果是不一样的。那SpringBoot是如何处理的呢?答案就在Ba

Yong Ledo的博客 1022

android根据文件路径打开文件_HTML 文件路径

路径描述 picture.jpg 位于与当前网页相同的文件夹 picture.jpg 位于当前文件夹的 images 文件夹中picture.jpg 当前站点根目录的 images 文件夹中picture.jpg 位于当前文件夹的上一级文件夹中HTML 文件路径文件路径描述了网站文件夹结构中某个文件的位置。文件路径会在链接外部文件时被用到:网页图像样式表JavaScript绝对文件路径绝对文件路径...

weixin_32515741的博客 636

web框架:含代码

自定义web框架(不完整版) import socket server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(('127.0.0.1',9999)) server.listen(128) while True: msg,address=server.accept()...

小小争520 2679

HTML文件引入外部CSS文件时路径的写法总结

HTML文件引入外部CSS文件时路径的写法总结,列举了各种情况的路径写法

weixin_43458284的博客 6744
上一篇: Web框架,自定义一个web框架(简单)
下一篇: Django框架模块系统---视图函数----简单应用
Mis相遇
博客等级 码龄8年 87粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值