单表使用RestFramework进行CURD操作
-
首先创建子应用
python manage.py startapp accountsCURD
-
先将子应用注册到DRF_project中(setting.py)
INSTALLED_APPS = [ ...... 'accountsCURD', ...... ]
-
由于要对accounts表进行CURD,所以我们必须创建accunts表对应的model
-
Django 提供了根据表生成模型的命令 inspectdb
python manage.py inspectdb 执行此命令后,会在控制台输出model模型。 python manage.py inspectdb >accountsCURD/models.py 执行此命令将控制台的模型导入到models类中
-
-
创建序列化器serializers
-
作用:
1.序列化
2.反序列化
-
序列化器的规则
1.和模型类、字段名字一样
2.和模型类、字段类型一样
3.和模型类、字段选项一样
4.自定类继承于Serializers
-
-
创建通用序列化器类serializers.py
- 方法1
#read_only=True, 序列化的时候使用id 反序列化的时候不使用id
#label 字段说明
from rest_framework import serializers
# 1 定义账号序列化器
class AccountsSerializer(serializers.Serializer):
id = serializers.IntegerField(label="id", read_only=True)
name = serializers.CharField(max_length=255, label="姓名")
account = serializers.CharField(max_length=255, label="账号")
password = serializers.CharField(max_length=255, label="密码")
status = serializers.CharField(max_length=255, label="状态")
factory = serializers.CharField(max_length=255, label="工厂")
workshop = serializers.CharField(max_length=255, label="车间")
group_no = serializers.CharField(max_length=255, label="组别")
- 方法2
from rest_framework import serializers
from accountsCURD.models import Accounts
class AccountModelSerializer(serializers.ModelSerializer):
"""
定义序列化器 -->>>转换校验
fields ="__all__"代表匹配所有字段
"""
class Meta:
model = Accounts
fields = "__all__"
- 编写视图views.py
from rest_framework.viewsets import ModelViewSet
from accountsCURD.models import Accounts
from accountsCURD.serialzers import AccountModelSerializer
class AccountModelViewSet(ModelViewSet):
serializer_class = AccountModelSerializer
queryset = Accounts.objects.all()
- 路由配置
1.在子应用中创建路由配置。建立urls.py文件
from accountsCURD import views
from rest_framework.routers import DefaultRouter
urlpatterns = [
]
# drf中的路由
router = DefaultRouter()
router.register(r'accounts/$', views.AccountModelViewSet)
urlpatterns += router.urls
2.与主项目中路由关联
-
在主项目urls.py中关联子路由
url(r'^', include('accountsCURD.urls'))
需要导入依赖
3.运行项目 ,浏览器打开
-
到此 针对单表的CURD restFramewoke已经替我们做好了。