Django REST framework笔记(一)

一:REST framework简介

REST framework是什么?
Django REST框架是一个功能强大且灵活的工具包,用于构建Web API

REST framework的优点 :
1,Web可浏览API为开发人员带来了巨大的可用性。(The Web browsable API is a huge usability win for your developers.)
2,身份验证策略包括OAuth1a和OAuth2的程序包;
3,支持ORM和非ORM数据源的序列化;
4,可自定义;
5,丰富的文档和良好的社区支持;
6,受到国际知名公司的使用和信任,包括Mozilla,Red Hat,Heroku和Eventbrite。

 

在Django项目中使用:

1,在Django项目settings.py的INSTALLED_APPS中注册rest_framework 应用
2,每个视图类继承自 from rest_framework.views import APIView

下载:(使用清华源)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework

 

二:请求与响应

1,请求

REST framework 的 Request 类扩展自标准的 HttpRequest,并做了相应的增强,比如更加灵活的请求解析和认证

#使用组合的方式扩展了HttpRequest类
class Request(object):
    def __init__(self, request, parsers=None, authenticators=None,
                 negotiator=None, parser_context=None):
        self._request = request


#在REST framework中初始化request对象
class APIView(View):
    def initialize_request(self, request, *args, **kwargs):
        parser_context = self.get_parser_context(request)

        return Request(
            request,
            parsers=self.get_parsers(),
            authenticators=self.get_authenticators(),
            negotiator=self.get_content_negotiator(),
            parser_context=parser_context
        )

request.data :返回请求主体的解析内容,包括所有解析的内容,文件(file) 和 非文件(non-file inputs);不仅仅支持表单数据,还支持JSON数据;支持解析 POST 以外的 HTTP method ,比如 PUT,PATCH

request.query_params :等同于 request.GET;为了代码更加清晰可读,推荐使用 request.query_params

request.parsers :当前使用的解析器列表

request.user:通常会返回 django.contrib.auth.models.User 的一个实例,但其行为取决于正在使用的身份验证策略;若请求未经身份验证,则返回 django.contrib.auth.models.AnonymousUser 的实例

request.auth:返回任何附加的认证上下文(authentication context),通常可能是请求经过身份验证的令牌(token)实例

request.authenticators:当前使用的认证器(authenticator)列表

 

2,响应

REST framework 的 Response 类是 Django 的 SimpleTemplateResponse 的子类

构造方法: Response(data, status=None, template_name=None, headers=None, content_type=None)

data: 响应的序列化数据。

status: 响应的状态代码。默认为200。

template_name: 选择 HTMLRenderer 时使用的模板名称。

headers: 设置 HTTP header,字典类型。

content_type: 响应的内容类型,通常渲染器会根据内容协商的结果自动设置,但有些时候需要手动指定。

class Response(SimpleTemplateResponse):

    @property
    def rendered_content(self):
        #使用渲染器渲染序列化后的数据
        renderer = getattr(self, 'accepted_renderer', None)
        ret = renderer.render(self.data, accepted_media_type, context)

 

三:视图

REST framework 提供了一个 APIView 类,它继承于 Django 的 View 类。

1,View与APIView源码分析

View:

#views.py
from django.views import View

class BookView(View):
    pass
#-----------------------------
#urls.py

url(r'^books/$', views.BookView.as_view())    #项目启动时找到类方法as_view并执行
#View部分源码
class View(object):

    @classonlymethod
    def as_view(cls, **initkwargs):  #在视图类BookView的父类View中找到类方法as_view,执行它返回一个view函数

        def view(request, *args, **kwargs):   # 当对应url中的路径匹配成功时,调用执行此view函数
            self = cls(**initkwargs)
            return self.dispatch(request, *args, **kwargs)

        return view

    #分发方法
    def dispatch(self, request, *args, **kwargs):
        #http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head&#
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值