【DRF】DRF基本使用

系列文章目录

第一章 DRF基本使用


文章目录


一、DRF介绍:

DRF是Django Rest Framework单词的简写,是在Django框架中实现Restful API的一个插件,使用他可以非常方便的实现接口数据的返回。Django中也可以使用JsonResponse直接返回json格式的数据,但是DRF相比直接使用Django返回json数据有以下几个好处:

可以自动生成API文档,在前后端分离开发的时候进行沟通比较有用。

授权验证策略比较完整,包含OAuth1和OAuth2验证。

支持ORM模型和非ORM数据的序列化。

高度封装了视图,使得返回json数据更加的高效。

二、安装:

通过命令:pip install djangorestframework==3.15.1 ,即可安装。

三、基本使用:

  1. 注册rest_framework:
    安装完后,使用他还需要进行在settings.INSTALLED_APPS中进行安装。
py 复制代码
INSTALLED_APPS = [
    ...
    'rest_framework',
]
  1. 创建app和模型:
    创建一个名叫meituan的app,然后在meituan.models中创建以下模型:
py 复制代码
from django.db import models
from django.contrib.auth.models import User

class Merchant(models.Model):
    """
    商家
    """
    name = models.CharField(max_length=200,verbose_name='商家名称',null=False)
    address = models.CharField(max_length=200,verbose_name='商家',null=False)
    logo = models.CharField(max_length=200,verbose_name='商家logo',null=False)
    notice = models.CharField(max_length=200, verbose_name='商家的公告',null=True,blank=True)
    up_send = models.DecimalField(verbose_name='起送价',default=0,max_digits=6,decimal_places=2)
    lon = models.FloatField(verbose_name='经度')
    lat = models.FloatField(verbose_name='纬度')

    created = models.ForeignKey(User,on_delete=models.SET_NULL,null=True)

class GoodsCategory(models.Model):
    """
    商家商品分类
    """
    name = models.CharField(max_length=20,verbose_name='分类名称')
    merchant = models.ForeignKey(Merchant,on_delete=models.CASCADE,verbose_name='所属商家',related_name='categories')

class Goods(models.Model):
    """
    商品
    """
    name = models.CharField(max_length=200,verbose_name='商品名称')
    picture = models.CharField(max_length=200,verbose_name='商品图片')
    intro = models.CharField(max_length=200)
    price = models.DecimalField(verbose_name='商品价格',max_digits=6,decimal_places=2) # 最多6位数,2位小数。9999.99
    category = models.ForeignKey(GoodsCategory,on_delete=models.CASCADE,related_name='goods_list')

三、添加测试数据:

创建完模型后,运行makemigrations和migrate后把模型映射到mysql数据库中。然后在navicat中,把meituan_merchant.sql文件运行后,添加测试数据。

四、编写Serializers:

在meituan这个app中新创建一个文件serializers.py,然后添加以下代码:

py 复制代码
from rest_framework import serializers
from .models import Merchant,GoodsCategory,Goods

class MerchantSerializer(serializers.ModelSerializer):
    class Meta:
        model = Merchant
        fields = "__all__"

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = "__all__"

class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = "__all__"

五、编写视图:

使用drf我们可以非常方便的创建包含get/post等method的视图。在meituan.views中添加以下代码:

py 复制代码
class MerchantViewSet(ModelViewSet):
    serializer_class = MerchantSerializer
    queryset = Merchant.objects.all()

六、编写路由:

在meituan.urls中添加以下代码:

py 复制代码
from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter(trailing_slash=False)
router.register('merchant',views.MerchantViewSet,basename='merchant')

urlpatterns = [
] + router.urls

然后再在项目的urls.py中把meituan的路由添加进去:

py 复制代码
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('meituan/',include("meituan.urls"))
]

以后我们就可以使用不同的method向/meituan/merchant发送请求。比如用get,那么就会返回merchant的列表,比如用post,那么就会向merchant表添加数据。


相关推荐
Victor35625 分钟前
Redis(137)Redis的模块机制是什么?
后端
Victor35628 分钟前
Redis(136)Redis的客户端缓存是如何实现的?
后端
zhjadsf1 小时前
Huggingface_hub源码解析 - 简介篇
python·huggingface
20岁30年经验的码农1 小时前
Python语言基础文档
开发语言·python
清静诗意2 小时前
独立 IoT 客户端绕过 Django 生命周期导致数据库断链:诊断与修复
python·mysql·django·生命周期
不知更鸟5 小时前
Django 项目设置流程
后端·python·django
自动化代码美学6 小时前
【Python3.13】官网学习之控制流
开发语言·windows·python·学习
黄昏恋慕黎明7 小时前
spring MVC了解
java·后端·spring·mvc
G探险者9 小时前
为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异
数据库·后端·mysql
百锦再9 小时前
第18章 高级特征
android·java·开发语言·后端·python·rust·django