Django视图层

news2024/11/17 17:30:21

视图层

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/1211277.html

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

相关文章

《网络协议》06. HTTP 补充 · HTTPS · SSL/TLS

title: 《网络协议》06. HTTP 补充 HTTPS SSL/TLS date: 2022-10-06 18:09:55 updated: 2023-11-15 07:53:52 categories: 学习记录&#xff1a;网络协议 excerpt: HTTP/1.1 协议的不足、HTTP/2、HTTP/3、HTTP 协议的安全问题、SPDY、HTTPS、SSL/TLS、OpenSSL。 comments: fa…

数据分析法宝,一个 SQL 语句查询多个异构数据源

随着企业数据量呈现出爆炸式增长&#xff0c;跨部门、跨应用、跨平台的数据交互需求越来越频繁&#xff0c;传统的数据查询方式已经难以满足这些需求。同时&#xff0c;不同数据库系统之间的数据格式、查询语言等都存在差异&#xff0c;直接进行跨库查询十分困难。 原生跨库查…

基础课3——客服中心现状

智能客服服务的对象就是客服中心&#xff0c;智能客服旨在帮助客服中心更好、更快地解决客户的问题。 1.客服中心的背景 随着数字化时代的到来&#xff0c;客户服务已经成为了企业中不可或缺的一部分。消费者对于客户服务的期望也在不断变化&#xff0c;他们不再满足于仅仅在…

揭秘拍卖竞价源码的前沿技术:加密、智能合约与更多

在数字时代的今天&#xff0c;拍卖竞价源码成为了炙手可热的话题。作为该领域的专家&#xff0c;我将带您深入了解这一前沿技术的奥秘。本文将揭示拍卖竞价源码的工作原理、加密技术的应用、智能合约的作用以及其他相关技术。 2. 拍卖竞价源码的工作原理 拍卖竞价源码是一种用…

配置DHCP服务器

概述 DHCP(Dynamic Hast Configuration Protocal)就是动态主机配置协议&#xff0c;可以自动配置主机的IP地址、子网掩码、网关及DNS等TCP/IP信息。以DHCP可以有效地降低客户端IP地址配置的复杂度和网络的管理成本。如果路由器能够转发DHCP请求&#xff0c;只需要在一个子网中…

传统工艺的数字时代转变:十八数藏的文化创新

在传统工艺和数字时代的交汇之处&#xff0c;十八数藏以其独特的文化创新走在了前列。这场数字时代的转变为传统工艺注入了新的生命和活力。 十八数藏的文化创新并非简单的数字应用&#xff0c;而是一场深刻的转变。通过数字技术&#xff0c;传统工艺被赋予了新的表达方式&…

网上赚钱有哪些项目可以长期做?盘点六个靠谱的副业项目

很多想扩宽收入来源&#xff0c;或者准备从事网络副业项目的人来说&#xff0c;在网上找到一个靠谱的项目也并非易事。现在的网络时代&#xff0c;网上赚钱成了一个备受关注的话题。但是现在却到处充斥着金钱和骗局的诱惑&#xff0c;不谨慎的朋友很容易被骗踩坑。 那么&#x…

吊椅在欧盟做EN581报告认证

什么是EN 581标准&#xff1f; EN 581标准是欧洲标准化委员会制定的关于户外家具机械物理性能要求的标准。该标准主要涉及耐候性、抗静态载荷、耐磨性、抗腐蚀性等方面的要求。 5.2 如何提高家具的抗静态载荷性能&#xff1f; 提高家具的抗静态载荷性能可以通过增加家具结构的…

系统之家重装Win10系统教程图解

系统之家官网给用户们提供了不同品牌系统的下载&#xff0c;帮助更多的用户完成Win10系统的重新安装&#xff0c;从而解决自己Win10系统所遇到的问题。如果有用户不清楚详细的重装系统步骤&#xff0c;那么可以参考下面小编分享借助系统之家装机大师软件重装Win10系统教程图解介…

在抖音电商,他们帮女性实现了L码自由

“很多&#xff08;女装&#xff09;店铺只做到L&#xff0c;甚至L&#xff08;其实&#xff09;是M码。”身高1米6、体重60公斤的达人鸭嗓明明120斤 在抖音上吐槽道&#xff0c;“尤其是夏天的连衣裙&#xff0c;胸围很多不超过85厘米&#xff0c;那它的意思就是你可以胖&…

查询站点真实IP地址,绕过CDN

一.如何判断站点是否使用了CDN&#xff1f; 使用其他省市的电脑进行ping看返回的IP地址是否相同通过第三方网站查询 站长工具 3.nslookup命令 二. 如何绕过CDN获取真实IP 子域名查询&#xff0c;因为很多站点只对主域名进行了CDN加速网站邮件头信息微步在线DNS查询

Umi-OCR :一个完全离线的OCR图片转文字识别软件。

Umi-OCR &#xff1a;一个完全离线的OCR图片转文字识别软件。 开源免费&#xff0c;支持截屏或批量导入图片&#xff0c;并能识别多国语言&#xff0c;合并段落&#xff0c;处理竖排文字。 排除图片中的水印区域&#xff0c;提取干净的文本。 忽略特定区域的文字识别&#x…

如何使用Imagewheel+内网穿透搭建私人图床实现公网访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

2023 PostgreSQL 数据库生态大会:解读拓数派大数据计算系统及其云存储底座

11月3日-5日&#xff0c;由中国开源软件推进联盟 PostgreSQL 分会主办的中国 PostgreSQL 数据库生态大会在北京中科院软件所隆重举行。大会以”极速进化融合新生”为主题&#xff0c;从线下会场和线上直播两种方式展开&#xff0c;邀请了数十位院士、教授、高管和社群专家&…

remove the conditional with polymorhpism

// refactoringmotherfucker.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <list> #include <memory>class Base { public:virtual void Process() 0; };class DoThis : public Base { public:vi…

投入式无线液位传感器说明书

1 概述 DAQ-GP-TLL4G无线液位传感器终端是上海数采物联网科技有限公司推出的一款无线液体水位测量产品。原理是利用扩散硅片上的一个惠斯通电桥&#xff0c;被测介质&#xff08;气体或液体&#xff09;施压使桥壁电阻值发生变化&#xff08;压阻效应&#xff09;&#xff0c;产…

SpringCloud集成Eureka并实现负载均衡

文章目录 前言1.Eureka2.整合Eureka作为注册中心2.1创建maven工程2.2依赖配置(Eureka-Server)2.3业务配置(Eureka-Client)2.4服务调用流程 3.集成负载均衡 前言 辗转两家公司也算工作了大半年&#xff0c;有幸见识过很多微服务架构&#xff0c;比如DubboRedis的组合&#xff1…

数据库操作入门:PyMongo 和 MongoDB 的基本用法

MongoDB MongoDB是一种流行的NoSQL数据库&#xff0c;它将数据存储在类似JSON的文档中&#xff0c;使数据库非常灵活和可扩展 PyMongo Python需要一个MongoDB驱动程序来访问MongoDB数据库。在本教程中&#xff0c;我们将使用MongoDB驱动程序 “PyMongo”。建议使用PIP来安装…

【AI】将Python项目打包成Docker镜像的小实践

1.准备工作 可以本地运行的Python程序 这个因人而异&#xff0c;可以是Anaconda环境&#xff0c;也可以是本机运行的Python环境&#xff0c;确保python程序是可以正常运行的。Docker环境 Docker环境是打包镜像必需的&#xff0c;可以安装Docker Desktop for Windows&#xff0…

钡铼技术4G RTU采集器在智慧农业灌溉控制中的使用介绍

随着科技的不断发展&#xff0c;智慧农业已经成为现代农业发展的重要方向之一。在智慧农业中&#xff0c;灌溉控制是至关重要的环节&#xff0c;而4G RTU采集器作为一种先进的数据采集设备&#xff0c;为智慧农业灌溉控制提供了全新的解决方案。本文将就钡铼技术有限公司的4G R…