博客
关于我
python | werkzeug,一个不可思议的 Python 库!
阅读量:796 次
发布时间:2023-03-06

本文共 5476 字,大约阅读时间需要 18 分钟。

Werkzeug:Python 开发的强大 Web 工具库

Werkzeug 是 Python 开发者必备的 Web 工具库,作为 Flask 等框架的核心依赖,提供了构建 Web 应用所需的全套功能。以下将从安装、特性、使用场景等方面详细解析 Werkzeug 的魅力。

安装

安装 Werkzeug 非常简单,支持多种 Python 版本。通过 pip 即可快速完成安装:

pip install werkzeug

若需要特定版本,可指定版本号:

pip install werkzeug==2.3.7

安装完成后,建议通过简单的测试脚本验证安装是否成功:

from werkzeug.wrappers import Request, Responsefrom werkzeug.serving import run_simpledef application(environ, start_response):    request = Request(environ)    response = Response('Hello, Werkzeug!')    return response(environ, start_response)if __name__ == '__main__':    run_simple('localhost', 4000, application, use_debugger=True)

特性

Werkzeug 提供了丰富的功能,涵盖从基础到高级的需求:

  • 完整的 WSGI 实现:符合 PEP 3333 规范,为 Web 开发提供了稳固基础。
  • 请求/响应 对象:封装了 HTTP 请求和响应,方便处理各种 Web 请求。
  • 灵活的 URL 路由:支持复杂 URL 模式匹配和参数提取,适合构建 RESTful API。
  • 内置开发服务器:提供调试友好的测试服务器,简化开发流程。
  • 中间件支持:允许开发者自定义请求预处理和响应后处理,扩展应用功能。
  • 安全工具:提供防护常见 Web 攻击的功能,保障应用安全。
  • 文件上传处理:简化文件上传流程,支持类型验证、大小限制等功能。
  • 会话管理:提供安全的会话管理机制,确保用户数据安全。
  • 基本功能

    1. 请求处理

    Werkzeug 提供了强大的请求处理功能,适用于构建 Web API:

    from werkzeug.wrappers import Request, Responsefrom werkzeug.serving import run_simpledef application(request):    name = request.args.get('name', 'Guest')    if request.method == 'POST':        data = request.form.get('data')    user_agent = request.headers.get('User-Agent')    return Response(f'Hello, {name}! Your browser is: {user_agent}')

    2. URL 路由

    通过 Werkzeug 的 URL 路由功能,可以轻松创建复杂的 URL 模式和参数提取:

    from werkzeug.routing import Map, Ruleurl_map = Map([    Rule('/', endpoint='index'),    Rule('/user/
    ', endpoint='user_profile'), Rule('/post/
    ', endpoint='show_post')])def application(environ, start_response): request = Request(environ) urls = url_map.bind_to_environ(environ) try: endpoint, values = urls.match() if endpoint == 'index': return Response('Welcome to homepage') elif endpoint == 'user_profile': return Response(f'User profile: {values["username"]}') elif endpoint == 'show_post': return Response(f'Post ID: {values["post_id"]}') except Exception as e: return Response('Not Found', status=404) return response(environ, start_response)

    高级功能

    1. 中间件实现

    Werkzeug 支持中间件,适合在请求和响应间添加自定义逻辑:

    from werkzeug.wrappers import Request, Responseimport timeclass PerformanceMiddleware:    def __init__(self, app):        self.app = app    def __call__(self, environ, start_response):        start_time = time.time()        response = self.app(environ, start_response)        end_time = time.time()        duration = end_time - start_time        print(f'Request processed in {duration:.4f} seconds')        return response

    2. 文件上传处理

    Werkzeug 提供了强大的文件上传功能,支持类型验证、大小限制和安全存储:

    from werkzeug.utils import secure_filenamefrom werkzeug.wrappers import Request, Responseimport osUPLOAD_FOLDER = '/path/to/uploads'ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg'}def allowed_file(filename):    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONSdef application(request):    if request.method == 'POST':        if 'file' not in request.files:            return Response('No file part', status=400)        file = request.files['file']        if file.filename == '':            return Response('No selected file', status=400)        if file and allowed_file(file.filename):            filename = secure_filename(file.filename)            file.save(os.path.join(UPLOAD_FOLDER, filename))            return Response('File uploaded successfully')    return Response('''        
    ''', mimetype='text/html')

    实际应用场景

    RESTful API 服务器

    Werkzeug 广泛应用于构建轻量级的 RESTful API 服务。以下是一个简单的用户管理 API 示例:

    from werkzeug.wrappers import Request, Responsefrom werkzeug.routing import Map, Ruleimport jsonusers = {}url_map = Map([    Rule('/users', endpoint='users_list', methods=['GET']),    Rule('/users/
    ', endpoint='user_detail', methods=['GET', 'POST', 'DELETE'])])class UserAPI: def __init__(self): self.url_map = url_map def dispatch_request(self, request): urls = self.url_map.bind_to_environ(request.environ) try: endpoint, values = urls.match() return getattr(self, f'on_{endpoint}(request, **values)') except Exception as e: return Response('Not Found', status=404) def on_users_list(self, request): return Response(json.dumps(list(users.keys())), mimetype='application/json') def on_user_detail(self, request, username): if request.method == 'GET': user = users.get(username) if user: return Response(json.dumps(user), mimetype='application/json') return Response('User not found', status=404) elif request.method == 'POST': user_data = json.loads(request.data.decode()) users[username] = user_data return Response('User created', status=201) elif request.method == 'DELETE': if username in users: del users[username] return Response('User deleted') return Response('User not found', status=404)def application(environ, start_response): request = Request(environ) app = UserAPI() response = app.dispatch_request(request) return response(environ, start_response)

    总结

    Werkzeug 是 Python Web 开发的核心工具库,提供了构建 Web 应用所需的全套功能。作为 Flask 等框架的基础,Werkzeug 帮助开发者高效处理 Web 请求、管理会话、处理文件上传等常见需求。通过掌握 Werkzeug,开发者不仅能深入理解 Web 框架的工作原理,还能构建自己的轻量级 Web 应用。在实际开发中,Werkzeug 的丰富功能和灵活设计将成为您成功的助力。

    转载地址:http://ruofk.baihongyu.com/

    你可能感兴趣的文章
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>
    Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
    查看>>
    Python 八大排序算法合集
    查看>>
    python 关于epoll的学习
    查看>>
    Python 内存管理
    查看>>
    Python 内嵌函数:它们有什么用处?
    查看>>
    Python 内置 sum 函数 vs. for 循环性能
    查看>>
    python 内置slice的用法
    查看>>
    Python 内置时间模块
    查看>>
    python 内部如何实现命名元组?
    查看>>
    Python 写Android App性能:入门到高级
    查看>>