首先我们来看我从知乎上保存的有关django与DRF的流程图,思考两者之间的区别与联系!

Django就是将数据库的东西通过ORM的映射取出来,通过view文件,按照template文件排出的模板渲染成HTML。当用户请求相应的url时,返回相应的结果。

DRF是将数据库的东西通过ORM的映射取出来,通过view和serializers文件绑定REST接口,当前端请求时,返回序列化好的json。

那么DRF在Django的基础上做了什么呢?

DRF是Django的超集,去掉了模板的部分,提供了一个REST的接口,同时也提供了满足该接口的代码工作流。同时,在REST的规范下,升级了权限和分页等功能,增加了限流和过滤搜索等功能。

接下来我们引入DRF的概念

一、DRF是 Django rest framework的简称,是一种后台框架,它可以帮我们封装好序列化的底层实现,使django具备了restful接口。

二、restful API设计规范:

1.API与用户的通信协议,总是使用https协议

2.域名  子域名方式  url方式

3.版本

url,如:https://api.example.com/v1/  用/v什么表示

请求头  跨域时,引发发送多次请求

面向资源编程:路径、视图网上任何东西都是资源,url里必须是名词或名词复数

4、Method

GET(查询数据) 从服务器取出资源(一项或多项)

POST(创建数据) 在服务器新建一个资源

PUT(修改数据) 在服务器更新资源(客户端提供改变后的完整资源)

PATCH(修改属性) 在服务器更新资源(客户端提供改变的属性)

DELETE(删除数据) 在服务器删除资源

5、过滤、分页、排序:通过在URL上传参的形式传递搜索条件

6、状态码

http状态码:

公司内部状态码:查询成功  200

查无此人  404

查询出错,请稍后再试  500

三、API View使用

这里我们先省略,下面我们做个例题来详细说明。

最后我们一起来做一个习题感受一下两者魅力吧!

一、django (View)

首先我们要先进入Django环境,创建新项目,从终端进入自己的文件夹输入:

workon django
django-admin startproject project02

将文件拖入pycharm,配置环境,运行。

如上图输入python manage.py startapp user 创建子应用

接下来配置settings

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 跨域'corsheaders',# 注册子应用'user'
]
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','corsheaders.middleware.CorsMiddleware', # 配置跨域'django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME':  'project02', #项目名'HOST':'localhost',  'PORT':3306, # 端口号'USER':'root',  # 数据库用户名'PASSWORD':'zf1234'  # 数据库密码}
}

设置models模型类

from django.db import models# Create your models here.
class User(models.Model):id = models.IntegerField(primary_key=True)name = models.CharField(max_length=20)classroom = models.CharField(max_length=20)class Meta:db_table = 'user'

终端执行:

python manage.py makemigrations
python manage.py migrate
迁移生成表

创建views视图

from django.views import View
from django.http.response import JsonResponse
from .models import *# 查询、添加全部、
class UserView(View):def get(self,request):# 1、获取查询集users = User.objects.all()# 2、解析数据data = [{'id':user.id,'name':user.name,'classroom':user.classroom}for user in users]# 3、返回响应return JsonResponse(data,safe=False)def post(self,request):# 1、接收添加的数据id = request.POST.get('id')name = request.POST.get('name')classroom = request.POST.get('classroom')# 2、校验参数if not all([id,name,classroom]):return JsonResponse({'msg':'缺少参数'},status=400)# 3、入库try:User.objects.create(id=id,name=name,classroom=classroom)except Exception as e:print(e)return JsonResponse({'msg': '添加失败'}, status=500)# 4、返回响应return JsonResponse({'msg': '添加成功'}, status=201)#   查询单个、修改、删除
class UserDetail(View):def get(self,request,pk):try:user = User.objects.get(id=pk)except User.DoesNotExist:return JsonResponse({'msg':'NOT FOUND'},status=404)# 解析对象data = {'id': user.id,'name': user.name,'classroom': user.classroom}# 返回响应return JsonResponse(data, safe=200)def post(self,request,pk):try:user = User.objects.get(id=pk)except User.DoesNotExist:return JsonResponse({'msg': 'NOT FOUND'}, status=404)name = request.POST.get('name',user.name)classroom = request.POST.get('classroom', user.classroom)user.name = nameuser.classroom = classroomuser.save()# 返回响应return JsonResponse({'msg':'更新成功'},status=201)def delete(self,request,pk):# 先根据条件查询,然后删除User.objects.filter(id=pk).delete()# 返回响应return JsonResponse({'msg': '删除成功'}, status=204)

最后配置路由

from django.contrib import admin
from django.urls import path
from user.views import *urlpatterns = [path('admin/', admin.site.urls),path('user/',UserView.as_view()),path('user/<int:pk>/', UserDetail.as_view()),
]

二、APIView

迁移生成表后,需要添加序列化器文件

from rest_framework.serializers import ModelSerializer
from user.models import Userclass UserSer(ModelSerializer):class Meta:model = Userfields = '__all__'

创建views视图

from rest_framework.views import APIView
from rest_framework.response import Response
from user.models import User
from user.sers import UserSerclass User1(APIView):def get(self,request):id = request.query_params.get('id')user_data = User.objects.filter(id=id)ser = UserSer(user_data,many=True)data = ser.datareturn Response({'code':0,'data':data})def post(self,request):data = request.dataser = UserSer(data=data)ser.is_valid()ser.save()return Response({'code':201})def put(self,request):id = request.data.get('id')data = request.datauser_data = User.objects.get(id=id)ser = UserSer(user_data,data=data)ser.is_valid()ser.save()return Response({'code': 201})def delete(self,request):id = request.query_params.get('id')User.objects.filter(id=id).delete()return Response({'code': 204})

最后配置路由

from django.contrib import admin
from django.urls import path
from user.views import *
urlpatterns = [path('admin/', admin.site.urls),path('user1/',User1.as_view()),
]

三、ModelViewSet

视图views中

from user.sers import UserSer
from rest_framework.viewsets import ModelViewSet
class User3(ModelViewSet):queryset = User.objects.all()serializer_class = UserSer
路由
from django.contrib import admin
from django.urls import path,include
from user.views import *
# 导入ModelViewSet所需导包
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('user1',User3)urlpatterns = [path('admin/', admin.site.urls),path('', include(router.urls)),
]

直观对比django与DRF相关推荐

  1. django前后端结合_一图看懂Django和DRF

    一个总结 Django和DRF用了很久了,一直没有认真的总结一下,没什么总结比一张框图更暴力了.最近根据使用经验画了几张图,下面这两张图分别是Django的框图和Django REST Framwor ...

  2. Django和DRF - 邱乘屹的个人技术博客

    Django和DRF DRF的优势 DRF,全称Django Restful Framework,是一个基于Django的Restful接口框架,是主要用来做API接口的,为前端提供数据的接口 DRF ...

  3. python drf_067.Python框架Django之DRF视图类

    一 关于视图类的一下概念 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. ...

  4. java中fitlter,068.Python框架Django之DRF视图集使用

    一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  5. python Django之 DRF(一)框架介绍、源码分析

    文章目录 一.django rest framework 框架的介绍 1.什么是RESTful规范? 2.RESTful API的介绍 二.drf框架源码解读 1.drf框架的使用 2.APIView ...

  6. 【django】DRF

    DRF DRF(Django REST framework)框架是建立在Django框架基础之上,本质上它就是Django的一个App,通过DRF能够快速设计符合RESTful规范的接口,并且它还提供 ...

  7. django框架-DRF工程之认证功能

    1.在Rest framework中进行了一系列的封装,这个认证功能也是被封装到在DRF工程中的一种,想要使用,首先需要在配置文件中进行相应的配置 REST_FRAMEWORK = { 'DEFAUL ...

  8. model中的数据如何显示在html上,django – 使用DRF ModelViewSet和TemplateHTMLRenderer时如何访问模板中的数据?...

    我有一个Django Rest Framework ModelViewSet,我正在尝试使用Template HTMLRenderer来显示 HTML.继 tutorial之后: from rest_ ...

  9. 四十七、python学习之Django框架(DRF框架三):Request与Response、视图与视图集、路由

    Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据); 控制数据库查询的执行 一.Request与Response: 1. Request:   ...

最新文章

  1. error when defining a rule - SAP loyalty management的积分定义规则
  2. PPT设计中的用图问题
  3. (待解)静态构造器和静态字段调用的相互嵌套
  4. 20155302 2016-2017-2 《Java程序设计》第六周学习总结
  5. Linux 线程到底是什么(比喻+图解)
  6. require('module') 是什么?
  7. 如今前端程序员还有前途吗?
  8. 牛客网--华为机试在线训练2:计算字符个数
  9. html5开发播放器,larkplayer: 插件化的 HTML5 播放器
  10. 使用mustache js模板引擎
  11. 【新技术】 移动支付过程中的NFC技术
  12. 第1章 SAAS-HRM系统概述与搭建环境
  13. labview技巧——获取网络时间
  14. 三级网络技术通关指南
  15. 执行taosdemo发生错误Unable to establish connection
  16. ios订阅的升级和降级
  17. 找准边界,吃定安全 | 高性能硬件防御问题难解?硬件加速引擎闪亮登场
  18. python 100days github_GitHub - fxianchao/Python-100-Days: Python - 100天从新手到大师
  19. 【超级简单但超级有用】让PDF书籍变身为可搜索文件
  20. ora-28040解决方法

热门文章

  1. 宝宝防晒 夏日妈妈的日常工作
  2. Ardupilot移植经验分享(1)
  3. 王者荣耀上官婉儿的语录
  4. PostgreSQL 11 与 pgAdmin4 在 Windows 平台上的安装和使用
  5. Java基础知识(八) Java平台与内存管理
  6. 高仿知乎android,Android高仿知乎首页Behavior
  7. android基础的博客,【复习】Android基础
  8. 正则匹配中英文全部特殊符号
  9. LVGL 7.8.1生成二维码例程
  10. AcWing 4489. 最长子序列