了解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


相关文章
|
2月前
|
缓存 自然语言处理 数据库
构建高效Python Web应用:异步编程与Tornado框架
【5月更文挑战第30天】在追求高性能Web应用开发的时代,异步编程已成为提升响应速度和处理并发请求的关键手段。本文将深入探讨Python世界中的异步编程技术,特别是Tornado框架如何利用非阻塞I/O和事件循环机制来优化Web服务的性能。我们将剖析Tornado的核心组件,并通过实例演示如何构建一个高效的Web服务。
|
1月前
|
关系型数据库 MySQL 数据库
如何使用Python的Flask框架来构建一个简单的Web应用
如何使用Python的Flask框架来构建一个简单的Web应用
42 0
|
22小时前
|
JSON 中间件 数据处理
实践出真知:通过项目学习Python Web框架的路由与中间件设计
【7月更文挑战第19天】探索Python Web开发,掌握Flask或Django的关键在于理解路由和中间件。路由连接URL与功能,如Flask中@app.route()定义请求响应路径。中间件在请求处理前后执行,提供扩展功能,如日志、认证。通过实践项目,不仅学习理论,还能提升构建高效Web应用的能力。示例代码展示路由定义及模拟中间件行为,强调动手实践的重要性。
|
21天前
|
开发框架 中间件 PHP
Laravel框架:优雅构建PHP Web应用的秘诀
**Laravel 框架简介:** Laravel是PHP的优雅Web开发框架,以其简洁语法、强大功能和良好开发者体验闻名。它强调代码的可读性和可维护性,加速复杂应用的构建。基础步骤包括安装PHP和Composer,然后运行`composer create-project`创建新项目。Laravel的路由、控制器和Blade模板引擎简化了HTTP请求处理和视图创建。模型和数据库迁移通过Eloquent ORM使数据库操作直观。Artisan命令行工具、队列、事件和认证系统进一步增强了其功能。【6月更文挑战第26天】
21 1
|
22天前
|
JavaScript 前端开发 开发者
Angular框架:企业级Web应用的强大后盾
Angular,谷歌支持的JavaScript框架,因其组件化架构、双向数据绑定、依赖注入和路由系统,成为企业级Web开发首选。组件化促进代码重用,如`AppComponent`示例。双向数据绑定简化DOM操作,减少手动工作。依赖注入通过示例展示易管理依赖,提升测试性。路由则支持SPA开发,平滑页面过渡。Angular的特性增强了开发效率和应用质量,使其在Web开发领域保持领先地位。【6月更文挑战第25天】
24 2
|
23小时前
|
JSON 中间件 Go
Go语言Web框架Gin介绍
【7月更文挑战第19天】Gin是一个功能强大、高性能且易于使用的Go语言Web框架。它提供了路由、中间件、参数绑定等丰富的功能,帮助开发者快速构建高质量的Web应用。通过本文的介绍,你应该对Gin框架有了初步的了解,并能够使用它来开发简单的Web服务。随着你对Gin的深入学习和实践,你将能够利用它构建更复杂、更强大的Web应用。
|
23天前
|
前端开发 数据库 开发者
构建高效后端:Django框架在Web开发中的深度解析
**Django框架深度解析摘要** Django,Python的高级Web框架,以其快速开发和简洁设计备受青睐。核心特性包括Model-Template-View架构、ORM、模板引擎和URL路由。通过创建博客应用示例,展示从初始化项目、定义模型、创建视图和URL配置到使用模板的流程,体现Django如何简化开发,提高效率。其强大功能如用户认证、表单处理等,使Django成为复杂Web应用开发的首选。学习Django,提升Web开发效率。【6月更文挑战第24天】
53 1
|
5天前
|
安全 API 数据库
Django/Flask不只是框架,它们是你Web开发路上的超级英雄!
【7月更文挑战第14天】Django与Flask,Python Web开发的双雄。Django提供全面功能,如ORM、模板引擎,适合大型项目;Flask轻量灵活,适用于快速迭代的定制化应用。Django示例展示ORM简化数据库操作,Flask示例演示构建RESTful API的便捷。两者各有所长,为开发者创造无限可能。**
|
9天前
|
存储 JavaScript 前端开发
WEB三大主流框架之Angular
WEB三大主流框架之Angular
|
9天前
|
存储 JavaScript 前端开发
WEB三大主流框架之Vue.js
WEB三大主流框架之Vue.js