Django视图层()

视图层

django视图层:Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据

三板斧

HttpResponse   # 返回字符串
render         # 返回html页面,并且在返回浏览器之前还可以给html文件传值
redirect      # 重定向
三板斧的详情数据

class HttpResponse(HttpResponseBase):
    pass
   
"""括号内的任意一个字符串作为响应体"""

def render(request, template_name, context=None, content_type=None, status=None, using=None)


"""参数:render:生成响应请求的对象
        template_name:使用模版的完整名称,可选的参数
        context : 添加到模版上下文的一个字典,默认为空字典,如果字典中有某个值可调用,那么将在视图渲染前调用它
        status: 状态码
        
        render方法就是将一个模版中页面的模板语法进行渲染,最终渲染成一个html页面作为响应体
    
        """


def redirect(to, *args, permanent=False, **kwargs):
   """传递一个需要重定向的硬编码URL或路由
        redirect内部都是继承了HttpResponse"""


注意:用来处理视图函数的请求都需要HttpResponse对象!!!

JsonReesponse序列化对象

前后端的数据交互需要用到序列化json作为序列化方法,实现跨语言传输

混合开发项目,前端与后端的代码写在一块
前端分为一个项目,后端一个项目,后端只需写端口即可

前端序列化                    后端序列化
JSON.stringify()             json.dumps()
JSON.parse()                 json.loads()

json序列化

def json_func(request):

    user_dict = {'name': 'kk', 'age': 18, 'gender': 'male'}

    #将数据发送至前段
    json_str = json.dumps(user_dict)
    return HttpResponse(user_dict)

#ensure_ascii 内部默认True自动转码,改为False不转码,只生成json格式,双引号

JsonResponse序列化

导入模块

from django.http import JsonResponse
def json_func(request):

    def json_func(request):

    user_dict = {'name': 'kk', 'age': 18, 'gender': 'male'}
   
    return JsonResponse(user_dict)
    """
    本质上JsonResponse还是HttpResponse
    class JsonResponse(HttpResponse):"""

使用JsonResponse序列化列表:

def index(request):
    
    user_list = [1, 2, 3, 4, 5]
    return JsonResponse(user_list)

  当我们直接使用JsonResponse方法时,可以发现报错了

这是我们需要看源码:

def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
                 json_dumps_params=None, **kwargs)

把里面的safe改为False即可但是我们不能修改源码所以我们在JsonResponse中修改

def index(request):

    user_list = [1, 2, 3, 4, 5]
    return JsonResponse(user_list, safe=False)

form表单与request对象获取文件

form请求数据方式必须是POST,

enctype="multipart/form-data"
<form action="" method="post">
    <input type="file">
    <input type="submit">
</form>

当我们上传文件时,发现我们只得到的结果是上传文件的名称,并没有照片的数据

def index(request):
    print(request.POST)   # <QueryDict: {'my-fold': ['辣子541.jpg']}>
    return render(request, 'index.html')

request.FILES

所以我们接受文件不能用POST,应该使用FILES

def index(request):
    print(request.FILES)    # <MultiValueDict: {'my-fold': [<InMemoryUploadedFile: 辣子541.jpg (image/jpeg)>]}>
    return render(request, 'index.html')

类似于一个对象,数据都在这里面:InMemoryUploadedFile

得到数据:

def index(request):
    print(request.FILES)    # <MultiValueDict: {'my-fold': [<InMemoryUploadedFile: 辣子541.jpg (image/jpeg)>]}>
 if request.method == "POST":
    file_obj = request.FILES.get('my-fold')
    file_name = file_obj.name
    # 得到数据后写入文件对象中
    with open(file_name, 'wb')as f:
        for line in file_obj:
            f.write(line)
 return render(request, 'index.html')
            

总结:request.POST 一值都是接収的是非文件数据

        request.FILES 接收的则是文件的数据,普通的数据还在POST中。

reuqest.boyd

"""request.body
 接受纯原生的二进制数据,没有接受任何的处理,
所以我们要想得到数据,就必须先把它转为str---->在进行decode------->然后在进行转化为字形式"""

之所以POST和FILES可以直接获取数据,是因为Django进行了封装,因为body没有进行封装所以需要我们自己来操作

request.path,request.path_info , request.get_full_path()都是与路径相关的

    print(request.path)
    print(request.path_info)
    print(request.get_full_path())
    # 1.打印结果为/index/
    # 2./index/
    # 3./index/?a=1&b=2

CBV写法

FBV:function based view 写的是函数

CBV:  class based view    写的是类 

FBV
	基于函数的视图
	def index(request):return HttpResponse对象

CBV
	基于类的视图
	from django import views
  	 class MyLoginView(views.View):
        def get(self, request):
            return HttpResponse('from CBV get function')

        def post(self, request):
            return HttpResponse('from CBV post function')
	path('login/', views.MyLoginView.as_view())
	会自动根据请求方法的不同自动匹配对应的方法并执行

CBV源码

# 入口
url(r'^login/', views.MyLogin.as_view()),

# View类中得as_view方法的返回值是view函数名
# 当请求来的时候,会触发view函数的执行
def view(request, *args, **kwargs):
    # cls:Mylogin()------>self对象
    self = cls(**initkwargs)
    return self.dispatch(request, *args, **kwargs)  # View类里的dispatch

def dispatch(self, request, *args, **kwargs):
    if request.method.lower() in self.http_method_names:
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    else:
        handler = self.http_method_not_allowed
    return handler(request, *args, **kwargs)

from django.views import View


class MyLogin(View):
    http_method_names = ['get', 'post']
    def get(self, request):
        print('get。。。')
        self.index()
        return HttpResponse("get")

    def post(self, request):
        return HttpResponse("hello postman!!!")

    def index(self):
        pass
    
权限、频率、jwt的源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/146121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原生应用与hybrid app开发的流程区别

Hybrid App&#xff08;混合 App&#xff09;已经成为大家接触最为广泛的 App 形式&#xff0c;不管是我们用到的微信、支付宝还是淘宝、京东等大大小小的应用都非常热衷于Hybrid App 带来的研发效率提升和灵活性。 但我们正式进入到 hybrid App 的讨论前&#xff0c;有必要先…

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包&#xff0c;可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画&#xff0c;以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错&#xff0c; 或者安装完 spacy&#xff0c;无法正…

springboot-error

Invalid bound statement (not found): com.example.demo.mapper.UserMapper.findAll 一直报错&#xff0c;找不到相应的mapper文件。 排除以下原因之后&#xff0c;还是不对&#xff1a; https://blog.csdn.net/xxpxxpoo8/article/details/127548543 最后发现是因为我的mapp…

【Transformer从零开始代码实现 pytoch版】(六)模型基本测试运行

模型基本测试及运行 &#xff08;1&#xff09;构建数据生成器 def data_generator(V, batch, num_batch):""" 用于随机生成copy任务的数据:param V: 随机生成数字的最大值1:param batch: 每次输送给模型更新一次参数的数据量:param num_batch: 输送多少次完成…

第四天课程 分布式搜索引擎1

分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; …

第十九章总结:Java绘图

19.1&#xff1a;Java绘图类 19.2&#xff1a;绘制图形 package nineteentn; import java.awt.*; import javax.swing.*;public class DrawCircle extends JFrame {private final int OVAL_WIDTH 80; // 圆形的宽private final int OVAL_HEIGHT 80; // 圆形的高public DrawC…

nginx-静态资源实践(压缩配置,常见静态资源配置)

Nginx 实战搭建一个静态资源web服务器 第一个阶段访问单个文件 listen 80; #监听的端口 server_name localhost; #服务名称 #配置路径映射 location /geotools/ {alias geotools/; #将geotools/ 和/geotools/路径一一对应起来 }目录关系如下&#xff1a; nginx下面建一个g…

软考系统分析师知识点集锦一:企业信息化战略与实施

一、信息化战略体系(★★★★★) 1、信息资源规划ISP 信息资源规划是信息化建设的基础工程&#xff0c;是指对企业生产经营活动所需要的信息&#xff0c;对产生、获取、处理、存储、传输和利用等方面进行全面的规划。 IRP强调将需求分析与系统建模紧密结合起来&#xff0c;需…

酷柚易汛ERP - 其他入库单操作指南

1、应用场景 处理其他非采购类型的入库单据&#xff0c;比如赠品、获赔商品、以货抵债、借入、接受捐赠等不参与采购管理的入库类业务。 2、主要操作 2.1 新增其他入库单 打开【仓库】-【其他入库单】&#xff0c;选择商品后&#xff0c;根据存货核算方法自动计算出单位成本…

栈的实现---超详细

栈的实现 文章目录 栈的实现一、栈的模型二、栈的代码实现以及测试用例①栈的初始化②入栈③出栈④弹出栈顶⑤判断栈空间是否为空⑥计算栈空间长度⑦销毁栈⑧测试用例 一、栈的模型 首先栈有两个概念 1.数据结构里的栈。2.语言/操作系统中的栈(内存空间)&#xff0c;可能会在递…

JUC工具包介绍

目录 1. 引言 2. 介绍JUC工具包 2.1. JUC工具包的概述和作用 2.2. 什么是JUC工具包&#xff1f; 2.2.1. JUC工具包与传统线程编程的区别和优势 3. 线程池&#xff08;Executor&#xff09; 3.1. 线程池的概念和优势 3.1.1. ThreadPoolExecutor类的介绍和使用示例 3.1.…

Docker安装Octoprint 3D打印控制软件

Octoprint简介 Octoprint是一个运行在Linux系统上的开源套件&#xff0c;可以为普通的3D打印机添加强大的外围管理功能。 web管理界面远程操控摄像头实时监控视频录制、延时摄影在线切片图形化的温度曲线显示手机监控操作免SD卡和U盘通过插件和USB/GPIO接口实现更多功能 Oct…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…

分布式锁介绍

为什么需要分布式锁 在单机部署的系统中&#xff0c;使用线程锁来解决高并发的问题&#xff0c;多线程访问共享变量的问题达到数据一致性&#xff0c;如使用synchornized、ReentrantLock等。 但是在后端集群部署的系统中&#xff0c;程序在不同的JVM虚拟机中运行&#xff0c;且…

PostGIS学习教程五:数据

教程的数据是有关纽约市的四个shapefile文件和一个包含社会人口经济数据的数据表。在前面一节我们已经将shapefile加载为PostGIS表&#xff0c;在后面我们将添加社会人口经济数据。 下面描述了每个数据集的记录数量和表属性。这些属性值和关系是我们以后分析的基础。 要在pgAdm…

fileread任意文件读取学习笔记

任意文件读取概述 一些网站的需求&#xff0c;可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过&#xff0c;就可以查看或下载任意文件。这些文件可以是源代码文件&#xff0c;配置文件&#xff0c;敏感文件等等。 任意文件读取会造成&#x…

Python学习:同步异步阻塞与非阻塞

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、状态介绍 在了解其他概念之前&#xff0c;我们首先要了解进程的几个状态。 在程序运行的过程中&#xff0c;由于被操作系统的调度算法控制&#xff0c;程序会进入几个状态&#xff1a;就绪&#xff0c;运行和阻塞。 就绪…

LeetCode | 225. 用队列实现栈

LeetCode | 225. 用队列实现栈 OJ链接 此题可以用两个队列去实现一个栈&#xff0c;每次始终保持一个队列为空&#xff0c; 入栈操作相当于给非空队列进行入队操作 入数据&#xff0c;把不为空的队列入 出数据&#xff0c;把不为空的队列数据导入为空&#xff0c;直到最后一…

1334. 阈值距离内邻居最少的城市

分析题目两点“阈值距离”、“邻居最少”。 “阈值距离”相当于定了个上界&#xff0c;求节点之间的最短距离。 “邻居最少”相当于能连接的点的数量。 求节点之间的最短距离有以下几种方法&#xff1a; 在这道题当中&#xff0c;n的范围是100以内&#xff0c;所以可以考虑O(n…

超详细!!新手必看!STM32--独立看门狗IWBG

一、看门狗是什么&#xff1f; 答&#xff1a;看门狗是一个12bit的递减计数器。当计数器的值从某个值一直减到0的时候&#xff0c;系统就会产生一个复位信号&#xff0c;CPU收到复位信号&#xff0c;系统复位重新运行。在计数没减到0之前&#xff0c;重置了计数器的值的话&…