首页 > 其他分享 >视图层

视图层

时间:2023-08-01 21:55:07浏览次数:27  
标签:index request 视图 json HttpResponse 序列化

三板斧问题

在视图函数中写函数跟普通函数不太一样。

 djagno中使用的局部的request:

urls文件:

url('index/',views.index),

views文件:

def index(request):
    pass

报错:

 所有的视图函数不能够没有返回值,并且返回值必须是HttpResponse对象

其实三板斧方法返回的都是HttpResponse对象

# 在urls文件中:
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('index/',views.index),
]

# 在views文件中:
def index(request):
    # return render(request,'index.html')
    # return HttpResponse('index')  # 返回字符串,源码就是HttpResponse类,加括号就得到实例化对象
    # 追代码----》点进去这个方法去看源码
    # return render(request, "index.html", context={}) #context=None 分配模版变量的
    return redirect(request, "index.html", context={}) #redirect:重定向

 

下图是源码:

render:返回html页面,返回值是HttpResponse对象

正常返回页面:

 redirect:重定向 ,返回也是HttpResponse对象

在flask中request使用的是全局的request

from ... import request

def index():

   pass

def func():

  pass

所有的视图函数都使用全局的request对象,是不会乱套的,具体需要查看源码。

JsonResponse序列化

json格式的数据:主要就是实现跨语言数据传输

序列:字符串

序列化:把其他数据类型转为字符传的过程

反序列化:把字符串转为其他数据类型的过程

现在现跨语言数据的传输使用的都是json,在以前使用的是xml。

但是微信支付朝微信的厚点发送参数的时候,使用的就是xml

json格式的数据特点:{"username":"kevin","age":18},打印的结果也是双引号,而字典书写时使用双引号,但是打印的结果还是单引号。

在json中序列化:

import json
#序列化
json.dumps
#反序列化
json.loads

在js中的序列化:(在前端中)

JSON.stringify()  # 序列化
JSON.parse()  # 反序列化,结果是对象 js中的对象:obj = {}

在django中的序列化:

方法1:(原始方法序列化)

  序列化(明显特征是单引号变双引号了):

import json
def ab_json(request):
    user_dict = {'username':'123','password':'123'}
    json_str = json.dumps(user_dict)
    return HttpResponse(json_str)

结果:

 当序列化加上中文时,编码也需要改变

未修改编码前:

 修改编码后:

 方法2:Django提供的方式(改源码)

 结果如图:

 字典可以序列化,列表也可以序列化:

这样写的话会报错,看报错信息进行修改

 报错信息:

 加了safe修改后:

 结果如图:

 

form表单上传文件

form表单上传文件的前提:

  1. 请求方式必须是post

  2. enctype必须是form-data

当出现这个页面的时候就是未注释配置文件

 将圈起的部分注释掉:

 前端写法:

 后端写法:

 request对象的其他几个方法

request.GET
request.POST
request.FILES
request.methods

request.path_info     # /ab_request/
reqeust.path        # /ab_request/
request.get_full_path()   # /ab_request/ /ab_request/?username=kevin&age=11

上面两个只能拿到路由,没办法拿到路由的参数,下面的既能拿到路由,也能拿到参数。

C(class)BV的书写和F(function)BV的写法

目前写的都是FBV:function based view 基于函数的视图

在视图文件中书写类 CBV:class based view 基于类的视图

postman的官网地址:https://www.postman.com/downloads/
apizza的官网地址:http://www.apizza.net/

好处在于可以很方便的判断是post还是get,并跳转到相应位置

cbv:

视图写法:

from django.views import View
class MyLogin(VIew):
    def get(self,request):
        return render(request,'form.html')
    def post(self,request):
        return HttpResponse('post方法')

 路由写法:

 CBV 的特点是能够根据请求方式的不同直接匹配到对应的方法执行。

CBV源码分析

查看源码时,提醒自己面对对象的查找顺序(先从对象中找,再从产生对象的类里去找,在从父类里去找)

CBV的入口:

 类名可以调用的方法:

  1. 方法被@classmethod装饰器修饰的方法

    类名来调用类方法有什么好处:会把第一个类名自动当成第一个参数传递给方法的第一个形参cls

      对象调用方法把对象自己当成第一个参数传给方法的第一个形参

   2. 被@staticmethod装饰器修饰的方法

 当请求来的时候,开始匹配路由login,就会调用View.view()

 

标签:index,request,视图,json,HttpResponse,序列化
From: https://www.cnblogs.com/Lucky-Hua/p/17599201.html

相关文章

  • Python基础day56 Django视图层相关
    视图层三板斧问题在视图函数中写函数跟普通函数不太一样,Django中使用的是局部的request所有的视图函数不能够没有返回值,并且返回值还必须是HttpResponse对象#错误代码Theviewapp01.views.indexdidn'treturnanHttpResponseobject.ItreturnedNoneinstead.其实我......
  • 【ArangoDb踩坑】arango视图更新操作注意
    一、问题ping协议的覆盖率字段一直更新有误。二、原因ArangoDBviews中的属性commitIntervalMsec默认为1000毫秒,该属性限制了提交视图数据存储更新后必须要等待指定毫秒数才能查询文档,否则数据就是不可见的。snmp、ping、rping、telemetry四种协议是轮流更新的,其中snmp、ping......
  • 视图层
    三板斧问题在视图函数写函数跟普通函数不一样,它需要传一个request参数给形参,而这个参数只能在函数中局部使用所有视图函数不能够没有返回值,并且返回值还必须是httpresponse对象Theviewapp01.views.indexdidn'treturnanHttpResponseobject.ItreturnedNoneinstead.......
  • Python Jenkins-调用_get_view_jobs方法获取指定视图下的Job名称
    一、pythonjenkins库api简介1.1、连接Jenkins服务器server=jenkins.Jenkins(url,username=None,password=None,timeout=30)url:指的是所连接的Jenkins的网络地username/password:username/password默认值是None,在内网中不传参数也是可以连接成功的,但应该......
  • Flutter学习之视图体系
    一、前言Flutter是一种全新的响应式跨平台的移动开发框架,越来越多的开发者参与学习或者研究中,确实在iOS和Android平台上能够用一套代码构建出性能比较高的应用程序。我刚开始接触FlutterFlutter中文网看到这么一句话:Widget是Flutter应用程序用户界面的基本构建块。每个Widget都是用......
  • Python-Django-Django视图和URL
    Python-Django学习目录:环境搭建和基础知识:包括安装Python和Django、了解Python基础语法、掌握Django框架的基本概念和工作原理等。模型和数据库:包括创建模型、定义字段、使用DjangoORM进行数据库操作等。视图和URL:包括定义视图函数、URL路由配置、模板渲染等。表单和验证:包括表单......
  • Mysql高级6-视图
    一、视图介绍视图(View):是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自,定义视图时查询使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询的结果。 二、创建视图2.1语法create[orreplace]view视图名称......
  • 图形视图体系结构——Graphics View
    GraphicsView框架结构的特点、主要包含元素及坐标系统。1、特点GraphicsView框架结构的主要特点如下。(1) GraphicsView框架结构中,系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。(2) GraphicsView支持时间传播体系结构,可以使图元在场景(scene)中的......
  • mongodb 创建视图
    MongoDB创建视图什么是MongoDB视图?MongoDB是一个非关系型数据库,它以文档的形式存储数据。通常,我们使用MongoDB中的集合(Collection)来存储和查询数据。但有时候,我们需要根据特定的查询条件创建一个虚拟的集合,这个虚拟的集合被称为视图(View)。视图是基于一个或多个集合的查询......
  • 【8.0】DRF之DRF视图扩展类
    【一】5个视图扩展类GenericAPIView+5个视图扩展类+序列化类+Response写接口【1】5个视图扩展类对应五个方法查询所有数据新增一条数据查询单条数据修改一条数据删除一条数据【2】写5个类的好处就是解耦合,提高代码的可扩展性这五个类不叫视图类,叫视图扩展......