瓶子+反应项目的微结构。

bottle-react的Python项目详细描述


image

图像

瓶子反应

*现在支持烧瓶!*请参阅 examples/hello_world/run_flask.py

说明

此库允许您从瓶子或 瓶。最初是为https://www.hvst.com/创建的。

示例(Hello World)

假设您有一个普通的jsx文件hello_world.jsx

varHelloWorld=React.createClass({render:function(){return(<divclassName='hello_world'><h1>Hello{this.props.name}!</h1><div>Thanksfortryingbottle-react!</div></div>);}})bottlereact._register('HelloWorld',HelloWorld)

还有一些python代码:

app=bottle.Bottle()br=BottleReact(app)@app.get('/')defroot():returnbr.render_html(br.HelloWorld({'name':'World'}))

调用路由时,将呈现react组件。见 examples/hello_world了解详细信息。

原则

我们为什么开发这个?我们有几个目标:

  • [X]在开发过程中不要交叉编译JavaScript。

webpack编译对于非平凡的应用程序来说太慢了。 (web开发的一个优点是alt-Tab/ctrl-R到 查看您的更改。)并且它在dev和 浪费开发者资源。

  • [X]不要将所有javascript合并到一个ginormous包中。

使您的用户每 部署太可怕了。而且99%的内容没有在大多数页面上使用。加载 使用http keep alive的多个资源总共需要40kb ms/文件,在实践中要快得多。

  • [x]react组件应该可以从python中组合。

我们的很多路线都是这样的:

@app.get('/something')defsomething():user=bottle.request.current_userreturnbr.render_html(br.HvstApp({'user':user.to_dict()},[br.HelloWorld({'name':user.name}),]))

react组件HvstApp(呈现标题栏和左边 nav)有两个参数。第一个是dict,它将是 作为json道具传递给react组件。第二个是 list将成为子项。这个列表可以(通常可以) 包含其他反应成分。

安装

sudopipinstallbottle-react

nginx集成

默认情况下(在生产模式下)bottle-react写入 /tmp/bottlereact/hashed-assets/。使nginx服务于这些文件 直接使用以下命令:

location ^~ /__br_assets__/ {
  alias /tmp/bottlereact/hashed-assets/;
  expires max;
}

服务器端渲染

要使用服务器端呈现,请安装npm包 `node-jsdom<;https://www.npmjs.com/package/node-jsdom>;``有:

$ sudo npm install -g node-jsdom

然后将True或可调用的传入render_server 参数。例如:

defrender_server():ua=bottle.request.environ.get('HTTP_USER_AGENT')returnutil.is_bot(ua)

顺便说一下…在为每个人启用它之前,运行一些基准测试。我们发现 它对总页面加载时间的影响很小,在 相当大的CPU开销和两倍的下载HTML大小。所以我们只有 对搜索机器人程序执行此操作(如上面的示例所示)。

您还可能需要填充一些缺少的浏览器功能。在 最少,react喜欢在内部运行时将自己置于window之下 nodejs,所以我们有:

// react in nodejs will put itself under window
if(typeofReact=='undefined'){React=window.React;}

在我们的application.js中,因为我们所有的代码都希望它是全局的。 同样,对于尚未实现的node-jsdom,您将 可能需要一些检查,如:

if(typeofDOMParser=='undefined'){// i guess we're not using DOMParser inside nodejs...
}

文件

请参阅full documentation

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异