栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

DRF框架

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DRF框架

 APIView是继承自CBV的view类,因此先说一下CBV。APIView重写了request请求,本来reqest.POST只能访问urlencode的参数,却无法访问json格式的数据。重新的request能够访问json数据。

#路由部分
from django.urls import path

from app01 import views

urlpatterns = [
    path('book/', views.BookView.as_view())
]

#views类
#FBV
"""
面向过程的函数视图
"""
# def book(request):
#     if request.method == "GET":
#         return HttpResponse("GET请求...")
#
#     else:
#         return HttpResponse("POST请求...")


#CBV
from django.shortcuts import render, HttpResponse
from django.views import View


class BookView(View):

    def get(self, request):
        return HttpResponse("view get")

    def post(self, request):
        return HttpResponse("view post")

2、DRF框架

安装DRF

 APIView是DRF框架的一个view函数,重写了request函数,解决了之前post不接受json的数据。

#路由不变,只是重写了request请求的方法
from rest_framework.views import APIView


class BookView(APIView):

    def get(self, request):
        print("query_params:", request.query_params)
        return HttpResponse("view get")

    def post(self, request):
        print(request.data)
        return HttpResponse("view post")

    def delete(self, request):
        return HttpResponse(request.query_params)

二、Django数据库的设置

1、假如出现os问题,一般是settings文件没有引入os,直接import os即可

2、使用sqlite3数据库的settings文件设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

3、右边添加数据库 

4、使用mysql数据库的settings文件设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 数据库主机
        'PORT': 3306,  # 数据库端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456',  # 数据库用户密码
        'NAME': 'exx'  # 数据库名字
    }
}

5、数据库更新

构造表结构数据库python manage.py makemigrations

迁移数据库python manage.py migrate

三、序列化

from rest_framework import serializers

from rest_framework.response import Response


# 针对模型设计序列化器
class BookSerializers(serializers.Serializer):
    title = serializers.CharField(max_length=3)
    price = serializers.IntegerField(required=False)
    date = serializers.DateField(source="pub_date")


class BookView(APIView):

    def get(self, request):
        # 获取所有的书籍
        book_list = Book.objects.all()  # queryset[book01,book02,...]
        # 构建序列化器对象:
        serializer = BookSerializers(instance=book_list, many=True)

        '''
        temp = []
        
        for obj in book_list:
            d = {}
            d["title"] = obj.title
            d["price"] = obj.price
            # d["pub_date"] = obj.pub_date
            
            temp.append(d)
           
        '''

        return Response(serializer.data)

    def post(self, request):
        # 获取请求数据
        print("data", request.data)

        # 构建序列化器对象
        serializer = BookSerializers(data=request.data)
        # 校验数据
        if serializer.is_valid():  # 返回一个布尔值,所有字段皆通过才返回True,serializer.validated_data   serializer.errors
            # 数据校验通过,将数据插入到数据库中
            new_book = Book.objects.create(**serializer.validated_data)
            return Response(serializer.data)

        else:
            # 校验失败
            return Response(serializer.errors)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号