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还是HttpResponseclass 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 viewsclass 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类里的dispatchdef 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_allowedreturn handler(request, *args, **kwargs)from django.views import Viewclass 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.rhkb.cn/news/191973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 二自由度操纵稳定性汽车模型

1、内容简介 略 19-可以交流、咨询、答疑 二自由度操纵稳定性汽车模型 二自由度、操纵稳定性、操纵动力学 2、内容说明 1 模型假设 忽略转向系的影响&#xff0c;以前、后轮转角作为输入&#xff1b;汽车只进行平行于地面的平面运动&#xff0c;而忽略悬架的作用&#xf…

linux时间同步

搭建集群时&#xff0c;都会先设置时间同步&#xff0c;否则会出现多种问题。 方式一&#xff1a; 1.安装ntp软件 yum install -y ntp 2.更新时区 删除原有时区&#xff1a;sudo rm -f /etc/localtime 加载新时区&#xff1a;sudo ln -s /usr/share/zoneinfo/Asia/Shangh…

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

java实现插入排序

图解 以下是Java实现插入排序的代码&#xff1a; public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

Node.js 框架 star 星数量排名——NestJs跃居第二

文章目录 什么是NodeJs?什么是NodeJs框架?图表数据框架排名 什么是NodeJs? Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得我们可以在服务器端使用JavaScript开发高效、可扩展的应用程序。作为一个快速、轻量级的平台&#xff0c;Node.js在Web开发领…

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…

《未来之路:技术探索与梦想的追逐》

创作纪念日 日期&#xff1a;2023年07月05日文章标题&#xff1a;《从零开始-与大语言模型对话学技术-gradio篇&#xff08;1&#xff09;》成为创作者第128天 在这个平凡的一天&#xff0c;我撰写了自己的第一篇技术博客&#xff0c;题为《从零开始-与大语言模型对话学技术-…

Web APIs——正则表达式使用

1、什么是正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本&#xff0c;许多语言都支持正则表达式 1.1 正则表达式使用场景 例如…

新能源充电桩物联网应用之工业4G路由器

新能源充电桩是智慧城市建设中不可缺少且可持续发展的重要设施&#xff0c;而工业4G路由器物联网应用为其提供了更加高效、智能、实时的管理方式。充电桩通过工业4G路由器可以与充电运营商的管理中心建立稳定的连接&#xff0c;实现双向数据传输&#xff0c;为用户提供优质的充…

基于单片机的塑料厂房气体检测系统设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计实物 四、结论五、 文章目录 概要 本文首先分析了基于单片机的可燃…

媒体软文投放的流程与媒体平台的选择

海内外媒体软文&#xff1a;助力信息传播与品牌建设 在当今数字化时代&#xff0c;企业如何在庞大的信息海洋中脱颖而出&#xff0c;成为品牌建设的领军者&#xff1f;媒体软文投放无疑是一项强大的策略&#xff0c;通过选择合适的平台&#xff0c;精准投放&#xff0c;可以实…

android studio新版本gradle Tasks找不到assemble

最近需要打包arr&#xff0c;但android studio新版本为了加快编译速度&#xff0c;取消了gradle下的assemble任务&#xff0c;网上还没有博主更新解决方案&#xff0c;因此一直找不到解决方案&#xff0c;后来尝试如下操作才解决&#xff0c;方便后来者解决。 先将这里勾选上&…

【FastCAE源码阅读9】鼠标框选网格、节点的实现

一、VTK的框选支持类vtkInteractorStyleRubberBandPick FastCAE的鼠标事件交互类是PropPickerInteractionStyle&#xff0c;它扩展自vtkInteractorStyleRubberBandPick。vtkInteractorStyleRubberBandPick类可以实现鼠标框选物体&#xff0c;默认情况下按下键盘r键开启框选模式…

【Python基础】网络编程之Epoll使用一(符实操:基于epoll实现的实时聊天室)

&#x1f308;欢迎来到Python专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mys…

Java学习之路 —— Day2(OOP)

文章目录 1. 方法2. OOP2.1 static2.2 单例模式2.3 继承2.4 多态 3. 常用API3.1 包3.2 String3.3 ArrayList 1. 方法 方法定义时要使用public static修饰&#xff0c;这是和C最不同的地方&#xff0c;因为java都是基于类执行的。 Java的参数传递机制是值传递&#xff0c;即传…

记录第一次利用CVE-2023-33246漏洞实现RocketMQ宿主机远程代码执行的兴奋

我依然记得自己第一次发现xss漏洞时候的兴奋: 我也记得自己第一次发现sql输入时候的快乐: 直到最近我终于收获了人生的第一个远程代码执行漏洞的利用&#xff08;RCE:remote code execute&#xff09;&#xff0c;虽然这个漏洞的危害远超过了前两个&#xff0c;但是快乐不如前…

ctf之流量分析学习

链接&#xff1a;https://pan.baidu.com/s/1e3ZcfioIOmebbUs-xGRnUA?pwd9jmc 提取码&#xff1a;9jmc 前几道比较简单&#xff0c;是经常见、常考到的类型 1.pcap——zip里 流量分析里有压缩包 查字符串或者正则表达式&#xff0c;在包的最底层找到flag的相关内容 我们追踪…

C#动态拦截并覆盖第三方进程的函数,实现函数篡改(外挂)

今天在看之前收藏的一个pdf文档(介绍C#外挂的相关知识的)&#xff0c;结合网上的东西及个人的理解才有了这篇文章。 参考文章&#xff1a; 【精选】一文带解读C# 动态拦截覆盖第三方进程中的函数&#xff08;外挂必备&#xff09;_zls365365的博客-CSDN博客 DotNetDetour - …

NOIP 2017 宝藏----Java题解

目录 NOIP 2017 宝藏 题目描述 输入描述: 输出描述: 输入 输出 说明 输入 输出 说明 备注: 代码实现&#xff1a; NOIP 2017 宝藏 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO For…

阿里云 OSS使用介绍

1、什么是阿里云 OSS&#xff1f; OSS 为 Object Storage Service&#xff0c;即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口&#xff0c;可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。…