Django-restframework16 Render

本文详细介绍了Django Rest Framework中的渲染器,包括如何决定使用何种渲染器、设置渲染器的方法,以及各种渲染器如JSONRenderer、TemplateHTMLRenderer、BrowsableAPIRenderer的特性和用法。还讨论了自定义渲染器、高级渲染器使用、设计自己的媒体类型以及HTML错误响应视图函数,并提到了第三方渲染器包的使用情况。
摘要由CSDN通过智能技术生成

在模版响应返回给客户端之前,必须被渲染。渲染进程将模板和正文之间中间内容渲染成客户端能够接受的二进制流

1.如何决定使用什么渲染器

渲染器通常和解析器一样由一系列类列表组成
一般检查请求头,另外就是路由后缀( http://example.com/api/users_count.json

2.设置渲染器

通过settings文件设置

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    )
}

单一APIView

from django.contrib.auth.models import User
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView

class UserCountView(APIView):
    """
    A view that returns the count of active users in JSON.
    """
    renderer_classes = (JSONRenderer, )

    def get(self, request, format=None):
        # 返回当前在线用户数量
        user_count = User.objects.filter(active=True).count()
        content = {
  'user_count': user_count}
        return Response(content)

使用装饰器

@api_view(['GET'])
@renderer_classes((JSONRenderer,))
def user_count_view(request, format=None):
    """
    A view that returns the count of active users in JSON.
    """
    user_count = User.objects.filter(active=True).count()
    content = {
  'user_count': user_count}
    return Response(content)

3.渲染器顺序

请求中如果没有指定接受的渲染器类型(Accept),默认使用renderer_classes中的第一个渲染器进行解析
如果你的接口包含的视图函数既能提供正常的网页访问,又能作为API接口返回响应对象,那么你应该考虑使用TemplateHTMLRenderer作为默认renderer.

4.渲染器指南

JSONRenderer

以utf-8进行编码,返回JSON数据
默认风格包含unicode字符, 返回的数据十分紧凑,没有不必要的空格。如果想要缩进,可以在请求的时候设置‘intent’参数,如Accept: application/json; indent=4,如

{
    "unicode black star": "★",
    "value": 
Django-rest-framework中,可以使用Django自带的邮件发送功能或第三方库进行邮件发送。如果要自定义邮件内容,可以使用Django自带的邮件模板。 1. 创建邮件模板 在Django项目的templates目录下创建一个名为`email`的文件夹,然后在该文件夹下创建一个名为`email_template.html`的文件,作为邮件模板。模板中可以使用Django的模板语言进行变量替换,例如: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>邮件标题</title> </head> <body> <p>尊敬的{{ username }}:</p> <p>您的账号已经成功注册!</p> </body> </html> ``` 2. 发送邮件 在发送邮件的代码中,使用Djangorender_to_string函数将邮件模板渲染为HTML内容,然后将HTML内容作为邮件的正文发送出去,例如: ```python from django.core.mail import send_mail from django.template.loader import render_to_string def send_registration_email(user_email, username): subject = '账号注册成功' # 邮件主题 message = '' # 纯文本邮件内容 from_email = 'noreply@example.com' # 发件人邮箱 recipient_list = [user_email] # 收件人邮箱列表 html_message = render_to_string('email/email_template.html', {'username': username}) # 邮件HTML内容 send_mail(subject, message, from_email, recipient_list, html_message=html_message) ``` 以上代码中,使用render_to_string函数将邮件模板渲染为HTML内容,并将HTML内容作为html_message参数传递给send_mail函数,从而发送包含自定义内容的邮件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆豆orz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值