了解Web框架

简介: 了解Web框架

了解Web框架

1、web框架

web框架主要简化开发操作,方便我们的web网站开发,不需要一直做重复性的操作。

所有的web框架的本质都是一个socket服务端;用户通过浏览器进行访问数据,浏览器就是socket的客户端。

2、基于 socket 实现web框架

import  socket
# 创建 socket 服务端对象
server = socket.socket()
# 绑定 ip 以及 端口号(1024 ~ 65535)
server.bind(('127.0.0.1' , 8080))
server.listen(5)
while True:
    sock , address = server.accept()
    data = sock.recv(1024)
    print(data)
    '''
    127.0.0.1 发送的响应无效
    是因为服务端和客户端之间发送和接收数据的传输协议不同
    浏览器访问数据是:通过 http协议获取数据
    
    http协议(http1.0 , http1.1)
    数据响应格式
    1、响应首行 (http协议版本 , 响应状态码 响应状态) 200 OK
    2、响应头 (键值对方式显示)
    3、\r\n (空行)
    4、响应体 (我们要响应的数据)
    '''
    # 127.0.0.1 发送的响应无效。
    sock.send('HTTP1.1 200 OK \r\n\r\n'.encode('utf-8'))
    sock.send(b'hello')
    sock.send('阿宸好帅'.encode('gbk'))
# 浏览器访问数据是:通过 http协议获取数据
# url , 浏览器资源获取器
# 127.0.0.1:8686/index
# 127.0.0.1:8686/num/1
import  socket
# 创建 socket 服务端对象
server = socket.socket()
# 绑定 ip 以及 端口号(1024 ~ 65535)
server.bind(('127.0.0.1' , 8080))
server.listen(5)
# 视图函数
def index():
    return bytes('index页面' , encoding='gbk')
def ac():
    return bytes('阿宸好帅', encoding='gbk')
# url 路由
url_dict = {
    '/index':index,
    '/ac':ac
}
while True:
    sock , address = server.accept()
    data = sock.recv(1024).decode('utf-8')
    url = data.split(' ')[1]
    '''
    127.0.0.1 发送的响应无效
    是因为服务端和客户端之间发送和接收数据的传输协议不同
    浏览器访问数据是:通过 http协议获取数据
    
    http协议(http1.0 , http1.1)
    数据响应格式
    1、响应首行 (http协议版本 , 响应状态码 响应状态) 200 OK
    2、响应头 (键值对方式显示)
    3、\r\n (空行)
    4、响应体 (我们要响应的数据)
    '''
    # 127.0.0.1 发送的响应无效。
    sock.send('HTTP1.1 200 OK \r\n\r\n'.encode('utf-8'))
    if url in url_dict:
        func = url_dict[url]()
        sock.send(func)
    else:
        sock.send(b'404')

3、基于wsgiref模块

WSGI是一个标准规范,web服务器的网关接口,定义web服务器和python程序进程交互

wsgiref模块中封装了 socket服务器操作 ,处理数据请求和响应的协议

Django开发环境中就需要用到这个模块来作为服务器。

from wsgiref.simple_server import make_server
# 视图函数
def index():
    return bytes('index页面' , encoding='gbk')
def ac():
    return bytes('阿宸好帅', encoding='gbk')
# url 路由
url_dict = {
    '/index':index,
    '/ac':ac
}
# 响应服务
def run_server(environ , response):
    '''
    :param environ: 接收请求去相关的所有数据 , wsgiref模块将http请求的数据封装成字典进行传输
    :param response: 响应的数据
    :return: 返回给客户端的数据 , 以列表的形式返回
    '''
    # 响应状态码 , 响应头
    response('200 OK', [])
    # 获取url进行匹配响应
    url = environ['PATH_INFO']
    if url in url_dict:
        response_data = url_dict[url]()
    else:
        response_data = b'404'
    return [response_data]
if __name__ == '__main__':
    # 实例化服务进程
    httpd = make_server('127.0.0.1',8989,run_server)
    # 启动服务
    httpd.serve_forever()

4、动静态网页

1.静态网页

静态文件:所有的前端文件都是静态文件

静态网页:前端的文件中不需要从后端获取数据。

from wsgiref.simple_server import make_server
# 视图函数
def info():
    # 1、读取html文件
    with open('info.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    return bytes(data.encode('utf-8'))
# url 路由
url_dict = {
    '/index':info,
}
# 响应服务
def run_server(environ , response):
    '''
    :param environ: 接收请求去相关的所有数据 , wsgiref模块将http请求的数据封装成字典进行传输
    :param response: 响应的数据
    :return: 返回给客户端的数据 , 以列表的形式返回
    '''
    # 响应状态码 , 响应头
    response('200 OK', [])
    # 获取url进行匹配响应
    url = environ['PATH_INFO']
    if url in url_dict:
        response_data = url_dict[url]()
    else:
        response_data = b'404'
    return [response_data]
if __name__ == '__main__':
    # 实例化服务进程
    httpd = make_server('127.0.0.1',8989,run_server)
    # 启动服务
    httpd.serve_forever()

2.动态网页

动态网页:前端的文件中需要从后端获取数据

将html文件进行模板化,将其转换为字符串模板 , 可以在html文件中写近似后端的语法

pip install jinja2
from wsgiref.simple_server import make_server
from jinja2 import Template
import time , pymysql
# 视图函数
def info():
    # 1、读取html文件
    with open('info.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    return bytes(data.encode('utf-8'))
def get_time():
    data_time = time.strftime(f"{'%Y'}年{'%m'}月{'%d'}日 {'%H'}时{'%M'}分{'%S'}秒")
    with open('index.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    # Template 对html页面进行模板化 , 转换成后端可以操作的方式
    temp = Template(data)
    # render 将后端数据专递到模板化后端 html文件中 {html_time : data_time}
    res = temp.render(html_time = data_time)
    return bytes(res.encode('utf-8'))
def get_data():
    db = pymysql.connect(
        host='localhost',
        user='root',
        password='root',
        charset='utf8',
        database='demo'
    )
    # 设置游标 , 将返回获取的数据类型修改为字典类型
    cur = db.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'select * from t_hero'
    cur.execute(sql)
    db_data = cur.fetchall()
    with open('hero.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    # Template 对html页面进行模板化 , 转换成后端可以操作的方式
    temp = Template(data)
    # render 将后端数据专递到模板化后端 html文件中 {html_time : data_time}
    res = temp.render(t_hero = db_data)
    return bytes(res.encode('utf-8'))
# url 路由
url_dict = {
    '/time':get_time,
    '/info':info,
    '/hero' : get_data
}
# 响应服务
def run_server(environ , response):
    '''
    :param environ: 接收请求去相关的所有数据 , wsgiref模块将http请求的数据封装成字典进行传输
    :param response: 响应的数据
    :return: 返回给客户端的数据 , 以列表的形式返回
    '''
    # 响应状态码 , 响应头
    response('200 OK', [])
    # 获取url进行匹配响应
    url = environ['PATH_INFO']
    if url in url_dict:
        response_data = url_dict[url]()
    else:
        response_data = b'404'
    return [response_data]
if __name__ == '__main__':
    get_data()
    # 实例化服务进程
    httpd = make_server('127.0.0.1',8989,run_server)
    # 启动服务
    httpd.serve_forever()
<body>
<table border="1">
    <tr>
        <th>name</th>
        <th>identity</th>
        <th>weapon</th>
        <th>Shunt</th>
    </tr>
    {% for data in t_hero %}
    <tr>
        <th>{{ data.name }}</th>
        <th>{{ data.identity }}</th>
        <th>{{ data.weapon }}</th>
        <th>{{ data.Shunt }}</th>
    </tr>
    {% endfor %}
</table>
</body>

下载Django框架

python的版本:3.7 , 3.8 , 3.9

pip install django==3.2


相关文章
|
4月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
4月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
6月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
764 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
12月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
163 4
|
12月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
639 3
|
11月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
460 67
|
11月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
618 45
|
11月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
234 2
|
11月前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
1080 1
|
11月前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
91 3