06 - Django 视图view

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, POST
    GET     类似字典的参数,包含了get的所有参数
    POST    类似字典的参数,包含了post所有参数
    FILES   类似字典的参数,包含了上传的文件
    COOKIES 字典,包含了所有COOKIE
    session 类似字典,表示会话
    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)调用模板,进行渲染。
    使用render
      render(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)  设置cookie
  delete_cookie(key)   删除cookie

HttpResponse子类
  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/ DELETE
    print(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=18

    print(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 = 200
    return response
相关推荐
Java小白程序员14 分钟前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
WBluuue19 分钟前
数学建模:智能优化算法
python·机器学习·数学建模·爬山算法·启发式算法·聚类·模拟退火算法
小小愿望32 分钟前
前端无法获取响应头(如 Content-Disposition)的原因与解决方案
前端·后端
赴3351 小时前
矿物分类案列 (一)六种方法对数据的填充
人工智能·python·机器学习·分类·数据挖掘·sklearn·矿物分类
大模型真好玩1 小时前
一文深度解析OpenAI近期发布系列大模型:意欲一统大模型江湖?
人工智能·python·mcp
RPA+AI十二工作室1 小时前
亚马逊店铺绩效巡检_影刀RPA源码解读
chrome·python·rpa·影刀
向日葵.1 小时前
fastdds.ignore_local_endpoints 属性
服务器·网络·php
追逐时光者1 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)
后端·.net
小艳加油2 小时前
Python机器学习与深度学习;Transformer模型/注意力机制/目标检测/语义分割/图神经网络/强化学习/生成式模型/自监督学习/物理信息神经网络等
python·深度学习·机器学习·transformer
杨DaB2 小时前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger