Django视图层()

news2024/12/23 22:15:59

视图层

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的源码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java springboot2.7 JSR303与Hibernate进行Bean的数据校验

我们如果对数据能进行格式校验 做个安全检查就会容易很多 其实 各个系统中都必然后拥有数据校验&#xff0c;这也不是新东西 J2EE规范中JSR303就规范定义了一组有关数据校验的API 首先 我们在 pom.xml 中 注入依赖 <dependency><groupId>javax.validation</gr…

vue day1(主要是指令)

1、引包 或者&#xff1a;cdn网址 2、创建实例&#xff0c;初始化渲染 3、插值表达式 {{}} 表达式&#xff1a;可以被求值的代码 4、响应式数据&#xff1a;数据发生变化&#xff0c;视图自动更新&#xff08;底层是dom操作&#xff09; data中数据会被添加到实例上&#x…

【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)

1. 朴素贝叶斯模型 对于不同的数据&#xff0c;我们有不同的朴素贝叶斯模型进行分类。 1.1 多项式模型 &#xff08;1&#xff09;如果特征是离散型数据&#xff0c;比如文本这些&#xff0c;推荐使用多项式模型来实现。该模型常用于文本分类&#xff0c;特别是单词&#xf…

Java实现身份证号校验,最后一位校验码校验

中国居民身份证号码编码规则 第一、二位表示省&#xff08;自治区、直辖市、特别行政区&#xff09;。 第三、四位表示市&#xff08;地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码&#xff09;。其中&#xff0c;01-20&#xff0c;51-70表示省直辖市&#xff1b;21-5…

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能&#xff08;AI&#xff09;工具&#xff0c;使用过它的人都能感受到它的魅力。AI并不是一个新事物&#xff0c;它在全世界都发展很多年了&#xff0c;但在ChatGPT诞生之前&#xff0c;我们的AI只能算垂直AI&#xff0c;比如AlphaGo&#xff0c…

刘家窑中医医院:鲁卫星主任团队走进社区,免费义诊送健康"

北京丰台刘家窑中医医院&#xff0c;前身为中国医学会航空医学会专家门诊&#xff0c;是一家医保单位&#xff0c;无需定点即可享受医保服务。这是一家集医疗、科研、预防、保健为一体的国家非营利性特色中医院。为了更好地服务社区群众&#xff0c;提高社区居民对健康的关注&a…

Python爬虫程序网络请求及内容解析

以下是一个简单的Python爬虫程序&#xff0c;用于爬取商户的内容。这个程序使用了requests和BeautifulSoup库来进行网络请求和内容解析。 import requests from bs4 import BeautifulSoup# 爬虫爬虫IP信息 proxy_host duoip proxy_port 8000# 请求URL url 目标网站# 创建一个…

typhonjs-escomplex 代码可读性 可维护度探索

目前市面上的前端代码质量评分中的代码可维护度是大都是基于 typhonjs-escomplex 这个库扫描而来&#xff0c;但是这个库的官方文档并没有介绍相关指标数据的计算规则&#xff0c;不知道规则如何提升指标数据呢&#xff1f;所以本文对 typhonjs-escomplex 源码进行探索&#xf…

NI和EttusResearchUSRP设备之间的区别

NI和EttusResearchUSRP设备之间的区别 概述 USRP&#xff08;通用软件无线电外设&#xff09;设备是业界领先的商软件定义无线电&#xff08;SDR&#xff09;。全球数以千计的工程师使用USRPSDR来快速设计、原型设计和部署无线系统。它们以两个不同的品牌进行营销和销售&…

机器学习线性代数知识补充

线性代数知识补充 正交矩阵与正交变换方阵特征值与特征向量相似矩阵对角化二次型正定二次型 正交矩阵与正交变换 方阵特征值与特征向量 相似矩阵 对角化 二次型 正定二次型

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

50.批处理脚本(2/2)

目录 一、批处理命令。 &#xff08;1&#xff09;net use 连接共享文件夹或查看。 &#xff08;1.1&#xff09;连接共享文件夹。 &#xff08;1.2&#xff09;断开连接。 &#xff08;1.3&#xff09;显示当前连接。 &#xff08;1.4&#xff09;查看电脑的共享文件夹。…

[文件读取]cuberite 文件读取 (CVE-2019-15516)

1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…

计算机操作系统—经典同步问题

经典同步问题 1.生产者与消费者问题 1.1.问题概述 在现实生活中&#xff0c;当我们缺少某些生活用品时&#xff0c;就会到超市去购买。当你到超市时&#xff0c;你的身份就是消费者&#xff0c;那么这些商品又是哪里来的呢&#xff0c;自然是供应商&#xff0c;那么它们就是生…

Python基础入门----如何使用 Pipenv 在项目目录中创建虚拟环境

文章目录 引言Pipenv 简介安装 Pipenv在项目目录中创建虚拟环境1. 进入你的项目目录2. 设置环境变量3. 创建虚拟环境4. 激活虚拟环境结论引言 在Python开发中,使用虚拟环境是一种良好的实践,它可以帮助开发者管理项目的依赖,并避免不同项目间的依赖冲突。Pipenv 是一个流行…

MySQL8 绿色版安装

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; MySQL学习 ✨特色专栏&#xff1a; My…

SAP:解决函数CONNE_IMPORT_WRONG_COMP_DECS CX_SY_IMPORT_MISMATCH_ERROR错误

用户反馈报表中取数异常&#xff0c;经检查发现SE37执行取数函数ZLY_R_CWFX03报以下错误。 Category ABAP Programming Error Runtime Errors CONNE_IMPORT_WRONG_COMP_DECS Except. CX_SY_IMPORT_MISMATCH_ERROR ABAP Program ZLY_R_CWFX03FT Application Component Not Assig…

springboot整合minio步骤

springboot整合minio步骤 springboot整合minio十分的简单&#xff0c;接下来使用springboot整合一下minio。 一、导入依赖 首先需要导入minio的依赖。 <!--maven引入minio排除okhttp依赖并添加高版本的okhttp依赖--><dependency><groupId>io.minio</g…

KT148A语音芯片的下载用的是串口,测试可以直接串口发指令控制吗

一、问题简介 KT148A语音芯片的下载用的是串口&#xff0c;那我实际测试是不是可以直接串口发指令测试控制&#xff1f;就不用单独写程序去模拟一线串口的时序了 详细描述 首先看一下KT148A芯片的参考设计原理图&#xff1a;其中芯片的2脚和3脚就是串口&#xff0c;注意下载语…

走向边缘智能,美格智能携手阿加犀成功在高算力AI模组上运行一系列大语言模型

近日&#xff0c;美格智能发挥软硬件一体协同开发能力&#xff0c;融合阿加犀卓越的AI优化部署技术&#xff0c;在搭载高通QCS8550平台的高算力AI模组上&#xff0c;成功运行了一系列大语言模型&#xff0c;包括LLaMA-2、通义千问Qwen、百川大模型、RedPajama、ChatGLM2、Vicun…