python Django rest-framework 创建序列化工程步骤
11创建项目 2创建应用 3stting添加应用(apps)-添加制定数据库-修改显示汉字(zh-hans)-上海时区(Asia/Shanghai) 4主路由添加子路由 5应用里创建子路由 6创建数据表结构-model 7创建serializer序列化 8编写views视图 -------------------- INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'demo_app1.apps.DemoApp1Config', 'rest_framework', ] --------- DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'my_1', 'USER':'root', 'PASSWORD':'123456', 'HOST':'127.0.0.1', 'PORT':3306, } } LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True --------- from django.contrib import admin from django.urls import path from django.conf.urls import url,include urlpatterns = [ path('admin/', admin.site.urls), url(r'^',include('demo_app1.urls')), ] -------------------------------------- from django.db import models # Create your models here. #创建user_name数据表 class user_name(models.Model): nick_name = models.CharField(max_length=10,verbose_name='昵称') gender = models.BooleanField(default=0,verbose_name='性别') image = models.ImageField(upload_to='media',verbose_name='图片') add_time = models.DateField(auto_now_add=True,verbose_name='时间') phone = models.CharField(max_length=11,verbose_name='手机') class Meta: #制定数据表 db_table = 'user' #后端显示中文 verbose_name = '用户' #制定显示中文 verbose_name_plural = verbose_name def __str__(self): #返回显示第一个字段 return self.nick_name --------------------------- from rest_framework import serializers #导入rest-framework序列化模块seralizer from .models import user_name #导入外部数据表 class UserSerializer(serializers.Serializer): nick_name = serializers.CharField(max_length=20,required=True) gender = serializers.BooleanField(default=0,required=False) image = serializers.ImageField(required=False) add_time = serializers.DateField(required=False) phone = serializers.CharField(max_length=11,required=False) def create(self, validated_data): #在乎句酷修改前端返回来的数据 return user_name.objects.create(**validated_data) def update(self, instance, validated_data): #只想数据表 获取前端返回数据 字段名 只想数据表字段名 instance.nick_name = validated_data.get('nick_name',instance.nick_name) instance.gender = validated_data.get('gender',instance.gender) instance.image = validated_data.get('image',instance.image) instance.add_time = validated_data.get('add_time',instance.add_time) instance.phone = validated_data.get('phone',instance.phone) instance.save() #数据表保存修改 return instance #返回数据表 class UserModelSeralizer(serializers.ModelSerializer): #创建类--序列化数据模型 class Meta: #指向数据模型-数据表 model = user_name #过滤数据表所有字段 fields = '__all__' ----------------------------------- from django.conf.urls import url from . import views urlpatterns = [ url(r'^users/$',views.UserGenericAPIView.as_view()), url(r'users/(?P<pk>\d+)',views.UserGenericSingleView.as_view()), ]
-------------------------
views视图第一种写法最难 from .serializers import UserSerializer from .models import User from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status # 用户API视图 class UserAPIView(APIView): # 调用get方法 def get(self, request): users = User.objects.all() # 创建序列化器,many是集合(多个数据的时候)指定为True ser = UserSerializer(instance=users, many=True) # 返回响应 ser.data 是序列化之后的数据 return Response(ser.data, status=200) def post(self,request): # instance:我们从数据库查出来的;data是前端获取的 ser = UserSerializer(data=request.data) # is_valid校验是不是有效 if ser.is_valid(): ser.save() return Response(ser.data, status=200) return Response(ser.errors) class UserSingleView(APIView): def get(self, request, pk): user = User.objects.get(pk=pk) ser = UserSerializer(user) # status.HTTP_200_OK rest_framework的状态吗 return Response(ser.data, status=status.HTTP_200_OK) def put(self,request, pk): user = User.objects.get(pk=pk) # instance:我们从数据库查出来的;data是前端获取的 ser = UserSerializer(instance=user, data=request.data) if ser.is_valid(): ser.save() return Response(ser.data, status=200) return Response(ser.errors) def delete(self, request, pk): user = User.objects.get(pk=pk) user.delete() return Response(status=200)
views视图第二种写法难度还行
from django.shortcuts import render from .serializer import UserModelSeralizer,UserSerializer #导入序列化数据模型 from .models import user_name #导入数据表 from rest_framework.views import APIView #导入顶级APIVIEW接口视图模块 from rest_framework.response import Response #导入返回模块 from rest_framework import status #导入返回状态码模块 from rest_framework.generics import GenericAPIView #导入下一级APIVIEW接口视图 from rest_framework import mixins """ ------------------------------------ 导入mixins模块 mixins.ListModelMixin-------定义list方法,返回一个queryser的列表---对应GET请求 mixins.CreateModelMixin-----定义create方法,创建一个实例----对应POST请求 mixins。RetrieveModelMixin--定义retrieve方法,返回一个具体的实例--对应GET请求 mixins。UpdateModelMixin----定义update方法,对某个实例进行更新----对应PUT--PATH请求 mixins。DestroyModelMixin---定义delete方法,删除某个实例,-----delete请求对应 ------------------------------------ """ # Create your views here. class UserGenericAPIView(GenericAPIView,mixins.ListModelMixin,mixins.CreateModelMixin): queryset = user_name.objects.all() serializer_class = UserModelSeralizer def get(self,request): return self.list(request) def post(self,request): return self.create(request) class UserGenericSingleView(GenericAPIView,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin): queryset = user_name.objects.all() serializer_class = UserModelSeralizer def get(self,request,pk): return self.retrieve(request) def put(self,request,pk): return self.update(request) def delete(self,request,pk): return self.destroy(request)
===================================
views视图第三种精简写法 from rest_framework.generics import ListAPIView,RetrieveAPIView,DestroyAPIView,CreateAPIView,UpdateAPIView class cha(ListAPIView,CreateAPIView): queryset = user_name.objects.all() serializer_class = UserModelSeralizer class gai(RetrieveAPIView,UpdateAPIView,DestroyAPIView): queryset = user_name.objects.all() serializer_class = UserModelSeralizer
最后记得去数据表里添加数据======