Python 开发web服务器,返回HTML页面

仅供学习,转载请注明出处

前情篇章

Python 开发Web静态服务器 - 返回固定值:胖子老板,来包槟榔

从上一个篇章的内容中已经完成了使用TCP协议返回HTTP的请求,达到一个返回数据到访问浏览器的效果。

那么本次篇章的需求:
就是返回一个HTML文件到浏览器。

那么该怎么去开发这个功能呢?

大致开发思路

上一篇是通过TCP返回一长串http的数据,分别为 header 和 body 部分。
那么是不是只要读取一个HTML的文件内容,拼接通过body部分进行数据返回。
那么就可以达到访问浏览器获取对应HTML数据的效果呢?

那么还有一个问题,就是访问浏览器的时候的url路径,如何去解析访问哪个html文件呢?

简单来说,就可以使用服务端接受到的url地址,使用正则表达式来解析最后的路径,再根据路径来判断访问哪个html文件。

好了,思路已有,下面就是一步步去实现。

13423234-9e7fae38e4beed77.gif

首先回顾一下上一篇的代码

[root@server01 web]# cat server.py 
#coding=utf-8
from socket import *

def handle_client(client_socket):
    """为一个客户端服务"""
    # 接收对方发送的数据
    recv_data = client_socket.recv(1024).decode("utf-8") #  1024表示本次接收的最大字节数
    # 打印从客户端发送过来的数据内容
    #print("client_recv:",recv_data)
    request_header_lines = recv_data.splitlines()
    for line in request_header_lines:
        print(line)
     
    # 返回浏览器数据
    # 设置返回的头信息 header
    response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源
    response_headers += "\r\n" # 空一行与body隔开
    # 设置内容body
    response_body = "<h1>fat boss<h1>\r\n" 
    response_body += "<h2>come on<h2>\r\n" 
    response_body += "<h3>binlang!!!<h3>\r\n" 

    # 合并返回的response数据
    response = response_headers + response_body
    
    # 返回数据给浏览器
    client_socket.send(response.encode("utf-8"))   #转码utf-8并send数据到浏览器
    client_socket.close()

def main():
   # 创建套接字
   server_socket = socket(AF_INET, SOCK_STREAM)
   # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口
   server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
   # 设置服务端提供服务的端口号
   server_socket.bind(('', 7788))
   # 使用socket创建的套接字默认的属性是主动的,使用listen将其改为被动,用来监听连接
   server_socket.listen(128) #最多可以监听128个连接
   # 开启while循环处理访问过来的请求 
   while True:
      # 如果有新的客户端来链接服务端,那么就产生一个新的套接字专门为这个客户端服务
      # client_socket用来为这个客户端服务
      # server_socket就可以省下来专门等待其他新的客户端连接while True:
      client_socket, clientAddr = server_socket.accept()
      handle_client(client_socket)

if __name__ == "__main__":
   main()
[root@server01 web]# 

运行如下:

13423234-80e37a608b8c17c1.png

准备一个index.html的代码,提供返回浏览器访问

可以到一些建站模板网站下载一份前端代码:

13423234-584d59cd58b6fb4f.png

那么下一步将html文件上传到服务器上。

13423234-48d1bafc2042ca3c.png

编写读取index.html文件,然后访问浏览器

13423234-80bb3fba1aefa39f.png

整体代码如下:

#coding=utf-8
from socket import *

def handle_client(client_socket):
    """为一个客户端服务"""
    # 接收对方发送的数据
    recv_data = client_socket.recv(1024).decode("utf-8") #  1024表示本次接收的最大字节数
    # 打印从客户端发送过来的数据内容
    #print("client_recv:",recv_data)
    request_header_lines = recv_data.splitlines()
    for line in request_header_lines:
        print(line)
     
    # 返回浏览器数据
    # 设置返回的头信息 header
    response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源
    response_headers += "\r\n" # 空一行与body隔开
    # 设置内容body
#    response_body = "<h1>fat boss<h1>\r\n" 
#    response_body += "<h2>come on<h2>\r\n" 
#    response_body += "<h3>binlang!!!<h3>\r\n" 

    # 合并返回的response数据
#    response = response_headers + response_body

    # 读取html文件内容
    file_name = "./html/index.html" # 设置读取的文件路径
    f = open(file_name,"rb") # 以二进制读取文件内容
    response_body = f.read()
    f.close()   

    # 返回数据给浏览器
    client_socket.send(response_headers.encode("utf-8"))   #转码utf-8并send数据到浏览器
    client_socket.send(response_body)   #转码utf-8并send数据到浏览器
    client_socket.close()

def main():
   # 创建套接字
   server_socket = socket(AF_INET, SOCK_STREAM)
   # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口
   server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
   # 设置服务端提供服务的端口号
   server_socket.bind(('', 7788))
   # 使用socket创建的套接字默认的属性是主动的,使用listen将其改为被动,用来监听连接
   server_socket.listen(128) #最多可以监听128个连接
   # 开启while循环处理访问过来的请求 
   while True:
      # 如果有新的客户端来链接服务端,那么就产生一个新的套接字专门为这个客户端服务
      # client_socket用来为这个客户端服务
      # server_socket就可以省下来专门等待其他新的客户端连接while True:
      client_socket, clientAddr = server_socket.accept()
      handle_client(client_socket)

if __name__ == "__main__":
   main()

执行访问如下:

13423234-8402c55159f656dd.png

可以看到浏览器已经显示index.html的内容了,同时还发送了很多的请求到服务端。
但是由于没有请求下载到css和图片等数据内容,所以直接看到一个比较简陋的页面。
那么下一步,就应该使用正则匹配出所有的文件路径,这样的话,就可以返回浏览器关于css、js、image的图片了。

正则匹配请求中的路径,获取对应的文件地址

# IP地址换了不用慌,这是因为我回家了,用家里的演示机了。
[root@server01 web]# python3 server.py 
GET / HTTP/1.1
Host: 192.168.150.128:7788
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

GET /css/base.css HTTP/1.1
Host: 192.168.150.128:7788
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: http://192.168.150.128:7788/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

GET /css/skeleton.css HTTP/1.1
Host: 192.168.150.128:7788
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: http://192.168.150.128:7788/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

可以从上面的结果来看,我就是需要匹配出以下的内容:

GET / HTTP/1.1 --> 
GET /index.html HTTP/1.1 ---> index.html
GET /css/base.css HTTP/1.1 ---> css/base.css
GET /css/skeleton.css HTTP/1.1 ---> css/skeleton.css

根据匹配到的文件,然后拼接路径,到html文件路径中去查找文件,再返回浏览器中。
那么先用ipython编写一下正则,匹配一下先。

In [1]: import re 

# [^/] 表示从开头 ^ 匹配到 / 的一个字符,那么就是字符G了
In [7]: re.match(r"[^/]","GET /index.html HTTP/1.1").group()                               
Out[7]: 'G'

# 增加一个 + 号,匹配所有从开头到 / 的字符,那么就是 GET 空格符号
In [8]: re.match(r"[^/]+","GET /index.html HTTP/1.1").group()                              
Out[8]: 'GET '

# 那么匹配多一个 / ,然后后面的 index.html 就是应该从 这里作为开头匹配到中间的空格位置
In [9]: re.match(r"[^/]+/[^ ]*","GET /index.html HTTP/1.1").group()                        
Out[9]: 'GET /index.html'

# 然后去后面那部分作为分组,取第一个分组,就是匹配出来的文件路径了。
In [10]: re.match(r"[^/]+/([^ ]*)","GET /index.html HTTP/1.1").group(1)                    
Out[10]: 'index.html'

In [11]: re.match(r"[^/]+/([^ ]*)","GET /css/base.css HTTP/1.1").group(1)                  
Out[11]: 'css/base.css'

In [12]: re.match(r"[^/]+/([^ ]*)","GET /a/b/c/d/base.css HTTP/1.1").group(1)              
Out[12]: 'a/b/c/d/base.css'

# 当然空格的那里可以使用 \s 来替代也是可以的。
In [13]: re.match(r"[^/]+/([^\s]*)","GET /a/b/c/d/base.css HTTP/1.1").group(1)             
Out[13]: 'a/b/c/d/base.css'

In [14]: re.match(r"[^/]+/([^\s]*)","GET /index.html HTTP/1.1").group(1)                   
Out[14]: 'index.html'

In [15]:    

只要拼接一下html路径,就可以找到对应请求的文件了。

[root@server01 web]# ls
html  server.py
[root@server01 web]# ls ./html/css/base.css
./html/css/base.css
[root@server01 web]# ls ./html/index.html 
./html/index.html
[root@server01 web]# 

下面就是使用上面的正则规则写入代码中,然后找出文件路径了。

13423234-f0388edb1c94161a.png

运行如下:

13423234-ccff48aa452a6511.png

好了,打印出了准备正则的内容,那么下面就可以使用正则匹配出文件路径出来。

13423234-d57db4c5c0601dbe.png

运行如下:

13423234-45c063727db63a03.png

好了,到了这里就可以先简单得打开对应的文件,返回浏览器即可。

13423234-74971f39cff534de.png

运行如下:

13423234-36f7c05a425fce8b.png

好啦,写到这里基本上也完成的七七八八啦。剩下就是优化以及bug的调整。
那么到底存在有哪些BUG呢?

简单来看看有哪些BUG需要改改

bug: 存在直接访问无路径的请求,导致服务端意外终止

13423234-ca9eeb7c93509d62.png
13423234-27a0120ee166d9f1.png

那么修复这个BUG的思路需要做两个时间:

  • 第一,就是当匹配到 / 的时候,需要设置 file_path = index.html
  • 第二,需要给文件打开的内容部分,做一个异常的捕获,避免直接服务端终止
13423234-8d4bd17f13e6e99f.png

运行测试如下:

13423234-b59f07838ac08b9d.png
13423234-d85d5e52fbd09b84.png

好了,到这里基本上大概的功能已经实现了,下一步就是优化服务返回数据的性能。
这方便就是要使用多进程的方式来进行数据返回才能优化了。

这次开发的完整代码如下

[root@server01 web]# cat server.py 
#coding=utf-8
from socket import *
import re

def handle_client(client_socket):
    """为一个客户端服务"""
    # 接收对方发送的数据
    recv_data = client_socket.recv(1024).decode("utf-8") #  1024表示本次接收的最大字节数
    # 打印从客户端发送过来的数据内容
    #print("client_recv:",recv_data)
    request_header_lines = recv_data.splitlines()
    for line in request_header_lines:
        print(line)
     
    # 返回浏览器数据
    # 设置内容body
    # 使用正则匹配出文件路径
    print("------>",request_header_lines[0])
    print("file_path---->","./html/" + re.match(r"[^/]+/([^\s]*)",request_header_lines[0]).group(1))
    ret = re.match(r"[^/]+/([^\s]*)",request_header_lines[0])
    if ret:
       file_path = "./html/" + ret.group(1)
       if file_path == "./html/":
          file_path = "./html/index.html"
       print("file_path *******",file_path)

    try:
       # 设置返回的头信息 header
       response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源
       response_headers += "\r\n" # 空一行与body隔开
       # 读取html文件内容
       file_name = file_path # 设置读取的文件路径
       f = open(file_name,"rb") # 以二进制读取文件内容
       response_body = f.read()
       f.close()   
       # 返回数据给浏览器
       client_socket.send(response_headers.encode("utf-8"))   #转码utf-8并send数据到浏览器
       client_socket.send(response_body)   #转码utf-8并send数据到浏览器
    except:
       # 如果没有找到文件,那么就打印404 not found
       # 设置返回的头信息 header
       response_headers = "HTTP/1.1 404 not found\r\n" # 200 表示找到这个资源
       response_headers += "\r\n" # 空一行与body隔开
       response_body = "<h1>sorry,file not found</h1>"
       response = response_headers + response_body
       client_socket.send(response.encode("utf-8"))

    client_socket.close()

def main():
   # 创建套接字
   server_socket = socket(AF_INET, SOCK_STREAM)
   # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口
   server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
   # 设置服务端提供服务的端口号
   server_socket.bind(('', 7788))
   # 使用socket创建的套接字默认的属性是主动的,使用listen将其改为被动,用来监听连接
   server_socket.listen(128) #最多可以监听128个连接
   # 开启while循环处理访问过来的请求 
   while True:
      # 如果有新的客户端来链接服务端,那么就产生一个新的套接字专门为这个客户端服务
      # client_socket用来为这个客户端服务
      # server_socket就可以省下来专门等待其他新的客户端连接while True:
      client_socket, clientAddr = server_socket.accept()
      handle_client(client_socket)

if __name__ == "__main__":
   main()
[root@server01 web]# 

有兴趣的朋友可以下载一个建站的模板html来尝试一下,编写一个web服务端。

13423234-7907ae6344e86e8a.png

关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。

海洋的渔夫
关注 关注
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
python返回html文件_Python Flask:返回HTML内容
weixin_39730801的博客
12-10 1539
我正试图把一个临时的工具,我自己使用,我没有任何经验与后端开发。所以我的方法可能是非传统的。尽管有更好的方法来解决这个问题请考虑我的html文件中的以下片段: dummy text here 我的目标,尽可能简单地说,就是单击BUTTON并使用Flask返回python中ID属性中的字符串文本。下面是我正在使用的代码。app = Flask(__name__)@app.route('/', met...
python自动生成html_PyH : python生成html
weixin_42506994的博客
02-21 1003
样例下面是官网的一个例子:from pyh import *page = PyH('My wonderful PyH page')page.addCSS('myStylesheet1.css', 'myStylesheet2.css')page.addJS('myJavascript1.js', 'myJavascript2.js')page << h1('My big title',...
Python Web开发(详细教程)
最新发布
m0_58477260的博客
04-09 1148
PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。PythonWeb开发可以涵盖多个方面,包括服务器开发、数据库管理、前端设计和API开发等。在服务器开发中,常用的Python Web框架有Django、Flask和Bottle等。这些框架提供了一套工具和结构,使得开发者能够更高效地构建Web应用程序。在PythonWeb开发中,数据库管理也是一个重要的方面。
不使用框架下 python后端向前端返回html页面(学习笔记1)
weixin_43409302的博客
10-14 6975
不使用框架下 python后端向前端返回html页面(学习笔记1) python新手学习web服务器原理的一些坑 本人正在尝试开发一个仓库管理系统的项目,为了能够更深刻地理解后台服务器开发原理,选择尽量少地使用python现成框架,因此就无法避免各种不期而遇的大坑。现在跟大家一一分享一下,共同学习。 基本背景(django框架) 项目的服务器原理模仿django框架思路,由于django框架封...
调用python接口返回一串html,在循环中运行的python程序的HTML接口
weixin_39991926的博客
06-04 591
web界面与Python脚本交互的一个简单的web服务器方法是使用Python瓶。在下面是一个基本的Python bottle程序,可用于您的目的:from bottle import route, run@route('/')def hello():#using jqueryreturn """ poll get_temp with JavaScript heretemp will updat...
html自动实行,使用python写自动执行脚本并将结果返回html
weixin_42131261的博客
06-01 430
终于在今天完成了django项目开发的一个小项目,使用python写一个自动化上线的项目。使用到了python3.5,django 1.11.2,ansible,centos7。功能描述如下:1、使用网页点击要上线的项目2、在后台系统执行过程中浏览器等待后台命令调用3、在上线完成后将后台执行的结果回传到浏览器中。步骤解说:1、在django中要分清楚get和post的请求方式2、使用subproc...
html服务器端运行python,Python实现HTTP服务器(3)以返回指定的HTML页面,三,html
weixin_31473011的博客
03-19 184
通过前两篇博客我们可以了解,当在浏览器端输入127.0.0.1:7890时会发送request请求,格式为GET /HTTP/1.1,如果指定访问页面输入127.0.0.1:7890/index.html时request请求,格式为GET /index.html HTTP/1.1。因此我们可以通过正则表达式提取出index.html,然后将本地的index.html读取发送给浏器,得到相应的页面...
Python Web项目Cherrypy使用方法镜像
12-16
而搭建Python Web项目,因为cherrypy自带服务器,所以只需要下载该模块就能进行Web项目开发。 2、最基本用法 实现功能:访问html页面,点击按钮后接收后台py返回的值 html页面(test_cherry.html) <!DOCTYPE ...
使用python开发前端(PPT61页).ppt
09-22
B/S 模型是指浏览器作为客户端,服务器作为服务端,浏览器向服务器发送 HTTP 请求,服务器返回 HTML、CSS 和 JavaScript 等内容。这种模型可以简化开发难度,降低成本,并且可以快速开发和部署应用程序。 Nodejs ...
老男孩python 四期
06-25
企业大项目实战九--开发WEB在线聊天室软件 1、 实现多用户同时在线聊天 2、 单个用户可以同时打开多窗口进入多个聊天室聊天 3、 通过JQUERY实现前台聊天页面的优化 4、 实现类似WEB QQ的使用效果 第十二 至 第十五天...
基于Flask开发后端在WEB端部署YOLOv5目标检测模型.zip
04-02
基于Flask开发后端并在WEB端部署YOLOv5目标检测模型的项目可以实现在网页上上传图片进行目标检测的功能。下面是一个简要的项目描述: 首先,你需要安装Flask框架和...部署项目到WEB服务器上。你可以选择将项目部署
毕业设计:网站开发设计中的研究与开发(源代码)
05-16
随着个人电脑和Internet...ASP(Active Server Pages活动服务器页面)是一种功能强大的运用于服务器端的脚本编程环境,但是只能用VBScript或者JavaScript这样的非模块语言来编程,而且大量的HTML代码和VBScript、JavaScri
接口自动化返回类型html,python调用接口获取数据 Python做自动化接口调用参数怎么写...
weixin_33799059的博客
06-01 408
python怎么从调用api返回的数据中取出指定值?返回的什么类型的数据,就用什么类型的变量去接收就行了,不太懂你的意思。Python怎样调用Api去抓取数据官方的话,详见该api的文档和请求格式 非官方的只能问该提供的api的本人了python爬虫怎样接收后端接口并向后端传送数据python爬虫获取指定输入可以用正则表达式匹配指定内容,用re模块,用scrapy框架的话,可以用xpath来匹配。...
python res转为html文件,如何将Python文件docstring的转换为HTML
weixin_32586767的博客
06-04 175
你可以不用任何工具。 首先您需要获取数据。这是非常简单的例子:"""My module"""def foo():"""Some function"""passdef bar():"""Another function"""passclass Spam(object):"""Some object"""passif __name__ == '__main__':import typesdefs = ...
PythonHtml解析方法
weixin_30861797的博客
05-17 230
一、强大的BeautifulSoup:BeautifulSoup是一个可以从html或xml文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。在Python开发中,主要用的是BeautifulSoup的查找提取功能,修改功能很少使用 1、安装BeautifulSoup pip3 install beautifulsoup4 2、安装第三方htm...
Python-Web开发基础-HTML
零源的博客
12-25 983
CS模式:C/S 就是Client/Server 的缩写,是客户端和服务器架构 BS模式 :B/S 就是Browser/Server的缩写,是浏览器和服务器架构 网页主要由三部分组成: 结构(Structure) ,表现(Presentation) 、行为(Behavior) 最简单的web应用程序 import socket sock=socket.socket() sock.bind(("127.0.0.1",8888)) sock.listen(5) while True: con
rest 跳转到html,基于来自rest api的响应重定向到html页面
weixin_39862794的博客
06-04 595
我是前端编码的新手,任何指针都会有所帮助。 我需要我的REST API暴露给应用程序和基于请求我的REST API将返回真或假。 如果响应是真的 - 我需要加载一个HTML页面,如果响应是错误的,我需要加载另一个HTML页面。基于来自rest api的响应重定向到html页面我可以配置这servlet.xml文件或web.xml中?我使用的弹簧4和Maven的REST API和HTML,CSS和A...
python爬虫框架newspaper智能解析Html
weixin_43833986的博客
04-04 191
python scrapy使用newspaper智能解析html
python web服务器开发案例
06-02
Python 有许多流行的 Web 服务器框架,例如 Flask, Django, Tornado 等。下面是一个使用 Flask 框架开发 Web 服务器的简单案例: ```python from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello, World!' if __name__ == '__main__': app.run() ``` 在上面的代码中,我们首先导入 Flask 模块,然后创建一个 Flask 应用程序对象,然后通过装饰器 `@app.route('/')` 指定了路由,即当访问根路径时,执行 `index()` 函数并返回字符串 `'Hello, World!'`。最后,通过 `app.run()` 启动 Web 服务器。 上面的代码只是一个简单的示例,实际的 Web 服务通常需要更多的功能,例如处理表单提交、访问数据库、用户认证等等,这些功能可以通过 Flask 提供的插件或扩展来实现。例如,下面是一个使用 Flask-WTF 插件处理表单提交的示例代码: ```python from flask import Flask, render_template, request from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'mysecret' class NameForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) submit = SubmitField('Submit') @app.route('/', methods=['GET', 'POST']) def index(): name = None form = NameForm() if form.validate_on_submit(): name = form.name.data form.name.data = '' return render_template('index.html', form=form, name=name) if __name__ == '__main__': app.run() ``` 在上面的代码中,我们首先导入了 Flask、Flask-WTF 和 WTForms 模块,然后创建了一个 `NameForm` 类,继承自 `FlaskForm`,并定义了一个 `name` 字段和一个 `submit` 按钮。接下来,我们在 `index()` 函数中创建了一个 `NameForm` 对象,然后通过 `form.validate_on_submit()` 方法判断是否提交了表单,并获取了表单中的 `name` 字段的值。最后,我们通过 `render_template()` 函数将表单和获取的 `name` 值渲染到 HTML 页面中。 需要注意的是,在实际的 Web 服务开发中,我们通常会将 HTML 模板和静态文件(例如样式表、JavaScript 文件等)存储在不同的目录下,并使用 Flask 提供的 `render_template()` 函数来渲染 HTML 页面。同时,我们还需要使用数据库等数据存储技术来存储和管理数据,以及使用用户认证和授权等技术来保护 Web 服务的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • excel如何快速自动填充空白单元格上一行的内容 26270
  • css3背景颜色渐变属性(Gradients) 25295
  • excel表格中经纬度格式转换的公式 24683
  • excel IF公式判断两列是否相同 22840
  • 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载) 21457

分类专栏

  • Gradle系列 12篇
  • RabbitMQ系列 18篇
  • JDBC系列 12篇
  • Celery系列 10篇
  • Flask系列 26篇
  • InfluxDB系列 15篇
  • SpringBoot系列 25篇
  • Java JUC 并发编程 14篇
  • JavaWeb基础 27篇
  • 人生百态 1篇
  • java连接池 4篇
  • Go基础 33篇
  • MyBatis系列 11篇
  • Mysql系列 22篇
  • 移动端库和框架 1篇
  • Selenium系列 2篇
  • Ansible系列 4篇
  • Centos7系列 16篇
  • 监控系列 3篇
  • Git系列 7篇
  • Python系列 42篇
  • Django系列 26篇
  • JQuery系列 39篇
  • JavaScript系列 20篇
  • 软件测试 2篇
  • java 13篇
  • QTP 1篇
  • linux 3篇
  • j2ee 1篇
  • oracle 3篇
  • 性能测试 1篇
  • excel 11篇
  • 系统运维 4篇
  • 产品需求 2篇
  • CCNA/CCNP/CCIE 1篇
  • sqlserver 2篇

最新评论

  • 去大厂还是小厂,这个还用问?看看大厂的工作与小厂有什么不同!

    「已注销」: 不管进厂还是创业,要走出门和人交流才是真道理。表情包

  • Python 使用 logging模块打印日志

    是晨星啊: 建议加上编码 fh = logging.FileHandler(logfile, mode='a', encoding='utf8')

  • 14-SpringBoot自动配置-Condition

    代码拯救不了世界: 你这里面先贴了代码的截图,然后又把代码复制上去了,不是有点多此一举吗,要是截图就截图呗,要是代码块就代码块呗,留一个就可以了,看半天文章一半都是重复的

  • Flask app的run配置IP\PORT远程访问

    永远微笑的凯神: 我就在本机上运行的

  • Flask app的run配置IP\PORT远程访问

    永远微笑的凯神: 不行,0.0.0.0还是只能127.0.0.1访问

大家在看

  • AIGC实践|用AI制作视频短片创作全流程 1387
  • 父类与子类的构造函数,静态代码块,实例化初始代码块的执行顺序
  • 【初阶数据结构】深入解析顺序表:探索底层逻辑 2238
  • 第十八章 职责链模式
  • Media Source Extensions (MSE):通过 JavaScript 进行流媒体处理 417

最新文章

  • 3.Gin 框架中的路由简要说明
  • 1.Gin 介绍
  • 5.Gin 静态文件服务
2023年27篇
2022年55篇
2021年128篇
2020年177篇
2019年344篇
2018年96篇
2016年1篇
2015年6篇
2014年18篇
2013年11篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海洋的渔夫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

PHP网站源码黔东南网站开发公司潜江设计公司网站哪家好兴安盟百姓网标王推荐设计网站多少钱玉林设计公司网站价格福田网站优化按天计费价格伊犁高端网站设计惠州网站设计模板公司宣城阿里店铺托管推荐巢湖网站优化软件哪家好楚雄SEO按天计费推荐大理高端网站设计推荐平凉关键词排名包年推广价格坂田企业网站改版推荐坑梓关键词按天扣费推荐昆明阿里店铺运营公司孝感网站优化按天计费报价杭州seo推荐内江企业网站改版报价淮安至尊标王推荐绍兴网站制作推荐凉山网站seo优化价格南京网络推广价格延边关键词按天扣费报价福永高端网站设计公司中山网站关键词优化推荐中卫seo网站优化多少钱河池企业网站建设哪家好临沂网络推广推荐重庆网络广告推广哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化