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':'',
'HOST':'127.0.0.1',
'PORT':,
}
}
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=,verbose_name='昵称')
gender = models.BooleanField(default=,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=,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=,required=True)
gender = serializers.BooleanField(default=,required=False)
image = serializers.ImageField(required=False)
add_time = serializers.DateField(required=False)
phone = serializers.CharField(max_length=,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
最后记得去数据表里添加数据======
python Django rest-framework 创建序列化工程步骤的更多相关文章
- Django Rest framework 之 序列化
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django restful Framework 之序列化与反序列化
1. 首先在已建好的工程目录下新建app命名为snippets,并将snippets app以及rest_framework app加到工程目录的 INSTALLED_APPS 中去,具体如下: IN ...
- Python Django rest framework
本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...
- Django REST Framework的序列化器是什么?
# 转载请留言联系 用Django开发RESTful风格的API存在着很多重复的步骤.详细可见:https://www.cnblogs.com/chichung/p/9933861.html 过程往往 ...
- Django Rest Framework(2)-----序列化详解(serializers)
REST framework中的序列化类与Django的Form和ModelForm类非常相似.我们提供了一个Serializer类,它提供了一种强大的通用方法来控制响应的输出,以及一个ModelSe ...
- Django rest framework之序列化小结
最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言 serializers是什么?官网是这样的”Serializers allow complex d ...
- django rest framework serializers序列化
serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用: - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(a ...
- [python]django rest framework写POST和GET接口
版本声明 python3.6.5 Django-2.0.6 djangorestframework-3.8.2 mysqlclient-1.3.12 1.写一个登录接口,不多说,直接上代码 login ...
- DRF Django REST framework 之 序列化(三)
Django 原生 serializer (序列化) 导入模块 from django.core.serializers import serialize 获取queryset 对queryset进行 ...
随机推荐
- MyBatis动态sql之${}和#{}区别
前言 接触mybatis也是在今年步入社会之后,想想也半年多了,缺没时间去系统的学习,只知道大概,也是惭愧. 不知道有多少刚毕业的同学和我一样,到现在还没仔仔细细去了解你每天都会见到使用到的框 ...
- 【Java】【3】BeanUtils.copyProperties();将一个实体类的值复制到另外一个实体类
正文: a,b为对象 BeanUtils.copyProperties(a, b); 1,BeanUtils是org.springframework.beans.BeanUtils, a拷贝到b 2 ...
- vue methods computed watch区别
一.methods和computed computed是计算属性,methods是方法. html: <p>Reversed message: "{{ reversedMessa ...
- input上传限定文件类型
input上传限定文件类型 accept="image/*" 限定为只能上传图片 accept=”audio/* 限定为只能上传音频 accept=”video/*” 限定 ...
- sql语句的各种模糊查询语句
一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况 ...
- java后台判断浏览器的版本
public static void main(String[] args) { String agent=request.getHeader("User-Agen ...
- NOIP2006能量项链
题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...
- Oracle物理DG自动切换——Dataguard Broker配置
1.前言部分 1.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能: ① Data Guard Broker 的配置 ② Fast-Start Failover 的配置 ③ Oracle D ...
- h5的坑
转自 http://www.mahaixiang.cn 解决各种坑 http://www.mahaixiang.cn/ydseo/1529.html
- Linux int 最大为多大
可以查看 /usr/include/limits.h 文件 里面定义好了各种类型的最大最小值 ... /* Minimum and maximum values a `signed int' can ...