用于Prerender的Starlette中间件。

prerender-python-starlette的Python项目详细描述


预渲染Python Starlette

buildcodecovDependabot StatusPyPI version


文档https://BeeMyDesk.github.io/prerender-python-starlette/

源代码https://github.com/BeeMyDesk/prerender-python-starlette


简介

Google, Facebook, Twitter, and Bing are constantly trying to view your website... but Google is the only crawler that executes a meaningful amount of JavaScript and Google even admits that they can execute JavaScript weeks after actually crawling. Prerender allows you to serve the full HTML of your website back to Google and other crawlers so that they don't have to execute any JavaScript. Google recommends using Prerender.io to prevent indexation issues on sites with large amounts of JavaScript.

Prerender is perfect for Angular SEO, React SEO, Vue SEO, and any other JavaScript framework.

This middleware intercepts requests to your Node.js website from crawlers, and then makes a call to the (external) Prerender Service to get the static HTML instead of the JavaScript for that page. That HTML is then returned to the crawler.

{ema7}

这个库是Starlette的Prerender中间件的Python实现。它应该可以完美地与FastAPI一起工作,而且很可能与任何ASGI框架一起工作。在

安装

pip install prerender-python-starlette

使用

^{pr2}$

参数

  • prerender_service_url:Prerender服务器的URL。{cd2>默认为环境变量。在
  • prerender_service_username:Prerender服务器的HTTP基本身份验证用户名。默认为PRERENDER_SERVICE_USERNAME环境变量。在
  • prerender_service_password:Prerender服务器的HTTP基本身份验证密码。默认为PRERENDER_SERVICE_PASSWORD环境变量。在
  • prerender_service_token:在X-Prerender-Token头中设置的令牌。默认为PRERENDER_SERVICE_TOKEN环境变量。在
  • crawler_user_agents:要拦截的爬虫程序用户代理的列表。默认为DEFAULT_CRAWLER_USER_AGENTS列表。在
  • extensions_to_ignore:要忽略的文件扩展名列表。默认为DEFAULT_EXTENSIONS_TO_IGNORE列表。在
  • whitelist:白名单的路径模式列表。不会预呈现与列表中的模式不匹配的路径。{cd15}默认为^。在
  • blacklist:黑名单的路径模式列表。与列表中的模式匹配的路径不会被预呈现。默认为None。在
  • before_render:在预呈现之前调用了异步函数。如果它返回一个HTMLResponse,它将被视为缓存,并将绕过对Prerender服务器的调用。默认为None。在
  • after_render:在预呈现之后调用了异步函数。默认为None。在

缓存示例

fromstarlette.applicationsimportStarlettefromstarlette.middlewareimportMiddlewarefromprerender_python_starletteimportPrerenderMiddlewareasyncdefbefore_render(request:Request)->Optional[HTMLResponse]:cached_response=awaitcache.get(f"prerender:{request.url.path}")ifcached_response:returnHTMLResponse(cached_response)returnNoneasyncdefafter_render(request:Request,response:HTMLResponse,cached:bool)->None:ifnotcached:awaitcache.set(f"prerender:{request.url.path}",response.body.decode(response.charset))routes=...middleware=[Middleware(PrerenderMiddleware,before_render=before_render,after_render=after_render),]app=Starlette(routes=routes,middleware=middleware)

发展

安装环境

您应该安装了Pipenv。然后,可以安装依赖项:

pipenv install --dev

之后,激活虚拟环境:

pipenv shell

运行单元测试

您可以使用以下各项运行所有测试:

make test

或者,您也可以自己运行pytest

pytest

格式化代码

执行以下命令以应用isortblack格式:

make format

许可证

这个项目是根据麻省理工学院的许可条款授权的。在

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

推荐PyPI第三方库


热门话题
java如何使用Scanner用文件中的文本填充数组,然后从数组中随机选择文本?   java如何在windows中使用BlueJ进行无限缓冲   java为什么JPA中存在“太多连接”?   java如何在recyclerview中创建和填充公共字段?   当我在Google Play上发布应用程序时,很多设备都不支持java xWalkWebView 64位   HTML文档文本中位置或偏移量的java含义   java如何在JTextArea中打开文件,并使用FileReader和FileWriter类进行读写   java`elementtobelickable`只是检查它是否可见并已启用   安卓中图像下方的java绘图文本   java我如何为我的Android应用程序启用Google signin,使其只允许来自特定Google域的用户?   在超级Java调用中调用父级的内部类   java在没有定时器的情况下运行代码   java使用hashset值作为hashmap中的键   java我需要为我的应用程序获取API密钥,为此,我需要证书的MD5签名   java编写一个方法来查看字符串x是否包含字母“G”