IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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请求

0

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里获取的数据可以直接当做字典操作?

因为获取的数据是以查询集的类型返回的

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:25:08  更:2021-09-23 11:25:32 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计