Django Restframework.1

官方文档:

中文版文档:

DRF特性:是基于Python打造的实现了RESTApi风格重量级框架

  • 可浏览API
  • 提供丰富认证
  • 支持数据序列化
  • 可以轻量嵌入,仅使用fbv
  • 强大的社区支持

实现:(需要在工程文件的settings.py文件中进行注册)

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘App.apps.AppConfig‘,
    ‘rest_framework‘, #注册rest_framework
    ‘LearnSerializer‘,
    ‘LearnRR‘,
]
  • Serializer(序列化)
    • 创建模型
class Game(models.Model):

    g_name = models.CharField(max_length=32)
    g_price = models.FloatField(default=1)
    • 创建路由
urlpatterns = [
    url(r‘^games/$‘, views.GamesView.as_view()),  #CBV模式
]
    • 创建序列化器
      • 在项目中创建serializers.py的文件
      • 在文件中创建序列化器
from rest_framework import serializers
from LearnSerializer.models import Game

class GameSerializer(serializers.ModelSerializer):

    class Meta:
        model = Game
        fields = ("id", "g_name", "g_price")
    • 创建视图类(get方法和post方法实现的功能)
class GamesView(View):

    def get(self, request):
        games = Game.objects.all()
        serializer = GameSerializer(games, many=True, context={‘request‘: request})
        return JsonResponse(serializer.data,  safe=False)

    def post(self, request):
        g_name = request.POST.get("g_name")
        g_price = request.POST.get("g_price")
        source_data = {
            "g_name": g_name,
            "g_price": g_price
        }
        serializer = GameSerializer(data=source_data)

        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)

        return JsonResponse(serializer.errors)

双R

  • request

    • django中的request只能接收GET,POST参数,PUT,PATCH的参数未做处理,需要自己手动处理
    • DRF中对Request进行重构, request.data
      • data可以接收POST,PUT,PATCH 参数
  • response
    • Django中TemplateResponse的子类
    • 可以根据请求客户端的不同来返回不同的内容

views转换 Wrapping

  1. @api_view装饰器

    1. 直接添加不能使用,需要添加允许请求的方法列表
    2. 将django的request转换成了restframework中的request
    3. 原来的HttpResponse可正常兼容
    4. 使用新的Response可以根据客户端自动转换显示结果
  2. 继承APIView
    1. 可兼容原有代码
    2. APIView继承自View
# 1
@api_view(["GET", "POST", "PUT"])
def index(request):
    print(request)
    print(type(request))

    data = "啦啦啦德玛西亚"

    return Response(data)

# 2
class HelloView(APIView):

    def get(self, request):
        print(request)
        print(type(request))

        return Response("Hello View")

原文地址:https://www.cnblogs.com/zbcdamao/p/10990605.html

时间: 2024-11-13 02:29:27

Django Restframework.1的相关文章

django restframework serializer 增加自定义字段

在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现这个目的. 假设现在有一个Animal模型,其中有name, type, country字段,country为外键.我们在序列化Animal时,需要额外增加外键country的area信息. 方法一: 1.首先,在django的model中定义property class Animal(models

django restframework 初识

简介 从后台开发的角度来说,不借助restframework框架一样可以用django来写接口.但是有了restframework之后,我们用restframework会更加方便,因为这个框架帮我们做了很多事,使用这个框架来开发接口会更加便捷.restframework里面大致实现了以下功能: 权限 认证 访问评率限制 序列化 路由 视图 分页 渲染器 解析器 版本 CBV和FBV 首先django不存在CBV和FBV哪种方式更好的说法,它们的本质都是一样的,写在路由里都是对应一个函数,CBV的

基于Django RESTframework设计Restful API

导语 ? 关于RESTful的问题,在最近的面试中遇到很多,之前有过一定的了解,但没有系统性的总结分析.所以现在结合Django RESTframework来加深对RESTful的理解,同时梳理这过程的一些知识点. 什么是RESTful? ?这个问题是最容易想到的,首先要分析这个问题,网上的其他文章都会讲到有关REST(Representational State Transfer),中文翻译:"表述性状态传递",再白话一点就是对资源的表述性状态传递.刚开始,看到这里头都大了,那我们来

测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架

一.思考?? 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Django restframework能快速创建符合restful风格的API接口 通过Django restframework框架提供的序列化器.视图集可轻轻松松实现 简单高效,学习成本低 二.搭建项目工程???? 1.创建项目 打开pycharm 创建项目 使用豆瓣源安装Django Django

Django rest-framework框架

rest-framework框架有哪些作用? 一共有十点. 序列化 queryset对象转化为json给客户端返回. 视图 面试题:你写的类都继承过哪些类? 认证 权限 访问频率限制 路由控制 as_view()加参数,不加参数 解析器 分页 渲染器 查看详情. 版本 查看详情. 根据Django请求声明周期,执行顺序: 路由-->视图-->版本-->认证-->权限-->频率-->解析器-->序列化-->分页-->渲染 出现这种问题: 如何解决? se

django restframework解析器和分页

解析器 由来 django请求的原始数据是放到request.body当中,django默认的解析器只负责解析同时满足下面两个条件的数据 请求头 Content-Type: application/x-www-form-urlencoded 数据格式要求name=alex&age=18 只要这两个条件有一个不满足,django默认的解析器就不会把数据解析到request.POST里. 情况一: $.ajax({ url: ... type: POST, # 请求头默认是 application/

Django学习系列之django restframework

曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style).所以我们的选择变得很简单:前端ajax访问后端的RESTful API对资源进行操作Django中有一些可选的REST framework,比如django-piston,django-tasypie. 但是我和google(呵呵,不好意思)推荐这个:Django REST framework django-framework就是定义一个url,可以利用这个url

[Django rest-framework] 1-Serialization

个人粗浅的理解,欢迎批评指正 什么是序列化? 后端任务无非对数据库的增查删改,操作数据库无非操作字段,序列化可以让我们轻松的对数据库增(serializer.create)改(serilaizer.update)的同时不用担心提交的key/value是否合法(serializer.is_valid),并轻松的将dict 格式转为更通用的json格式(JSONRenderer) 什么是反序列化? 将json转为(JSONParser().parse(stream))可序列化的dict(serial

[Django rest-framework] 3-Requests and Responses

Request Objects 之前通过request.GET 获取get请求的参数,通过request.POST获取post请求的参数 但是request.POST只能处理post请求的form类型的参数 现在使用request.data 来获取参数,不但能获取任意格式参数,而且能处理post,put,delete和patch多种请求 Response Objects Response可以根据客户端请求的响应格式,响应的返回所需格式 Status codes 引入status模块,可以使用更明