直观对比django与DRF
首先我们来看我从知乎上保存的有关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相关推荐
- django前后端结合_一图看懂Django和DRF
一个总结 Django和DRF用了很久了,一直没有认真的总结一下,没什么总结比一张框图更暴力了.最近根据使用经验画了几张图,下面这两张图分别是Django的框图和Django REST Framwor ...
- Django和DRF - 邱乘屹的个人技术博客
Django和DRF DRF的优势 DRF,全称Django Restful Framework,是一个基于Django的Restful接口框架,是主要用来做API接口的,为前端提供数据的接口 DRF ...
- python drf_067.Python框架Django之DRF视图类
一 关于视图类的一下概念 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. ...
- java中fitlter,068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- python Django之 DRF(一)框架介绍、源码分析
文章目录 一.django rest framework 框架的介绍 1.什么是RESTful规范? 2.RESTful API的介绍 二.drf框架源码解读 1.drf框架的使用 2.APIView ...
- 【django】DRF
DRF DRF(Django REST framework)框架是建立在Django框架基础之上,本质上它就是Django的一个App,通过DRF能够快速设计符合RESTful规范的接口,并且它还提供 ...
- django框架-DRF工程之认证功能
1.在Rest framework中进行了一系列的封装,这个认证功能也是被封装到在DRF工程中的一种,想要使用,首先需要在配置文件中进行相应的配置 REST_FRAMEWORK = { 'DEFAUL ...
- model中的数据如何显示在html上,django – 使用DRF ModelViewSet和TemplateHTMLRenderer时如何访问模板中的数据?...
我有一个Django Rest Framework ModelViewSet,我正在尝试使用Template HTMLRenderer来显示 HTML.继 tutorial之后: from rest_ ...
- 四十七、python学习之Django框架(DRF框架三):Request与Response、视图与视图集、路由
Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据); 控制数据库查询的执行 一.Request与Response: 1. Request: ...
最新文章
- error when defining a rule - SAP loyalty management的积分定义规则
- PPT设计中的用图问题
- (待解)静态构造器和静态字段调用的相互嵌套
- 20155302 2016-2017-2 《Java程序设计》第六周学习总结
- Linux 线程到底是什么(比喻+图解)
- require('module') 是什么?
- 如今前端程序员还有前途吗?
- 牛客网--华为机试在线训练2:计算字符个数
- html5开发播放器,larkplayer: 插件化的 HTML5 播放器
- 使用mustache js模板引擎
- 【新技术】 移动支付过程中的NFC技术
- 第1章 SAAS-HRM系统概述与搭建环境
- labview技巧——获取网络时间
- 三级网络技术通关指南
- 执行taosdemo发生错误Unable to establish connection
- ios订阅的升级和降级
- 找准边界,吃定安全 | 高性能硬件防御问题难解?硬件加速引擎闪亮登场
- python 100days github_GitHub - fxianchao/Python-100-Days: Python - 100天从新手到大师
- 【超级简单但超级有用】让PDF书籍变身为可搜索文件
- ora-28040解决方法