码迷,mamicode.com
首页 > 其他好文 > 详细

Django Restframework.1

时间:2019-06-08 14:36:22      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:serial   不同的   end   方法   als   code   erro   模型   temp   

官方文档:

中文版文档:

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")

 

Django Restframework.1

标签:serial   不同的   end   方法   als   code   erro   模型   temp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!