drf专栏 03.使用drf实现前后端分离 01.前后端分离

 

# 01.使用drf实现前后端分离

[toc]{type: "ol", level: [2, 3, 4, 5]}

### 环境搭建
#### 安装django环境
```python
pip install django
```
#### 安装drf环境
```python
pip install djangorestframework
```
<br><br>


### 注册应用
```python
### settings.dev
'rest_framework',
```
<br><br>


### 添加用户相关路由
```python
project.urls
# 为了在drf路由调试界面使用用户相关的功能,需要引入以下路由
# 控制登入登出状态
path(r'auth-api', include('rest_framework.urls')),

# 配置后,会自动添加以下路由:
# http://127.0.0.1:8000/auth-api/login/
# http://127.0.0.1:8000/auth-api/logout/
```
![drf](imgs/01.png)
<br><br>


### 添加序列化工具
- **在django基础项目之上**{style="color:goldenrod"}
```python
### shop.serializers
from rest_framework import serializers
from shop.models import *


# 若此处继承ReadOnlyModelSerializer,则不再支持POST、PUT等
class CategoryModelSerializer(serializers.ModelSerializer):
    
    # 模型序列化类 这里的类不可以加()
    class Meta:
        # 指定需要序列化的模型类
        model = Category
        # 指定需要序列的字段
        fields = "__all__"


class GoodsModelSerializer(serializers.ModelSerializer):
    # 模型序列化类 这里的类不可以加()
    class Meta:
        # 指定需要序列化的模型类
        model = Goods
        # 指定需要序列的字段
        fields = "__all__"
```
<br><br>


### 创建视图类
```python
### shop.views
from rest_framework import viewsets
# from .models import *
# serializers中倒入了模型类
from .serializers import *


class CategoryModelViewSet(viewsets.ModelViewSet):
    # 分类视图继承ModelViewSet后,会拥有GET/POST/PUT...动词操作
    # 指定需要操作的模型列表
    queryset = Category.objects.all()

    # 指定序列化类
    # 方式1:通过属性指定
    serializer_class = CategoryModelSerializer

    # 方式2:通过函数指定
    # def get_serializer_class(self):
    #     return CategorySerializer


class GoodsModelViewSet(viewsets.ModelViewSet):
    queryset = Goods.objects.all()
    serializer_class = GoodsModelSerializer
```
<br><br>


### 创建路由
```python
### shop.urls
from django.urls import path, include
from rest_framework import routers
from .views import *


# SimpleRouter    DefaultRouter
# 获取默认路由,可以通过默认路由注册资源
router = routers.DefaultRouter()
router.register('categorys', CategoryModelViewSet)
router.register('goods', GoodsModelViewSet)

app_name = 'shop'
urlpatterns = [
    path("api/v1/", include(router.urls)),
]
```
<br><br>


### 分类路由
    如果配置了redis, 则开启redis: redis-server
#### 主路由
http://127.0.0.1:8000/shop/api/v1/
![drf](imgs/02.png)
#### 获取多个
http://127.0.0.1:8000/shop/api/v1/categorys/
![drf](imgs/03.png)
#### 获取单个
http://127.0.0.1:8000/shop/api/v1/categorys/2/
![drf](imgs/04.png)
<br><br>


### 分类+商品路由
#### 主路由
http://127.0.0.1:8000/shop/api/v1/
![drf](imgs/05.png)

#### 获取多个
    分页配置:设置了每页最多显示4个
http://127.0.0.1:8000/shop/api/v1/goods/
![drf](imgs/06.png)

#### 获取单个
http://127.0.0.1:8000/shop/api/v1/goods/2/
![drf](imgs/07.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值