Django(5)视图

简介: Django(5)视图
>>> django.VERSION  
(4, 1, 0, 'final', 0)


PS:基于前几章的进度进行修改


一、视图概述


一个视图函数简称为视图,它是Python的一个函数,主要功能是接受Web请求并且返回Web响应,响应的请求可以是一个HTML页面、一个404错误页面、一个重定向页面、一个XML文档或者是一张图片


无论视图本身包含什么逻辑,都需要返回响应,代码写在哪里都可以,只要是在Python目录下即可,一般来说都会放在项目的views.py文件中,前几章的testdb.py就是视图文件


每个视图函数都负责返回一个HttpResponse对象,对象中包含生成的响应,而视图层中有两个重要的对象:


请求对象HttpRequest


响应对象HttpResponse


二、请求对象HttpRequest


  • 请求对象HttpRequest简称Request对象,下面看几个常用的Request属性


(1)GET


数据类型是QueryDict,一个类似与字典的对象,包含了HTTP GET的所有参数

有相同的键,旧把所有的值放到对应的列表里,取值格式为对象.方法,下面是实例:

- 创建一个views.py文件,写入
get():返回字符串,如果改建有多个值,那么会取出该建的最后一个值
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def test(request):
    name = request.GET.get("name")
    return HttpResponse('you name is : {}'.format(name))
- 修改urls.py文件
#-*- coding: utf-8 -*-
from django.urls import path
from . import views  #导入模块
urlpatterns = [
    path('test/',views.test),   #指定方法
]
  • 启动django


python manage.py runserver 0.0.0.0:8000


访问127.0.0.1:8000/test,可以发现,因为没有传参,所以get()没有获取到值

b307e5fa6dc040618a31dc8cadcc6cc9.png


现在进行传参,访问127.0.0.1:8000/test/?name=zhangsan,使用?添加传入参数


9d5bebda0c924f5d8056bcfe4d032f84.png

使用postman使用GET方式进行调用


e52194afc8914639a3a7ee681fcf4373.png




(2)POST


  • 数据类型同样是QueryDict,包含了HTTP POST的所有参数,POST常用于form表单,form表单里的标签name属性对应参数的键,而value属性对应参数的值
  • 取值格式为对象.方法,下面是实例:
- 修改views.py文件
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
    name = request.POST.get("name")
    return HttpResponse('you name is : {}'.format(name))
- 注释:
当采用客户端象 django 的服务器提交 post 请求时,会得到403,权限异常。这是因为 django 针对提交的请求有校验,所以需要在视图函数之前添加装饰器

使用postman使用POST方式进行调用


484fc06d385a471eaa40c624ef2b77a4.png

(3)body


  • 数据类型是二进制字节流,是原生请求体里的参数内容,在HTTP中主要作用于POST==(GET没有请求体)==
  • body在HTTP中不常用,而在处理非HTTP形式的报文时非常有用,例如:二进制图片、XML、Json等,下面来看实例:
- 修改views.py文件
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
    name = request.body
    print(name)
    return HttpResponse('Test')
  • 访问IP:8000/test/,直接访问是GET方式



ac85fa8444fa41679619dcb241347581.png


直接访问,查看终端输出

3c3dcce42122452985c9c60f5c508830.png


  • 使用postman访问,传入name参数,查看终端输出

f21a73c2a2744ef7867756cb85bd5cde.png


adf4e346a6274743bc60980c6ba94235.png


  • 可以看到输出了传入的name参数


(4)path


  • 获取URL中的路径部分,数据类型是字符串,实例:
- 修改views.py文件
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
    name = request.path
    print(name)
    return HttpResponse('Test')
  • 直接访问,查看终端,可以看到输出了资源路径



29caa26484b44226a5a69dd3d3ea4c34.png

ad13a32f18ca4b4689657305de7171e2.png



使用postman访问,使用POST方式,查看终端


a3a3097061a146b4a7e3ee7911cc33e8.png

aa92783baf8a44bfa2ec593f09f02632.png


(5)method


  • 获取当前的请求方式,数据类型是字符串,输出结果是大写的,实例:


- 修改views.py文件
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
    name = request.method
    print(name)
    return HttpResponse('Test')


同样使用两种方式访问测试,观察终端输出

01913cc27d25475d805b9a567ffa4a68.png0f7e073720c64b81a2c9ecff5ed28ad2.png

fde8a39c0cbb4b6f89cfbe69eb90aa36.png

1bf1905da319462d9a7341fad9dabc2b.png

三、响应对象HttpResponse


  • 响应对象主要有三种形式:


  1. HttpResponse()
  2. render()
  3. redirect()


  • 下面分别介绍三种形式


(1)HttpResponse()


  • 返回文本,参数为字符串,字符串中添加文本内容,如果参数中含有HTML标签,也可以进行渲染,之前使用的基本都是此方式,实例:


def runoob(request):
    return HttpResponse("<a href='https://www.runoob.com/'>菜鸟教程</a>")

7baecaebd3014d4a84baaf29151b82db.png


# -*- coding: utf-8 -*-
from django.http import HttpResponse
def test(request):
    return HttpResponse("Baidu")

a897d4ef64f6418294c72c4be3c7b91b.png


(2)render()


  • 返回文本,需要指定参数,其中:
render(request, template_name, context=None, content_type=None, status=None, using=None)

request:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等

template_name:必要参数,设置模板文件名,用于生成网页内容

context:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典

content_type:响应内容的数据格式,一般情况下使用默认值即可

status:HTTP状态码,默认是200

using:设置模板引擎,用于解析模板文件、生成网页内容等


  • 实例:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
def test(request):
    name = "Test"
    return render(request,"test.html",{"name":name})
  • 访问

46db0d7c0be84d9fa41c7d81a50c6bdf.png


(3)redirect()


  • 重定向,跳转新页面,参数为字符串,字符串中填写页面路径,一般适用于form表单提交后,跳转到新页面
  • 实例:
- 修改urls.py路由文件
#-*- coding: utf-8 -*-
from django.urls import path
from . import views
urlpatterns = [
    path('test/',views.test),
    path('index/',views.index),  #添加新路径
]
- 修改views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import redirect
def test(request):
    return redirect("/index/")  #跳转到index
def index(request):   
    return HttpResponse("hello world!!")
  • 访问,查看终端输出,可以看到跳转重定向

0c557a0774ee4561bb3c30f84c2eccf2.png

8db3d0db17674321ba143534929a319a.png

注意:render和redirect是在HttpResponse的基础上进行了封装,具体为:


render:底层返回的是HttpResponse对象

redirect:底层继承的是HttpResponse对象

终端输出,可以看到跳转重定向

目录
相关文章
|
6月前
|
Python
Django——视图
Django——视图
|
4月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
72 2
|
4月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
46 1
|
3月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
86 0
|
4月前
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
Django 如何使用视图动态输出 CSV 以及 PDF
53 4
|
4月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
5月前
|
API 数据库 数据安全/隐私保护
Django配置api、管理系统和视图
Django配置api、管理系统和视图
130 1
|
4月前
|
测试技术 Shell 数据库
Django视图测试:构建可靠Web应用的关键步骤
Django视图测试:构建可靠Web应用的关键步骤
31 0
|
6月前
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
这一篇我们需要用到 python 的 csv 和 reportLab 库,通过django视图来定义输出我们需要的 csv 或者 pdf 文件。