06 - Django 视图view

server/2024/12/28 19:34:31/

HttpRequest 和 HttpResponse

Django中的视图主要用来接受Web请求,并做出响应。

视图的本质就是一个Python中的函数

视图的响应分为两大类

  1. Json数据形式返回(JsonResponse)
  2. 以网页的形式返回
    1. 重定向到另一个网页 (HttpResponseRedirect)
    2. 错误视图(4XX,5XX) (HttpResponseNotFound, HttpResponseForbidden, HttpResponseNotAllowed 等)
  3. 视图响应过程:
    1. 浏览器输入-> urls路由匹配 -> 视图响应 -> 回馈到浏览器
  4. 视图参数:
    1. 一个HttpRequest的实例,一般命名为request
    2. 通过ur1正则表达式传递过来的参数
  5. 位置:

通常在应用下的views.py中定义

  1. 错误视图:
    1. 404视图(页面没找到)
    2. 400视图(客户操作错误)
    3. 500视图(服务器内部错误)
HttpRequest

服务器在接收到Http请求后,会根据报文创建HttpRequest对象

视图中的第一个参数就是HttpRequest对象

Django框架接收到http请求之后会将http请求包装为HttpRequest对象,之后传递给视图。

python">request常用属性和方法:属性:path    请求的完整路径method  请求的方法,常用GET, POSTGET     类似字典的参数,包含了get的所有参数POST    类似字典的参数,包含了post所有参数FILES   类似字典的参数,包含了上传的文件COOKIES 字典,包含了所有COOKIEsession 类似字典,表示会话META    一个字典,包含了请求的元信息,例如:'REMOTE_ADDR' 客户端的IP地址方法:is_ajax()    判断是否是ajax请求,通常用在移动端和JS中get_full_path()  返回包含参数字符串的请求路径QueryDict:类似字典的对象。与字典的区别:可以存在相同的键。QueryDict中数据获取方式:dict['uname']dict.get('uname')    获取指定key对应的第一个值dict.getlist('uname')                获取指定key对应的所有值
HttpResponse
python">HttpResponse由程序员自己创建:1)不使用模板,直接调用HttpResponse(),返回HttpResponse对象。2)调用模板,进行渲染。使用renderrender(request, template_name[, context])request     请求体对象template_name 模板路径context   字典参数,用来填坑
属性:content      返回的内容charset    编码格式status_code  响应状态码(2xx, 3xx, 4xx, 5xx)
方法:write(xxx)      直接写出文本flush()       冲刷缓冲区set_cookie(key, value='xxx', max_age=None)  设置cookiedelete_cookie(key)   删除cookieHttpResponse子类HttpResponseRedirect响应重定向:可以实现服务器内部跳转return HttpResponseRedirect('/grade/2030')使用的时候推荐使用反向解析JsonResponse返回Json数据的请求,通常用在异步请求上JsonResponse(dict)返回json数据时, Content-type是application/json
views.py
python">from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import redirect, render# Create your views here.def myrequest(request):print(request)  # <WSGIRequest: GET '/request/?name=lisi&age=18'># request对象的属性和方法print(request.method)  # GET / POST/ PUT/ DELETEprint(request.GET)  # QueryDict对象(类字典对象,可以使用字典方法),包含GET请求参数print(request.GET['name'])  # 如果name不存在,会报错print( request.GET.get('name'))  # 如果name不存在,返回None或者默认值print(request.GET.getlist('name'))  # 如果name不存在,返回空列表, 否则返回列表print(request.POST)  # QueryDict对象,包含POST请求参数print(request.path)  # 请求路径/request/print(request.get_full_path())  # 请求完整路径 (包含查询字符串)/request/?name=lisi&age=18print(request.COOKIES)  # 字典对象,包含cookie信息print(request.session)  # 字典对象,包含session信息print(request.FILES) # 如果是上传文件,返回一个文件对象,否则返回None,前端上传的文件# print(request.META) # 字典对象,包含HTTP请求头信息print(request.META['REMOTE_ADDR']) return HttpResponse("Hello Django!")def myresponse(request):# 1. 直接返回字符串# return HttpResponse("Hello Django!")# 2. 传入模板文件, 前后端不分离# return render(request, 'index.html')# 3. 重定向, redirect, reverse# return redirect('/request/')# return HttpResponseRedirect('/request/')# 4. 返回json数据, 前后端分离的方式# data = {'name': 'lisi', 'age': 18}# return JsonResponse(data)response = HttpResponse()response.content = 'Hello Django!'response.status_code = 200return response

http://www.ppmy.cn/server/154001.html

相关文章

MySQL并发问题区别-MVCC如何解决的

脏读 事务a&#xff0c;事务b&#xff0c;b读到了a刚修改未提交的数据 不可重复读 针对同一行记录&#xff0c;两次读到的结果不一致 &#xff08;范围是一行&#xff09; 幻读 范围比不可重复读大很多&#xff0c;是表的范围&#xff0c;事务a第一次查的时候不存在&#…

zabbix5.0版本(安装部署+添加服务器+拆分数据库)

目录 1.监控内容 2.监控工具 3.Zabbix安装 4.Zabbix添加监控服务器 5.拆分数据库 本篇文章介绍zabbix监控&#xff0c;监控是对我们操作系统进行不间断的监控&#xff0c;这是软件生命周期非常重要的一环&#xff0c;可以做到事前告警&#xff0c;事后根据监控内容排查问题…

vs2022 C/C++安装额外库有感

网上找的安装xxx库总有一大堆说要搞cmake的&#xff0c;对于没用过cmake又没啥这方面专业名词概念的小白实在很难受&#xff0c;大概讲一下 如果你只是想要安装某个库到你的项目上&#xff0c;你不需要用cmake专门去编译一个项目&#xff0c;实际上也用不到cmake&#xff0c;你…

三层交换机配置

一&#xff0c;三层交换 概念&#xff1a;三层交换技术就是&#xff1a;二层交换技术三层转发技术(路由器功能)。它解决了局域网中网段划分之后&#xff0c;网段中子网必须依赖路由器进行管理的局面&#xff0c;解决了传统路由器低速&#xff0c;复杂所造成的网络瓶颈问题。 …

python 聚类实战

目录 效果图: 代码: 效果图: 代码: import numpy as np import cv2 from sklearn.cluster import DBSCAN# 创建一个二值图像作为示例 # 1表示线段上的点,0表示背景 binary_image = np.zeros((100, 100), dtype=int)# 假设有两条线段,分别是: # 线段1:从 (20, 20) 到…

【面试题二】 2024 大厂进阶Vue3面试题及答案(10道)

Vue 3 进阶面试题及答案 1. Vue 3 的数据响应原理是什么&#xff1f; 答案概要&#xff1a; Vue 3 使用了代理 (Proxy) 来替代 Vue 2 中的 Object.defineProperty 实现数据的响应式。具体来说&#xff1a; 当数据被初始化时&#xff0c;Vue 3 会利用 ES6 的 Proxy 对象来代理…

linux中,redis分布式集群搭建

redis分布式集群(分布式存储)1.redis分布式高可用存储概念核心概念:哈希槽crc算法计算key值,对16384取余,值在0-16383之间crc % int ...结论:判断redis集群是否高可用的标准,哈希槽是否完全利用2.redis分布式高可用集群搭建 (1)修改并同步配置文件(2)使用命令创建集群(1)修改并…

Spring Boot 中 RabbitMQ 的使用

目录 引入依赖 添加配置 Simple&#xff08;简单模式&#xff09; 生产者代码 消费者代码 ?编辑 Work Queue&#xff08;工作队列&#xff09; 生产者代码 消费者代码 Publish/Subscribe&#xff08;发布/订阅&#xff09; 生产者代码 消费者代码 Routing&#x…