【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表添加数据。


相关推荐
HealthScience23 分钟前
【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
ide·python·pycharm
羊小猪~~1 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
豌豆花下猫1 小时前
Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)
后端·python·ai
橘猫云计算机设计2 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
小伍_Five2 小时前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv
m0_748245342 小时前
python——Django 框架
开发语言·python·django
熬夜苦读学习2 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
java1234_小锋2 小时前
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
前端·python·flask·flask3
坚定信念,勇往无前3 小时前
Spring Boot 如何保证接口安全
spring boot·后端·安全
B站计算机毕业设计超人3 小时前
计算机毕业设计Python+DeepSeek-R1高考推荐系统 高考分数线预测 大数据毕设(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法