| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 2021年9月22日所学(个人笔记) -> 正文阅读 |
|
[Python知识库]2021年9月22日所学(个人笔记) |
DRF diango-rest framework:封装过以后的Django框架,DRF是一个强大灵活的Django工具包,用于在Web后台构建Restful接口 Restful是一种网络应用程序的设计风格和开发方式 Restful指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是Restful 只要符合Restful规定的条件,就具备Restful的风格 它主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 rest framework和Django属于父子关系,rest framework封装了Django Restful?格就是把所有数据都当做资源,对表的操作就是对资源操作 Restful规则: 1.API与用户的通信协议,总是使用HTTPS协议 2.域名 1)子域名方式 https://api.example.com 尽量将API部署在专用域名(会存在跨域问题) https://www.example.com 2)url方式 https://example.org https://example.org/api API很简单 3.版本 /v1/,/v2/.... URL,如:https://api.example.com/v1/ 请求头 跨域时,引发发送多次请求 4.面向资源编程:url必须使用名词表示(可复数) https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees 5.method: GET(查询数据) # 从服务器取出资源(?项或多项) POST(创建数据) # 在服务器新建?个资源 PUT(修改数据) # 在服务器更新资源(客户端提供改变后的完整资源) PATCH(修改属性) # 在服务器更新资源(客户端提供改变的属性) DELETE(删除数据) # 从服务器删除资源 6.过滤、分页、排序:通过在url上传参的形式传递搜索条件 https://api.example.com/v1/zoos?limit=10:指定返回记录的数量 https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置 https://api.example.com/v1/zoos?page=2&per_page=100:指定第??,以及每?的记录数 https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序 https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件 7.状态码 1)HTTP状态码: 200:请求成功,一般用于GET与POST请求 2)公司内部定义状态码:数据——>msg:成功,data:200(code:0) msg:...不存在,data:None(code:4004) msg:查询出错,稍后再试(code:5000) Restful和Django的区别: view:1)Django:view——># 获取参数:GET、POST、Body # 返回:HttpResponse、JsonResponse 2)Restful:APIView——># 获取参数:get—>data = request.query_params post—>data = request.data # 返回:response 3)ModelViewSet:什么都不用干,它是封装度最高的DRF的视图类,包含了增删改查中的所有接口操作。 代码示例: 模型类: from django.db import models # Create your models here. class UserTable(models.Model): name = models.CharField(max_length=64, unique=True) age = models.IntegerField(default=18) classroom = models.CharField(max_length=20) phone = models.IntegerField() class Meta: db_table = 'users' View # View的CURD from myuser.models import UserTable from django.views import View from django.http.response import JsonResponse class User1(View): def get(self,request): users = UserTable.objects.all() data = [ { 'id':user.id, 'name':user.name, 'age':user.age, 'classroom':user.classroom, 'phone':user.phone } for user in users ] return JsonResponse(data,safe=False) def post(self,request): name = request.POST.get('name') age = request.POST.get('age') classroom = request.POST.get('classroom') phone = request.POST.get('phone') if not all([name,age,classroom,phone]): return JsonResponse({'msg':'缺少参数'},status=400) try: UserTable.objects.create(name=name,age=age,classroom=classroom,phone=phone) except Exception as e: return JsonResponse({'msg':'添加失败'},status=500) return JsonResponse({'msg':'添加成功'},status=201) class User2(View): def delete(self,request,pk): UserTable.objects.filter(id=pk).delete() return JsonResponse({'msg':'删除成功'},status=204) def post(self,request,pk): try: user = UserTable.objects.get(id=pk) except UserTable.DoesNotExist: return JsonResponse({'msg':'用户不存在'},status=404) name = request.POST.get('name',user.name) age = request.POST.get('age', user.age) classroom = request.POST.get('classroom',user.classroom) phone = request.POST.get('phone',user.phone) UserTable.objects.filter(id=pk).update(name=name,age=age,classroom=classroom,phone=phone) return JsonResponse({'msg':'修改成功'},status=201) 路由配置: path('user1/',User1.as_view()), path('user1/<int:pk>/',User2.as_view()), APIView # APIView的CURD user/?id=xx/ from myuser.models import UserTable from rest_framework.views import APIView from rest_framework.response import Response from myuser.ser import UserSer class User1(APIView): def get(self, request): id = request.query_params.get('id') user_data = UserTable.objects.filter(id=id) ser = UserSer(user_data, many=True) data = ser.data return Response({'code': 0, 'data': data}) def post(self, request): data = request.data ser = UserSer(data=data) ser.is_valid() ser.save() return Response({'code': 201}) def put(self,request): id = request.data.get('id') data = request.data user_data = UserTable.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') UserTable.objects.filter(id=id).delete() return Response({'code': 204}) 序列化器: from rest_framework.serializers import ModelSerializer from myuser.models import UserTable class UserSer(ModelSerializer): class Meta: model = UserTable fields = '__all__' 路由配置: path('user1/',User1.as_view()), ModelViewSet: class UserTable(models.Model): name = models.CharField(max_length=64, unique=True) age = models.IntegerField(default=18) classroom = models.CharField(max_length=20) phone = models.IntegerField() class Meta: db_table = 'users' 路由配置: from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('user1',User3) path("",include(router.urls)) APIview?如何获取http?的数据? request.data.get()? 获取post方法表单里的数据 request.post.get()?? 获取post方法表单里的数据 request.body? 获取json数据 request.GET.get()?? 获取URL里的数据 request.query_parmas? 和get差不多,获取URL里的数据 为什么APIView里获取的数据可以直接当做字典操作? 因为获取的数据是以查询集的类型返回的 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 5:56:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |