当前位置: 首页 > news >正文

诸城市网站建设宁波优化网站排名公司推荐

诸城市网站建设,宁波优化网站排名公司推荐,北京学做网站,有什么超好用的做简历的网站1. 框架概述web框架是一个为web服务器提供服务的应用程序,专门负责处理用户的动态资源请求.静态资源: 资源的内容是固定不变的.动态资源: 资源的内容是动态变化, 数据是从数据库获取的.静态 web 服务器 使用 tcp 传输数据1. 导包 socket2. 创建一个 socket 对象, socket.socket…1. 框架概述web框架是一个为web服务器提供服务的应用程序,专门负责处理用户的动态资源请求.静态资源: 资源的内容是固定不变的.动态资源: 资源的内容是动态变化, 数据是从数据库获取的.静态 web 服务器 使用 tcp 传输数据1. 导包 socket2. 创建一个 socket 对象, socket.socket()端口复用(可选的)3. 绑定 socket对象.bind((ip, 端口))4. 监听 socket对象.listen()5. 等待连接 socket对象.accept()--- 阻塞等待客户端连接,返回一个新的 socket 对象6. 接收信息(请求报文) recv7. 发送信息(响应报文) send8. 关闭套接字 close()------------------------------------------web 服务器的工作流程1. 在浏览器输入 URL 网址2. 浏览器会访问 DNS 服务器, 做 DNS 解析, 将域名对应的 ip 进行返回3. 和服务器建立连接(三次握手)4. 发送请求报文5. web 服务器接收浏览器发送报文, 解析报文, 判断请求的资源是静态资源还是动态资源6. 如果是静态资源, web 服务器自己处理,将内容返回7. 如果是动态资源, 需要将请求交给 web 框架处理8. web 框架根据 web 服务器发送的请求, 从模板库中读取需要的模版文件, 同时还需要中数据库中查询需要的数据, 将数据和模版文件进行整合,组成完整的数据9. web 框架将整理后的数据和处理结果发送给 web 服务器10. web 服务器根据 web 框架发送内容,组成响应报文,发送给浏览器11. 浏览器将资源进行整合, 显示内容---5 7 8 9 10 写代码实现---2. 搭建框架1. 找到之前书写的静态 web 服务器的代码, 作为 web 服务器使用import socketimport threadingclass HTTPWebServer(object):def __init__(self):# 1. 创建 socketserver_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2. 绑定端口和 ipserver_socket.bind((, 8080))# 3. 设置监听server_socket.listen(128)self.server_socket server_socket # 将这个 socket 作为实例属性def __del__(self): # 对象销毁的时候调用 close() 方法self.server_socket.close()staticmethoddef __handle_client_request(new_soc, client_ip_port):# 5. 接收信息(HTTP 请求报文)buf new_soc.recv(4096) # 一次性报文if buf:# 打印请求报文# print(buf.decode())buf buf.decode()# 6. 发送信息(HTTP 响应报文)# 响应行 协议的版本 状态码 状态描述response_line HTTP/1.1 200 OK\r\n# 响应头response_header Server:PY\r\nName:py40\r\n# 空行(\r\n)# 响应体, 文件的内容, 读取文件,将文件的内容作为响应体发送file_name buf.split( , 2)[1]print(f请求的资源为{file_name})# 访问的资源是 / --- index.htmlif file_name /:file_name /index.htmltry:with open(static file_name, rb) as f: # rb, 读取出来的直接是 bytesdata f.read()except FileNotFoundError:with open(static/error.html, rb) as f:data f.read()# 如果文件不存在, 修改响应行的状态码response_line HTTP/1.1 404 Not Found\r\nresponse (response_line response_header \r\n).encode() datanew_soc.send(response)else:print(f{client_ip_port} 断开连接...)# 7. 关闭连接new_soc.close()def start(self):# 4. 等待连接print(服务已启动,端口为 8080, 等待连接....)while True:new_socket, ip_port self.server_socket.accept()print(f{ip_port} 建立连接......)# 用户连接之后,创建一个线程sub_thread threading.Thread(targetself.__handle_client_request, args(new_socket, ip_port))sub_thread.start()if __name__ __main__:# 创建对象web HTTPWebServer()web.start() # 启动服务器2. 将 static 文件和 template 文件放到当天的代码目录中3. 启动 web 服务器, 访问之前的静态页面, 能够正常访问4. 修改 web 服务器的代码3. 动态资源判断判断一个资源是不是动态资源, 只需要判断资源是不是以 .html 结尾 字符串.endswith()# 此时获取到文件的资源路径,需要判断是静态资源还是动态资源if file_name.endswith(.html):动态资源, 交给框架处理# 思考,框架如何知道请求的是哪个页面 --- 函数传参# 一般的方法, 将需要传递的数据组成字典传递# 好处: 可以传递多个数据env {filename: file_name,# 还可以传递其他参数,目前不需要}status, header, file_data framework.handle_request(env)response_line HTTP/1.1%s\r\n % statusresponse_header headerdata file_data.encode()else:静态资源,web 服务器直接自己处理try:with open(static file_name, rb) as f: # rb, 读取出来的直接是 bytesdata f.read()except FileNotFoundError:with open(static/error.html, rb) as f:data f.read()# 如果文件不存在, 修改响应行的状态码response_line HTTP/1.1 404 Not Found\r\n4. 处理客户端的动态资源请求创建web框架程序接收web服务器的动态资源请求处理web服务器的动态资源请求并把处理结果返回给web服务器web服务器把处理结果组装成响应报文发送给浏览器web框架程序(framework.py)代码:miniweb框架负责处理动态资源请求import time# 获取首页数据def index():# 响应状态status 200 OK;# 响应头response_header [(Server, PWS2.0)]# 处理后的数据data time.ctime()return status, response_header, data# 没有找到动态资源def not_found():# 响应状态status 404 Not Found;# 响应头response_header [(Server, PWS2.0)]# 处理后的数据data not foundreturn status, response_header, data# 处理动态资源请求def handle_request(env):# 获取动态请求资源路径request_path env[filename]print(接收到的动态资源请求:, request_path)if request_path /index.html:# 获取首页数据result index()return resultelse:# 没有找到动态资源result not_found()return result5. 路由列表开发路由: 请求的 URL 到到处理的函数之间的关系5.1 在路由列表添加路由# 定义路由列表, 在列表中保存所有的请求资源和处理函数的对应关系(Django)route_list [(/index.html, index), # 函数地址的引用, 不能加括号的(/center.html, center)]def handle_request(env):处理动态资源请求# 1. 获取web 服务器传递的参数file_name env[filename] # 通过字典的key 取值print(f接收到要处理的动态资源是: {file_name})# 遍历路由列表, 查找需要请求的资源是否在路由列表中for route in route_list:if file_name route[0]:func route[1] # func 是一个函数return func() # return route[1]()else:return not_found()5.2 装饰器方式的添加路由route_list []def my_route(filename):# 定义装饰器def decorator(fn):# 添加路由# route_list.append((filename, fn))def inner():return fn()route_list.append((filename, inner))return innerreturn decoratormy_route(/index.html)def index(): # 视图函数专门用来处理首页数据的# 1. 从模板库读取 html 页面with open(template/index.html, r) as f:file_data f.read()6. 数据库准备将提前给到大家的 stock_db.sql 复制到 Ubuntu 桌面中登录 mysql 客户端 mysql -uroot -pmysql创建数据库 create database stock_db charsetutf8;使用这个数据库use stock_db导入 SQL 语句 source ~/Desktop/stock_db.sql7. index 页面处理从数据库获取数据使用这个数据进行模版替换# 获取首页数据route(/index.html)def index():# 响应状态status 200 OK;# 响应头response_header [(Server, PWS2.0)]# 打开模板文件读取数据with open(template/index.html, r) as file:file_data file.read()# 处理后的数据, 从数据库查询conn pymysql.connect(hostlocalhost,port3306,userroot,passwordmysql,databasestock_db,charsetutf8)# 获取游标cursor conn.cursor()# 查询sql语句sql select * from info;# 执行sqlcursor.execute(sql)# 获取结果集result cursor.fetchall()print(result)data for row in result:data %s%s%s%s%s%s%s%s % row# 替换模板文件中的模板遍历result file_data.replace({%content%}, data)return status, response_header, result8. center 页面处理前后端分离后端程序员提供数据接口前端程序员,在页面 发送 Ajax 请求,获取数据,解析数据,将数据显示到页面中8.1 后端# 个人中心数据接口开发route(/center_data.html)def center_data():# 响应状态status 200 OK;# 响应头response_header [(Server, PWS2.0), (Content-Type, text/html;charsetutf-8)]conn pymysql.connect(hostlocalhost,port3306,userroot,passwordmysql,databasestock_db,charsetutf8)# 获取游标cursor conn.cursor()# 查询sql语句sql select i.code, i.short, i.chg,i.turnover, i.price, i.highs, f.note_infofrom info as i inner join focus as f on i.id f.info_id;# 执行sqlcursor.execute(sql)# 获取结果集result cursor.fetchall()# 关闭游标cursor.close()# 关闭数据库连接conn.close()# 个人中心数据列表center_data_list list()# 遍历每一行数据转成字典for row in result:# 创建空的字典center_dict dict()center_dict[code] row[0]center_dict[short] row[1]center_dict[chg] row[2]center_dict[turnover] row[3]center_dict[price] str(row[4])center_dict[highs] str(row[5])center_dict[note_info] row[6]# 添加每个字典信息center_data_list.append(center_dict)# 把列表字典转成json字符串, 并在控制台显示json_str json.dumps(center_data_list,ensure_asciiFalse)print(json_str)return status, response_header, json_str代码说明:json.dumps函数把字典转成json字符串函数的第一个参数表示要把指定对象转成json字符串参数的第二个参数ensure_asciiFalse表示不使用ascii编码可以在控制台显示中文。响应头添加Content-Type表示指定数据的编码格式8.2 前端// 发送ajax请求获取个人中心页面数据$.get(center_data.html, function (data) {var data_array data;// 获取table标签对象var $table $(.table)for(var i 0; i data_array.length; i){// 获取每一条对象var center_obj data_array[i];var row_html center_obj.code center_obj.short center_obj.chg center_obj.turnover center_obj.price center_obj.highs center_obj.note_info 修改 ;// 为table标签添加每一行组装的html数据$table.append(row_html);}}, json);
http://www.yutouwan.com/news/233110/

相关文章:

  • 深圳建网站的公司张家港高端网站建设公司
  • 辽宁响应式网站费用安卓手机app下载
  • 卖水果做哪个网站好乱起封神是那个网站开发的?
  • 义乌有什么企业网站吗网络建设标准
  • 自适应网站制作教程旅游村庄网站建设方案
  • 如何入侵网站服务器嵊州建设局网站
  • 关于学校的网站模板免费下载网站分为哪几类
  • 人才网站运营建设 材料php网站建设 关键技术
  • 嘉兴网站建设技术托管青岛网站建设在线
  • 西安专业做网站的公司哪家好网上书城网站建设总结
  • 门户网站改造方案霸州做网站shijuewang
  • 网站代备案便宜团购网站平台建设
  • 网站建设个体营业执照门店做网站有没有必要
  • 找工程项目信息网站dedecms是什么意思
  • 汶上哪个广告公司做网站国内新闻最新消息2021
  • win7搭建网站服务器大型网站建设历史
  • 婺源网站建设wyjcwlwordpress ftp存储
  • 做旅游网站公司wordpress标签id在哪里
  • 高米店网站建设wordpress给分类添加自定义栏目
  • 临西网站建设嘉祥网站建设多少钱
  • 手机网站的优势报告老师怪怪怪怪物
  • 电商网站前台功能模块各学院二级网站建设通报
  • 个人网站有哪些天元建设集团有限公司李华
  • 网站建设 总体思路做电商网站php开发的流程
  • 做搜索网站挣钱微网站建设教程
  • 专业做外贸英文公司网站书店网站模板下载
  • 上海企业网站建设报价wdcp 网站打不开
  • 深圳福田大型商城网站建设wordpress怎样用
  • wordpress清理网站缓存免费小程序模板
  • 电子商务网站建设前期准备保定seo公司