drf
web开发模式
前后端混合开发模式(老项目)
模板语法:dtl:django template language
模板渲染:html
前后端分离开发模式(新项目)
后端专门的后端:API接口
前端专门的前端:html,css,js --->ajax --->后端交互 --->通过调用api接口返回数据--->字符串--->转成js数组,对象,字符串
API接口
防止个人习惯差异引起的混乱,找到一个大家都觉得很好的接口实现规范,这个规范能够让后端写的接口用途一目了然,减少双方之间的合作成本。
api接口:通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介。
-https://www.baidu.com/books/--->json 格式数据---》接口
-https://www.cnblogs.com/liuqingzheng/articles/17400599.html---》返回界面
url和接口的区别:Web API接口和一般的url链接的区别,
Web API接口简单概括有下面四大特点:
1 url:长得像返回数据的url链接
https://api.map.baidu.com/place/v2/search
2 请求方式:get、post、put、patch、delete
采用get方式请求上方接口
3 请求参数:json或xml格式的key-value类型数据
ak:6E823f587c95f0148c19993539b99295
region:上海
query:肯德基
output:json
4 响应结果:json或xml格式的数据
典型的api接口:
-url地址
-有请求方式
-携带参数
-返回格式是json,xml
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
接口测试工具Postman
接口测试工具
postman:浏览器插件
apifox:Postman +Swagger +Mock +JMeter
postwoman
下载https://www.postman.com/
创建django项目
pip3 install djagno----》释放出一个可执行文件
djagno-admin startproject 项目名
关于post的使用
post的简单介绍
前后端传输数据的编码格式---urlencoded,formdata, json这三种格式的详解
urlencoded
formdata
json
关于一些总结
1、前端不同编码格式
urlencoded: body体中 :username=lqz&password=123 django 的request.POST取出值
json: body体中 :{"username":"lqz","password":"123"} django 的request.POST取不出值
form-data:body中格式固定:数据部分和文件部分--》request.POST能取出数据,取不出文件,文件都是从request.FILES
2、mysql中varchar和char的区别:定长和不定长
varchar 属于可变长长度,字符串数据类型,与固定长度不同,他更节省空间,根据字符串的长度改变储存空间。
char 属于固定长度字符串,规定多少长度就存多少长度。
两个的区别:char的处理速度比varchar快,所以在对速度有要求的地方,可以使用char
3、不用pycharm创建django项目:
django—admin startproject 项目名
4、django中文件对象和原来的文件对象
-django:from django.core.files.uploadedfile import InMemoryUploadedFile
-原生文件:_io.BufferedWriter
-django中文件类没有继承原生文件类,但是有原生文件类所有方法
5、mysql--->int类型---》int(10),int(20)
int(M)只是用来显示数据的宽度,当字段被设计为int类型,范围就被写死了,与M无关。
restful规范
1、前后端分离要写接口---->api接口--->接口测试工具postman
2、restful规范是:一种定义we吧api接口的设计风格,尤其是用于前后端分离的应用模式中的规范
3、写接口要遵循的一个规范,restful规范--->10条
1、数据的安全保障 :url链接一般采用的是https协议进行传输,因为比http安全
2、接口特征表现:url带有api标识
-https://api.baidu.com/books/
-https://www.baidu.com/api/books/
3、多数据版本共存 ---->url中带版本信息
https://api.baidu.com/v1/books
https://www.baidu.com/api/v2/books
4、数据即资源,均使用名词(可复数) ---> 前后台交互,交互的数据称之为资源
数据即资源,url尽量使用名字
https://127.0.0.1/api/v1/books/ -->表示对图书操作:增加,删除,查询,修改,都用这一个地址
5、资源操作由请求方式决定
-get 请求获取数据(获取所有,获取单条)
-post 新增数据
-put 修改数据
-delete 删除数据
6、请求地址中带过滤条件 --->只针对于搜索所有接口
7、响应状态码
http响应状态码:1xx,2xx,3xx,4xx,5xx
8、响应状态码带错误信息
{
"code": 101,
"msg": "用户名或密码错误"
}
9、不同操作,返回格式符合如下标准
GET /collection:返回资源对象的列表(数组)
# [{name:西游记,price:19},{name:三国,price:19}]
GET /collection/resource:返回单个资源对象
# {name:三国,price:19}
POST /collection:返回新生成的资源对象
# {name:三国,price:19}
PUT /collection/resource:返回完整的资源对象
# {name:三国演绎,price:19}
DELETE /collection/resource:返回一个空文档
但是大家通常的格式为:
{
code:100
msg:查询成功
restult:[{name:西游记,price:19},{name:三国,price:19}]
}
10 响应中带链接
序列化反序列化
序列化:数据转换格式 (序列化分为:序列化和反序列化)
序列化的两个阶段:
序列化:把我们识别的数据转换成指定的格式提供给别人
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或者其他平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据提供给别人。
反序列化:把别人提供的数据转换或者还原成我们需要的格式
例如:前端js传过来的是json数据,对于python而言就是字符串,我们需要进行反序列化,讲字符串转换为模型类对象,这样我们才能把数据保存在数据库里。
drf安装和快速使用
基于django编写符合restful规范的接口
例题:
假设以 Book 表为例,写它的5个接口
-1 查询所有
-2 新增一条
-3 修改一条
-4 删除一条
-5 查询一条
import json from django.shortcuts import render from django.http import JsonResponse # Create your views here. from django.views import View from .models import Book class Bookviews(View): #获取全部数据 def get(self,request,*args,**kwargs): booklist = Book.objects.all() list = [] for i in booklist: list.append({'name':i.name,'price':i.price}) res = {'code':20,'msg':'已获取数据','result':list} return JsonResponse(res) #新增数据,需要判断是不是json还是urlencoded def post(self,request,*args,**kwargs): if request.POST: name = request.POST.get('name') price = request.POST.get('price') list = Book.objects.create(name=name,price=price) back_dic = {'code':21,'msg':'添加数据成功','result':{'name':name,'price':price}} return JsonResponse(back_dic) else: print(request.body) #b'{"name":"1","price":"2"}' #反序列化 res = json.loads(request.body) print(res) #增加进数据库 list = Book.objects.create(name=res['name'],price=res['price']) back_dic = {'code': 22, 'msg': '添加数据成功','result':{'name':res['name'],'price':res['price']}} return JsonResponse(back_dic) class Bookdetialviews(View): #获取单个数据 def get(self,request,pk): list = Book.objects.filter(pk=pk).first() #手动序列化 list_b = {'name':list.name,'price':list.price} return JsonResponse({'code':31,'msg':'查询成功','result':list_b}) #修改数据 def put(self,request,pk): #从前端得到数据 try: # print(request.body) #'name=1&price=555' list = json.loads(request.body) # print(list) #{'name': '1', 'price': '2'} # #找到对应的数据 res = Book.objects.filter(pk=pk).first() res.name = list.get('name') res.price = list.get('price') res.save() #返回 return JsonResponse({'code':40,'msg':'修改成功','result':{'name':res.name,'price':res.price}}) except Exception: return JsonResponse({'code':41,'msg':'传输格式不是json'}) def delete(self,request,pk): #找到删除的数据 res = Book.objects.filter(pk=pk).first() #找到对应的数据删除 Book.objects.filter(pk=pk).delete() return JsonResponse({'code':51,'msg':'删除成功','result':{'name':res.name,'price':res.price}})
djangorestframework: 简称drf,django的一个第三app---》方便我们快速实现符合restful规范的接口
使用步骤:
1 安装模块
1 django 是2版本,用不了drf最新(适当降版本),他会卸载django---》装最新4.x
2 djagno 3.1.12 可以使用drf最新
-django:3.1.12
-drf:3.14.0
2 在app中注册
INSTALLED_APPS = [
'rest_framework', # 一定不要忘了加 ,
]
3 写路由
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('books', BookView, 'books')
urlpatterns += router.urls
4 写视图类
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer
class BookView(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
5 写序列化类
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = "__all__"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能