[python]pyramid 学习5 (render)

本文详细介绍了如何利用Pyramid框架构建RESTful API,并通过JSON、JSONP、Chameleon模板和Mako模板进行响应数据的渲染。文章还探讨了如何设置cookie和响应头部,以及如何实现404错误页面。通过实例代码,读者可以学习到如何在Web开发中高效地使用Pyramid框架。

输出json

from pyramid.view import view_config

@view_config(renderer='json')
def hello_world(request):
return {'content':'Hello!'}

config.add_view('myproject.views.my_view', renderer='json')

默认的render(string)

from pyramid.response import Response
from pyramid.view import view_config

@view_config(renderer='string')
def hello_world(request):
return {'content':'Hello!'}

输出

{'content': 'Hello!'}

JSONP Renderer

__init__.py

from pyramid.config import Configurator

config = Configurator()
config.add_renderer('jsonp', JSONP(param_name='callback'))

views.py

from pyramid.view import view_config

@view_config(renderer='jsonp')
def myview(request):
return {'greeting':'Hello world'}

 

Chameleon Template Renderers(*.pt *.txt)

http://chameleon.repoze.org/

 

 config.add_view('myproject.views.hello_world',
name='hello',
context='myproject.resources.Hello',
renderer='myproject:templates/foo.pt')

config.add_view('myproject.views.hello_world',
name='hello',
context='myproject.resources.Hello',
renderer='myproject:templates/foo.txt')


Mako Template Renderer(*.mak *.mako)

http://www.makotemplates.org/

 

 config.add_view('myproject.views.hello_world',
name='hello',
context='myproject.resources.Hello',
renderer='foo.mak')

config.add_view('myproject.views.hello_world',
name='hello',
context='myproject.resources.Hello',
renderer='mypackage:templates/foo.mak')

 

pyramid.response.Response 

from pyramid.view import view_config

@view_config(name='gone', renderer='templates/gone.pt')
def myview(request):
request.response.status = '404 Not Found'
return {'URL':request.URL}

 

Cookie

def view(request):
request.response.set_cookie('abc', '123')
return request.response

 

Header

request.response
response_content_type
response_headerlist // [('Set-Cookie', 'abc=123'), ('X-My-Header', 'foo')].
response_status
response_charset
response_cache_for











### 使用 `render` 的概念及其在 Python 框架中的实现 #### Flask 中的 `render_template` 在 Flask 框架中,`render_template` 是一个核心函数,用于渲染 HTML 页面并将动态数据传递给前端。它依赖于 Jinja2 模板引擎[^4]。 以下是使用 `render_template` 渲染页面的一个简单例子: ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): name = "Alice" return render_template('index.html', user_name=name) if __name__ == '__main__': app.run() ``` 在这个例子中,`render_template` 将会寻找名为 `index.html` 的模板文件,并将变量 `user_name` 传递进去。这个模板通常位于项目的 `templates` 文件夹下。 --- #### Django 中的 `render` Django 提供了一个更高级别的视图处理方式——通过 `render` 函数简化了响应过程。此函数不仅返回 HTTPResponse 对象,还自动加载指定的模板并填充上下文数据。 下面是一个简单的 Django 视图示例: ```python from django.shortcuts import render def home(request): context = { 'title': 'Home Page', 'message': 'Welcome to the Home Page!' } return render(request, 'home.html', context) ``` 在这里,`render` 接收三个主要参数:请求对象 (`request`)、模板名称 (`home.html`) 和上下文字典 (`context`)。这些数据会被注入到模板中以便显示[^1]。 --- #### Pyramid 中的 `renderer` Pyramid 支持多种渲染器 (Renderer),类似于 Flask 和 Django 的功能。开发人员可以通过装饰器或者配置来指定使用的渲染技术。 例如,在 Pyramid 中定义带有 JSON 输出的功能如下所示: ```python from pyramid.view import view_config @view_config(route_name='api_data', renderer='json') def api_view(request): data = {'key': 'value'} return data ``` 上述代码片段展示了如何利用 Pyramid 的 `renderer='json'` 来直接序列化字典为 JSON 格式的响应[^2]。 --- #### 总结对比 | **特性** | **Flask** | **Django** | **Pyramid** | |------------------|-----------------------------------|-----------------------------------|---------------------------------| | **模板引擎** | Jinja2 | DTP/Django Templates | Chameleon 或 Mako | | **渲染方法** | `render_template(template, **kwargs)` | `render(request, template, context)` | `@view_config(renderer=...)` | 以上表格总结了三种主流框架对于渲染的支持情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值