当前位置: 首页 > news >正文

高品质的网站开发公分析苏宁易购的网站建设

高品质的网站开发公,分析苏宁易购的网站建设,上海有名的装修公司,保洁公司在哪个网站做推广比较好1 drf之请求 1.1 drf 之请求Request类 # 新的request对象---》之前聊过一部分# from rest_framework.request import Request# 1 以后视图类的方法中的request都是这个类的对象 # 2 以后使用request.data 取请求体中的数据 # 3 以后使用request.query_params 取请参数中的数…1 drf之请求 1.1 drf 之请求Request类 # 新的request对象---》之前聊过一部分# from rest_framework.request import Request# 1 以后视图类的方法中的request都是这个类的对象 # 2 以后使用request.data 取请求体中的数据 # 3 以后使用request.query_params 取请参数中的数据 # 4 以后其他属性用起来跟之前一样---》重要-request.method 的时候---》实际上 request._request.method---》反射出来的-这个类from rest_framework.request import Request没有method他会触发这个类的__getattr__---》# 5 FILES 用起来跟之前一样前端传入的文件在里面## 了解request._request视图类的方法中 self 是咱们写的视图类的对象self.request 是新的request1.2 控制前端请求的编码格式 前端传入的编码:urlencoded,josn,form-data# 某些接口只能接收某种编码的处理方式#### 方式一局部使用---》视图类上配置---》优先用它 class BookView(APIView): # 视图类内的所有方法只能接收json格式parser_classes [JSONParser]### 方式二全局都生效---》所有接口都支持某一种或某几种REST_FRAMEWORK {DEFAULT_PARSER_CLASSES: [rest_framework.parsers.JSONParser,rest_framework.parsers.FormParser,# rest_framework.parsers.MultiPartParser] }#### 补充 方式二编码格式全局使用,以及浏览器和postman的相应编码格式 REST_FRAMEWORK {DEFAULT_PARSER_CLASSES: [rest_framework.parsers.JSONParser,rest_framework.parsers.FormParser,rest_framework.parsers.MultiPartParser],DEFAULT_RENDERER_CLASSES: [rest_framework.renderers.JSONRenderer,rest_framework.renderers.BrowsableAPIRenderer,], }### 全局使用后局部再限制---》只需要在视图类上加即可 class BookView(APIView): # 全局如果用了局部这样配优先用局部的也就是这个类管理的接口只能接收form-data格式parser_classes [MultiPartParser]#### 为什么我们没有配置三种也支持-drf自己有默认配置---》默认配置就是支持三种代码解读 from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.parsers import JSONParser, FormParser, MultiPartParser from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer# JSONParser 解析json格式 # FormParser解析urlencoded格式 # MultiPartParser解析form-data格式class BookView(APIView):# 方式二编码格式全局使用,以及浏览器和postman的响应编码格式REST_FRAMEWORK {# 全局配置编码格式DEFAULT_PARSER_CLASSES: [rest_framework.parsers.JSONParser,rest_framework.parsers.FormParser,rest_framework.parsers.MultiPartParser],# 全局配置响应编码格式DEFAULT_RENDERER_CLASSES: [rest_framework.renderers.JSONRenderer,rest_framework.renderers.BrowsableAPIRenderer,],}# 类属性 ----- parser是解析的意思# 方式一局部使用视图类上配置编码格式优先用局部的# 如果以后这个视图类的所有方法只能接收json格式的数据别的接收不了# 只需要在 parser_classes 中传入 JSONParser# parser_classes [JSONParser]# 如果在setting.py中配置了全局这里没有使用局部配置就用全局的# 或者在布局重新配置parser_classes [JSONParser, FormParser, MultiPartParser]# 响应编码格式renderer_classes [JSONRenderer, BrowsableAPIRenderer]def get(self, request):# self 就是BookView的对象print(self.request is request) # Trueprint(self.headers) # {Allow: GET, POST, HEAD, OPTIONS, Vary: Accept}def __init__(self, dataNone, statusNone, template_nameNone, headersNone,exceptionFalse, content_typeNone):dataNone # 字符串列表字典------ 放在了响应体中------它是__init__()的第一个参数statusNone # 这是http响应状态码默认是200不能使用status100这表示请求正在处理template_nameNone # 模板名字默认是rest_framework/api.html 可以定制自己返回的页面headersNone # http响应头后期我们往响应头中放数据exceptionFalse content_typeNone # 响应编码格式 res Response(data{}, status200, headers{xxx: yyyy})print(res.data)print(res.has_header(xxx)) # Truereturn resdef post(self, request):# 请求体中带数据 ------ http请求有请求地址请求头、请求体# 带在请求体中的数据有编码格式3种 ------ 无论是哪种携带的数据都是从 request.data 中获取# 假设这个接口只允许携带 json 格式其他格式都报错怎么做呢# 需要配置类属性print(request.data)return Response(新增) 2 drf之响应 2.1 drf之Response对象源码 # from rest_framework.response import Response ### __init__ 中需要传这几个参数不传也可以 dataNone # 字符串列表字典----》放在了响应 体 中 ---》第一个参数是它 statusNone, # http响应状态码默认是200千万不能写成1xx headersNone, # http响应头后期我们可以往响应头中放数据content_typeNone # 响应编码格式(不用管用浏览器访问就是text/html用postman就是json格式) template_nameNone # 模版名字 默认是rest_framework/api.html 了解可以定制自己返回的页面样子### 原生django向响应头写入数据###补充后面会用---》通过res.data 就能取到当时放的datga resResponse(data{},status500,headers{xxx:yyy}) print(res.data) return res### 补充取当时放的响应头 res.headers 拿不到数据可以通过下面的方式或得到 print(res[xxx]) print(res.has_header(zzz))2.2 drf之响应格式 # 响应有编码格式默认支持json和text/html(浏览器)# 修改只支持json ### 局部使用 class BookView(APIView):renderer_classes [BrowsableAPIRenderer] ### 全局使用 REST_FRAMEWORK {DEFAULT_RENDERER_CLASSES: [rest_framework.renderers.JSONRenderer,rest_framework.renderers.BrowsableAPIRenderer,], }##局部禁用---》全局已经配置了---》局部想用浏览器的样子 class BookView(APIView):renderer_classes [BrowsableAPIRenderer]# 如果不配置---》有默认-解析三种编码都能解析-响应浏览器访问看到浏览器的样子postman访问看到json格式 3 两个视图基类 # Book 的 5个接口 基于APIView编写 # Publish 的5个接口 基于GenericAPIView编写3.1 基于 APIView写接口 class BookView(APIView):def get(self, request):book_list Book.objects.all()ser BookSerializer(instancebook_list, manyTrue)return Response(ser.data)def post(self, request):ser BookSerializer(datarequest.data)if ser.is_valid():ser.save() # 反序列化保存return Response(ser.data) # 创建成功后返回创建后的对象 做了个序列化else:return Response(ser.errors)class BookDetailView(APIView):def get(self, request, pk):book Book.objects.filter(pkpk).first()ser BookSerializer(instancebook)return Response(ser.data)def put(self, request, pk):book Book.objects.filter(pkpk).first()ser BookSerializer(instancebook, datarequest.data)if ser.is_valid():ser.save()return Response(ser.data)else:return Response(ser.errors)def delete(self, request, pk):Book.objects.filter(pkpk).delete()return Response()3.2 基于GenericAPIView(只要跟数据库打交道) 自己写GenericAPIView class GenericAPIView(APIView):queryset Noneserializer_class Nonedef get_queryset(self):return self.queryset.all() # 真正使用的时候再加all获取所有才行def get_serializer(self, *args, **kwargs):return self.serializer_class(*args, **kwargs)def get_object(self, pk):res self.get_queryset()return res.filter(pkpk).first()GenericAPIView 有类属性和方法 ### 重要属性### -queryset以后放所有某个表查询出的数据-serializer_class要序列化的类### 重要方法###-get_queryset :要序列化的所有数据qs对象-get_serializer 序列化类-get_object 修改查询的单条## 了解类属性-lookup_field pk 路由使用转换器转换出来的参数查询单条要用到如果改了路由对应也要修改一般不改-filter_backends后面详细讲 过滤 功能-pagination_class 后面详细讲 分页### 了解方法-get_serializer_class 后期咱们可能会重写它指定某些方法使用不同的序列化类-filter_queryset 后面跟过滤功能一起讲###代码class PublishView(GenericAPIView):queryset Publish.objects.all() # 类只要加载就会执行查了所有数据不能以它为准serializer_class PublishSerializerdef get(self, request):obj_list self.get_queryset() # 以用的时候为准ser self.get_serializer(instanceobj_list, manyTrue)return Response(ser.data)def post(self, request):ser self.get_serializer(datarequest.data)if ser.is_valid():ser.save() # 反序列化保存return Response(ser.data) # 创建成功后返回创建后的对象 做了个序列化else:return Response(ser.errors)class PublishDetailView(GenericAPIView):serializer_class PublishSerializerqueryset Publish.objects.all()def get(self, request, pk):obj self.get_object()ser self.get_serializer(instanceobj)return Response(ser.data)def put(self, request, pk):obj self.get_object()ser self.get_serializer(instanceobj, datarequest.data)if ser.is_valid():ser.save()return Response(ser.data)else:return Response(ser.errors)def delete(self, request, pk):self.get_object().delete()return Response()3.3 总结 # 错误1 一定要在用数据的时候再查 def get_queryset(self):return self.queryset.all() # 错误2没有在类属性上配置 queryset---源码中做了断言 4 5个视图扩展类(不是视图类–》先继承GenericAPIView) # RetrieveModelMixin, 查询一条写了一个方法 retrieve---》代码就是 跟咱们之前写获取单条get方法内容一样 # CreateModelMixin 新增一条写了一个方法 create---》代码就是 跟咱们之前写新增一条 post 方法内容一样 # DestroyModelMixin,删除一条写了一个方法 destroy---》代码就是 跟咱们之前写删除一条 delete 方法内容一样 # ListModelMixin,查询所有写了一个方法 list---》代码就是 跟咱们之前写删除一条 get 方法内容一样 # UpdateModelMixin 修改一个写了一个方法 update---》代码就是 跟咱们之前写删除一条put 方法内容一样# 为什么写5个不写俩因为后期不一定 5个接口都写class PublishView(GenericAPIView, ListModelMixin, CreateModelMixin):queryset Publish.objects.all() # 类只要加载就会执行查了所有数据不能以它为准serializer_class PublishSerializerdef get(self, request):return self.list(request)def post(self, request):# return self.create(request) # 一定不要忘了returnreturn super().create(request) # 一定不要忘了returnclass PublishDetailView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):serializer_class PublishSerializerqueryset Publish.objects.all()def get(self, request, pk):return self.retrieve(request, pk)def put(self, request, pk):return self.update(request, pk)def delete(self, request, pk):return self.destroy(request, pk)5 原生django怎么写向响应头写入数据 from django.http import HttpResponsedef custom_header_view(request):# 创建一个 HttpResponse 对象response HttpResponse(This is a custom header example)# 向响应头添加自定义的 HTTP 头信息response[X-Custom-Header] Hello, World!# 返回 HttpResponse 对象return response总结首先创建了一个 HttpResponse 对象并设置了响应的内容。然后 通过 response[Header-Name] 的方式向响应头添加自定义的响应头信息。 在这里我们添加了一个名为 X-Custom-Header 的自定义头其值为 Hello, World!。 最后将 HttpResponse 对象返回以便将其发送给客户端。 这样客户端将会接收到包含自定义响应头信息的响应。
http://www.zqtcl.cn/news/515910/

相关文章:

  • 泗阳住房建设局网站泉州网站建设工程
  • 陕西省住房城乡建设部门户网站做百度移动端网站软件
  • 濮阳公司建站怎么自己做网站app
  • 美辰网站建设个人网站如何做移动端
  • 郑州模板网站建设网页在线代理
  • 学生做网站的工作室网站建设项目表
  • .net网站开发教程百度贴吧微网站设计基本要求
  • 无锡网站建设哪家公司好咨询网站建设
  • 优秀的企业网站设计wordpress登陆后台总是跳转首页
  • 国外html5特效网站宁波江北区建设局网站
  • 购物网站哪个是正品商城网站模板下载
  • 网站名称 规则技术支持 石家庄网站建设
  • 专门做私人定制旅游的网站专做韩餐网站
  • 网站 续费wordpress首页调用指定分类
  • 2008系统怎么做网站免费设计软件下载
  • 做电音的软件的专业下载网站宁波俄语网站建设
  • 北?? 网站建设旅游手机网站开发
  • 乐清做网站的网站备案容易通过吗
  • 网站qq登录 开发一个小型网站开发成本
  • 湖北网络建设公司网站js跳转到别的网站
  • 郑州网站app开发的汽车网站 源码
  • 河南网站建设企业做网站多少钱西宁君博示范
  • 沈阳有做网站的吗青浦手机网站制作
  • 腾讯云免费建站建立一个网站英语
  • 沙漠风网站建设怎么样官方网站建设银行2010年存款利息
  • 360报危险网站微信代码小程序
  • 网站维护报价单国外 做励志视频的网站
  • 用源码做自己的网站公司网站建设哪家公司好
  • 网站运营做seohtml前端网站开发PPT
  • 上海网站定制设计图wordpress网站在线安装