按要求启动和停止烧瓶
我正在编写一个应用程序,该应用程序可以揭示用烧瓶实现的简单RPC接口.但是,我希望它可以激活并停用该接口.另外,应该有可能在同一python解释器中运行该应用程序的多个实例,每个python解释器都有自己的RPC接口. 该服务仅暴露于Localhost,这是一个原型,因此我不担心安全性.我正在寻找一个小而简单的解决方案. 这里的明显方法似乎使用了烧瓶开发服务器,但是我找不到将其关闭的方法. 我创建了一个要曝光的功能的烧瓶蓝图,现在我正在尝试编写类似于此类似的RPC接口的类: class RPCInterface: def __init__(self, creating_app, config): self.flask_app = Flask(__name__) self.flask_app.config.update(config) self.flask_app.my_app = creating_app
0 2023-11-30
编程技术问答社区
使用内部Werkzeug开发服务器部署flask
为什么不建议在生产中使用烧瓶/werkzeug内部开发网络服务器?可能会出现什么样的问题? 我在问,因为在工作中,我被迫这样做,并每天使用Shift Cron重新运行服务! 解决方案 如果您每天都必须使用CRON作业来杀死和重新启动它,则您已经发现了使用Blask Development Server的 Major 问题.开发服务器不是为了稳定性,寿命,可配置性,安全性,速度或开发期间便利性以外的任何其他内容而写的. 适当的WSGI设置将更快,正确处理多个连接,最重要的是,对您来说,定期重新启动应用程序过程以清理任何可能堆积的crufft. 其他解决方案 我在没有超时的响应处理程序内有一个网络调用.出现了问题,它在等待一段时间(我正在使用requests模块),然后显然从未恢复过. 由于Werkzeug Server只有一个线程,因此整个开发服务器变得完全不可用.
0 2023-11-30
编程技术问答社区
从基于Flask的Python服务器上下载一个文件
我正在尝试使工作代码: http://code.runnable.com/uiidhkohv5jqaab6/how-to-to-downoal-download-a load-a-file-file-generated-gen-fly-on-the-the-fly-in-in-the-fly-in--in--in--in--in--in--in--in--in--in--in--in--in--in--in------------烧伤 我的目标是当用户访问我的Blask Base Python服务器上的Web服务时,能够在Web浏览器上下载文件. 所以我写了以下代码: @app.route("/api/downloadlogfile/") def DownloadLogFile (path = None): if path is None: self.Error(400) try: with open(pat
0 2023-11-29
编程技术问答社区
如何从内部错误中退出 uWsgi Worker(python werkzeug)?
我使用werkzeug用python编写了一个宁静的API.它使用nginx/uwsgi运行.当发生内部错误(丢失的Zookeeper会话)时,我想杀死工作流程,让UWSGI催生新的工人. 如果我致电sys.exit(0),则工人不会退出.也许SystemExit或异常被捕获到某个地方.我正在使用init脚本作为服务, exec $ root/run uwsgi-socket 127.0.0.1:3037 -master -master-workers 4- threads 10 -harakiri 60 - die-nie-term-term -thunder-lock-lazy-apps - lazy-apps- -py-tracebacker/tmp/ledgerwebtbsock -wsgi-file my_server.py-logto/my_server.py.py 解决方案 uwsgi --help | grep on-exception 返回一堆选
0 2023-11-12
编程技术问答社区
nginx + uwsgi + flask-禁用自定义错误页面
是否可以禁用Nginx的自定义错误页面 - 如果我可以称呼它们 - 显示我的框架的异常页面? 我真的看不到我的werkzeug调试器工具在html中呈现... 更新 好吧,我必须制作一个非常非常简单的烧瓶应用程序才能工作,我将发布位: /home/my_user/.virtualenvs/nginx-test/etc/nginx.conf worker_processes 1; events { worker_connections 1024; } http { server { listen 5000; server_name localhost; access_log /home/my_user/.virtualenvs/nginx-test/lib/nginx/access.log; error_log /ho
2 2023-11-12
编程技术问答社区
如何用Flask+uWSGI设置自动加载?
我正在寻找 uwsgi + uwsgi + django autoreload Mode for Blask. 解决方案 您可以尝试使用Substisord作为UWSGI应用程序的经理.它还具有一个手表功能,该功能自动加载文件或文件夹"触摸"/修改时. You will find a nice tutorial here: flask+nginx+uwsgi+usepstisord 其他解决方案 我正在运行UWSGI版本1.9.5和选项 uwsgi --py-autoreload 1 工作很棒 其他解决方案 如果您正在使用命令参数配置uwsgi,请通过--py-autoreload=1: uwsgi --py-autoreload=1 如果您使用的是.ini文件来配置uwsgi并使用uwsgi --ini,请将以下内容添加到您的.ini文件: py-autoreload = 1
4 2023-11-12
编程技术问答社区
X-Forwarded-Proto和Flask
我在中所描述的问题完全相同.这个问题的答案是一项很好的工作,但我不了解基本问题.在负载平衡器和Web/App服务器之间使用HTTP终止SSL非常普遍.哪一块堆栈不尊重X-Forwarded Proto?是Werkzeug吗?烧瓶? uwsgi? 在我的情况下,我使用的是AWS ELB(设置X-Forwarded Proto)=> nginx(沿X-Forwarded Proto向UWSGI转发).但是在Python应用程序中,我必须如上所述的问题中所述. 由于这是一种常见的部署方案,因此似乎应该有一个更好的解决方案.我想念什么? 解决方案 您缺少.请参阅烧瓶无需子类.只需将此中间件组件添加到WSGI堆栈中: # Werkzeug 0.15 and newer from werkzeug.middleware.proxy_fix import ProxyFix from flask import Flask app = Flask(__name__) app.
0 2023-11-12
编程技术问答社区
扩展werkzeug用户代理类
我想再浏览器扩展Werkzeug Useragent类.在不修改werkzeug库的源代码的情况下,我该怎么做?我是Python的新手,所以我对Mixin,继承,模块等有很小的想法. 我在文档中发现: 最好创建BaseRequest的自定义子类,并通过Mixins或Direct实现添加缺失的功能.这里是此类子类的示例: from werkzeug.wrappers import BaseRequest, ETagRequestMixin class Request(BaseRequest, ETagRequestMixin): pass 我应该将其放在我的代码的哪一部分上以及如何扩展Standart Useragent类?另外,我正在使用Werkzeug和烧瓶.预先感谢. 解决方案 惊人.一旦提出问题,答案就会出现:) from werkzeug.wrappers import BaseRequest, ETagRequestMixin class
0 2023-11-10
编程技术问答社区
为什么AWS Elastic Beanstalk Python会在优先级上插入一个'静态'规则,而不是其他所有规则?
我的python应用程序的"静态"路由规则在我的AWS弹性beanstalk应用程序中表现得很奇怪(并且其他任何地方)似乎覆盖了所有其他规则. 例如,在我的开发机和AWS上使用以下两个函数,在我的开发机和测试服务器上,routes routes routes最后列出静态规则,match_route显示其他非静态规则匹配以'开头的路径匹配'静止的/...'.正如预期的那样,如果我导航到一个以static/...开头的路径的页面,那么我的其他(非静态)规则之一就可以匹配.但是(仅)在AWS-EB上,服务器的静态规则被调用! 为什么和为什么AWS-EB如何将此规则"插入"其他所有规则?如何在AWS上禁用此行为,或在我的非AWS系统中复制它? application.url_map.host_matching = True # ... def routes(verbose, wide): """List routes supported by the applicat
使用 Flask 微框架将旧 URL 重定向到新 URL
我正在使用使用Python(我的情况下为2.6)的Blask Micro-Framework(基于Werkzeug)来替换当前网站. 核心功能和许多页面相同.但是,通过使用烧瓶,许多以前的URL与旧的URL不同. 我需要一种方法来以某种方式存储每个旧URL和新URL,因此,如果用户在旧的URL中键入旧URL,则将它们简单地转发到新的URL,并且一切对它们都有效. 有人知道这是否可以在烧瓶中吗? 预先感谢您的帮助: - ) 解决方案 类似的东西应该让您入门: from flask import Flask, redirect, request app = Flask(__name__) redirect_urls = { 'http://example.com/old/': 'http://example.com/new/', ... } def redirect_url(): return redirect(redire
0 2023-11-10
编程技术问答社区
基于子域路由的Flask应用
我想让我的顶级域作为与我网站不同部分相对应的各种子域的门户. example.com应路由到welcome.html模板. eggs.example.com应路由到该站点的"鸡蛋"小节或应用.我将如何在烧瓶中实现这一目标? 解决方案 @app.route() 参数以指定该路由的哪个子域是匹配的. Blueprint 也请subdomain参数来设置所有匹配蓝图中的路线. 您必须将app.config['SERVER_NAME']设置为基本域,以便烧瓶知道该与之匹配.除非您的应用在端口80或443(即生产中)运行,否则您还需要指定端口. . 从烧瓶1.0开始,您还必须在创建应用程序对象时设置subdomain_matching=True. from flask import Flask app = Flask(__name__, subdomain_matching=True) app.config['SERVER_NAME'] = "example.com:50
0 2023-11-10
编程技术问答社区
Flask url_for 生成 http URL 而不是 https
我正在使用url_for在用户登录时生成重定向URL: return redirect(url_for('.index', _external=True)) 但是,当我将页面更改为 https 连接时,url_for仍然给我 http .. 我想明确要求url_for在URL开始时添加 https . 您能指出我如何更改它吗?我看着烧瓶文档,没有运气. 解决方案 使用烧瓶0.10,将有一个比包装url_for更好的解决方案.如果您查看 A3C3A54FB056AA6F4076A0E7088C7 ,添加了_scheme参数.这意味着您可以执行以下操作: url_for('secure_thingy', _external=True, _scheme='https', viewarg1=1, ...) _scheme设置URL方案,生成像https://..的URL,而不是http://.但是,默认情况下
0 2023-11-10
编程技术问答社区
带有%的Flask URL参数没有得到正确处理
edit2:对于缺乏清晰度,我深表歉意. 我将提供几个值.第一个是我使用前端应用程序称呼的URL.第二个是调用urllib.unquote之前的值.第三是调用urlib.unquote. 后的值 前端: console.log('http://localhost:8080/v1/' + encodeURIComponent(name)) 后端: def f(param=''): print('*', param) param = urllib.unquote(param) print('**', param) ex. http://localhost:8080/v1/https%3A%2F%2Fgoogle.com * https:%2F%2Fgoogle.com ** https://google.com ex2. http://localhost:8080/v1/foo%2520bar * foo%20bar ** fo
0 2023-11-09
编程技术问答社区
在Flask单元测试中,我怎样才能在request-global `g`对象上模拟对象?
我有一个烧瓶应用程序,该应用程序正在设置before_filter中的数据库连接,与@app.before_request def before_request(): g.db = connect_db() 现在:我正在编写一些单位测试,但我要 希望他们击中数据库.我想用一个模拟对象替换g.db. 我的测试正在使用app.test_client(),如烧瓶文档中所示的在这里.一个示例测试看起来像 def test(self): response = app.test_client().post('/endpoint', data={..}) self.assertEqual(response.status_code, 200) ... 测试工作并通过,但是它们正在击中数据库,正如我所说,我想用模拟对象替换DB访问.我在test_client中看不到任何方式访问g对象或更改the the the the the the _filters.
2 2023-11-07
编程技术问答社区
Flask-headers没有转换为unicode?
我正在使用: 在Python开发小型Web服务 烧瓶(v.0.8) Storm Orm(v.0.19) apache with mod_wsgi 我有一个自定义的HTTP标头,Unison-UUID我在某个时候正在使用该标头来检索数据库中的信息. 这是我遇到麻烦的(为简单而重写): uuid = flask.request.headers['Unison-UUID'] store = storm.locals.Store(my_database) user = store.get(models.User, uuid) 类或多或少类似: class User(Storm): uuid = Unicode(primary=True) # Other columns.... 上面的代码以下面的方式失败: File "/Users/lum/Documents/unison-recsys/www/api/unison/unison.
4 2023-11-06
编程技术问答社区
是否有一些对象不可能创建一个深度拷贝?
执行以下行时,我会收到一条错误消息: img = copy.deepcopy(img_file_obj) img_file_obj具有以下类型: 不允许创建文件存储对象的深副本? 添加 我可能需要解释为什么我要创建文件存储对象的副本.在我执行的代码末尾: img_obj.save(fname) 但是,在此之前,我检查了文件有多大.我以下面的方式进行: img_obj.seek(0, os.SEEK_END) size = img.tell() 问题是检查大小"破坏"文件.如果我检查文件大小然后保存,则在磁盘上获得一个空文件.这就是为什么我想创建文件对象的副本,检查副本的大小,如果可接受大小,请在磁盘上保存原始文件对象. 解决方案 是否有不可能创建深层副本的对象? 是. 任何类型覆盖标准__deepcopy__的对象(或带有
4 2023-10-30
编程技术问答社区
用Flask处理大型文件的上传
用烧瓶处理非常大的文件上传(1 GB +)的最佳方法是什么? 我的应用程序本质上将多个文件分配给它们一个唯一的文件编号,然后根据用户选择的位置将其保存在服务器上. 我们如何运行文件上传作为背景任务,以便用户没有1小时的浏览器旋转,可以立即继续进行下一页? 烧瓶开发服务器能够获取大量文件(50GB花费1.5小时,上传很快,但将文件写入空白文件很慢) ) 如果我用扭曲包裹该应用程序,则该应用在大文件上崩溃 我已经尝试使用redis芹菜,但这似乎不是发布上传的选择 我在Windows上,Webervers的选项较少 解决方案 我认为,绕过很多小零件/块的非常简单的方法.因此,将有两个部分来制作这项工作,即前端(网站)和后端(服务器). 对于前端部分,您可以使用Dropzone.js之类的东西,其中不包括其他依赖项和不错的CSS.您所要做的就是将类dropzone添加到表单中,然后自动将其变成他们的特殊拖放字段之一(您也可以单击并选择). 但是,默认情况下
4 2023-10-28
编程技术问答社区
Python请求在localhost返回504
i运行Werkzeug Server(通过烧瓶)并尝试通过请求LIB连接到Localhost并获得504错误,但是如果打开> http://127.0.0.1:5000/在浏览器中 - 任何好的. 我的代码: import requests r = requests.get('http://127.0.0.1:5000/') print(r.content) 响应错误: b'\ r \ n \ r \ nerror:网关 超时\ r \ n 错误:Gateway timeout \ r \ n \ n \ r \ n \ n \ r \ n 尝试检索url http://127.0.0.0.1:5000/: \ r \ n 连接 拒绝 \ r \ n \ n \ r \ n 您的缓存管理员是网络管理员. 10.101.0.1(mikrotik httpproxy)\ r \ n \ r \ n' 烧瓶代码: from flask i
10 2023-10-21
编程技术问答社区
在通过nosetests测试Flask应用程序时,如何随请求发送cookies?
我在我的测试请求中发送cookie时遇到了一些困难.我尝试了这样的事情: # First request to log in, retrieve cookie from response response = self.app_client.post('/users/login', query_string={ data.. ) cookie = response.headers['Set-Cookie'] # Contains: user_hash=3f305370487731289a7f9bd8d379a1c2; Domain=.flowdev.com; Path=/ # Second request that requires the cookie response = self.app_client.get('/users/', headers={'Set-Cookie': cookie}) # Here i print out request.cookies.get('
4 2023-10-17
编程技术问答社区
通过nosetests测试flask应用程序时获取IP地址
我的应用程序取决于request.remote_addr,这是None当我通过使用app.test_client().post('/users/login', ....)的nosetest进行测试时 在进行测试时,如何模拟IP(127.0.0.1工作正常)? 我尝试了设置环境变量,并使用post()方法发送到标题,并且我已经挖掘了通过nosetests,werkzeugs和烧瓶文档,但是我尝试过的任何事情都没有使用. 解决方案 您可以使用 Envirator_base from flask import Flask, request import unittest app = Flask(__name__) app.debug = True app.testing = True @app.route('/') def index(): return str(request.remote_addr) class TestApp(unittest.TestCas
4 2023-10-17
编程技术问答社区