前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python jinja2和云函数做页面渲染

使用Python jinja2和云函数做页面渲染

作者头像
羽翰尘
修改2019-11-26 16:57:24
1.4K0
修改2019-11-26 16:57:24
举报
文章被收录于专栏:技术向技术向

本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/blogseo_jinja2_scf/

背景

前段时间对博客进行了改版,详情可以看《使用Baas和Vue + Element UI的动态博客》. 由于使用了Vue,导致SEO出现困难。

当时提出了《单页面Vue网站无服务端实现静态化SEO》, 但只是一个设想,现在要具体实现。

目的

其实目的很简单,发送一些文章信息到云函数,用模板渲染函数填充到模板页面,保存到COS中即可。

技术选型

主要是模板渲染引擎,考虑了Django和Flask。但是发现他们都是一整套代码运行,无法将单独的渲染功能剥离出来。

后来发现Flask使用的是Jinja2,就采用了该模板引擎。

编码

scf:腾讯云无服务器云函数 cos: 腾讯云对象存储

scf获取json

所有的scf主函数都必须有eventcontext参数,scf接收到的post内容就在event['body']

代码语言:txt
复制
def main_handler(event, context):
    print(event['body'])

scf渲染

这里是从cos中读取模板页面,然后渲染获得html页面。

代码语言:txt
复制
def getHtml(json_meta):
    raw_content = getCOS('template/index.html')
    '''
    with open("./templates/index.html", 'r', encoding='utf8') as f:
        temp = f.read()
    '''
    temp = raw_content.decode('utf8')
    template = Template(temp)
    ret = template.render(json.loads(json_meta))
    return ret

scf保存到cos

保存html页面需要两个信息,一个是html文件内容,另一个是保存路径。路径信息已经包含在post内容中了,取出来即可。

在渲染和获取路径信息时分别解析了json,可能有点多余。

代码语言:txt
复制
body_dict = json.loads(event['body']) 
    if 'url' in body_dict:
        path = body_dict['url']
        if path.endswith('/'):
            path = path + 'index.html'
        cos_ret = saveCOS(html_content, path)

一些错误

由于不太会用api网关,导致使用api网关触发的云函数时总是出错,

代码语言:txt
复制
{"errno":403,"error":"Invalid scf response. expected scf response valid JSON."}

经观察Demo,发现需要这样返回

代码语言:txt
复制
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
    print("Received event: " + json.dumps(event, indent = 2)) 
    print("Received context: " + str(context))
    print("Hello world")
    return {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {'Content-Type': 'application/json'},
        "body": json.dumps({'name':'wenfengand'})
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 目的
  • 技术选型
  • 编码
    • scf获取json
      • scf渲染
        • scf保存到cos
        • 一些错误
        相关产品与服务
        云函数
        云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档