Django(5)视图

2023-05-16

文章目录

  • 一、视图概述
  • 二、请求对象HttpRequest
    • (1)GET
    • (2)POST
    • (3)body
    • (4)path
    • (5)method
  • 三、响应对象HttpResponse
    • (1)HttpResponse()
    • (2)render()
    • (3)redirect()

此文章参考菜鸟教程:Django 视图 | 菜鸟教程 (runoob.com)

Django版本:

>>> 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()没有获取到值

在这里插入图片描述

  • 现在进行传参,访问127.0.0.1:8000/test/?name=zhangsan,使用?添加传入参数
    在这里插入图片描述

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

在这里插入图片描述

(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方式进行调用

在这里插入图片描述

(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方式

在这里插入图片描述

  • 直接访问,查看终端输出
    在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

  • 可以看到输出了传入的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')
  • 直接访问,查看终端,可以看到输出了资源路径

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

(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')
  • 同样使用两种方式访问测试,观察终端输出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、响应对象HttpResponse

  • 响应对象主要有三种形式:
  1. HttpResponse()
  2. render()
  3. redirect()
  • 下面分别介绍三种形式

(1)HttpResponse()

  • 返回文本,参数为字符串,字符串中添加文本内容,如果参数中含有HTML标签,也可以进行渲染,之前使用的基本都是此方式,实例:
def runoob(request):
    return HttpResponse("<a href='https://www.runoob.com/'>菜鸟教程</a>")

在这里插入图片描述

# -*- coding: utf-8 -*-
from django.http import HttpResponse

def test(request):
    return HttpResponse("Baidu")

在这里插入图片描述

(2)render()

  • 返回文本,需要指定参数,其中:

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})
  • 访问

在这里插入图片描述

(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!!")

  • 访问,查看终端输出,可以看到跳转重定向

在这里插入图片描述

在这里插入图片描述

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

render:底层返回的是HttpResponse对象

redirect:底层继承的是HttpResponse对象
终端输出,可以看到跳转重定向

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django(5)视图 的相关文章

  • ImportError:在 Google 应用引擎中找不到 django.utils

    当我在 google app engine 项目中使用 django utils 中的 simplejson 时 出现此错误 Traceback most recent call last File base python27 runtim
  • 在生产中提供 django 媒体(用户上传)文件

    我已将我的 django 网站部署到 webfaction 托管服务上 并且我正在努力寻找如何在生产中为用户上传的媒体文件提供服务 关于如何在开发中提供媒体文件存在很多问题 但似乎没有关于在生产中提供媒体 用户上传 文件的信息 目前 我的
  • 表单提交后 Django 重定向不起作用

    Django 新手 所以这个可能有一个非常简单的答案 但我一生都找不到具体的解决方案 我只是想在使用 FileField 提交表单后重定向到新的 URL 我可以单独导航到该 URL 效果很好 文件上传正确 因此我知道它已正确验证 但重定向返
  • django REST框架多源领域

    假设我的 models py 中有这些 models py class Theme models Model An theme is an asset of multiple levels adventure models ForeignK
  • return float(value) ValueError: 无法在 Django 模型中将字符串转换为浮点数

    我尝试在这个 Django 模型上进行迁移 迁移 from django db import models from myapp models import Site class GscElement models Model ctr mo
  • Django 1.8 KeyError:关系上的“经理”

    我的模型设置如下 class Post models Model name models CharField max length 10 class Comment models Model post models ForeignKey P
  • Django ManyToManyField 在数据库中的位置/如何表示?

    UPDATE 刚刚发现 当选择特定专辑时 ManyToManyField 会导致管理界面崩溃 我将它们注释掉 注释掉所有对其的引用 重新运行makemigrations and migrate 现在管理界面又可以工作了 这让我离让这个 最喜
  • 将 Django 部署到 AWS;傻瓜静态文件

    我对这个项目的最后一步完全迷失了 到目前为止 我已经能够开发一个 Django 应用程序 它可以在本地主机上按照我想要的方式工作 我已经能够将网站部署到 AWS EC2 但我一定错过了有关提供静态文件的一些基本知识 我什至还没有尝试过媒体文
  • 在 Google App Engine 上运行的最佳 Django 功能?

    我正在 App Engine 上启动一个新项目 并且布兰登的建议 https stackoverflow com questions 485178 architecture guidance for appengine websites 5
  • Django 子应用程序和模块结构

    我正在开发一个 Django 应用程序 这是一个大型系统 需要多个子应用程序来保持整洁 因此 我有一个顶级目录 它是 Django 应用程序 因为它有一个空的models py文件 和多个子目录 它们本身也是应用程序 我以这种方式布局应用程
  • 如何在 Django 中将 pdf 作为电子邮件附件发送

    您好 我正在使用以下 2 个函数来创建并通过邮件即时发送 pdf 我究竟做错了什么 导出pdf功能在浏览器中显示时可以正常工作 我得到的错误是 类型错误 ContentFile 对象不支持索引 我做错了什么 几乎所有这些代码都来自一些博客
  • ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:852)

    Django 项目检查博客上单词的出现频率 项目还没有完成 但是之前的scraper没有给出任何错误 切换到另一个电脑后出现错误 但我不确定这是否重要 当我尝试运行抓取脚本时 出现以下错误 ssl SSLError SSL CERTIFIC
  • Django:密码重置电子邮件主题行包含“example.com”

    我使用通用视图 django contrib auth views password reset 作为密码重置表单 原则上 这一切都有效 只是发送的电子邮件的主题行包含 example com 如 在 example com 上重置密码 所
  • 随机数据库与 AWS 中的 Django 和 Postgresql 断开连接

    我试图找出 Django 和数据库连接错误问题的根源 此时 我正在调试提示 因为我认为症状太不具体 一些背景 我一直在使用这个堆栈 在 AWS 中部署了很多年 没有出现任何问题 Ubuntu 在本例中为 20 04 LTS Nginx Uw
  • 如何使用 django-pyodbc (ubuntu 16.04) 配置数据库设置 Django-MSSQL?

    我是 Django 新手 目前正在尝试使用另一个数据库来保存我的模型 即MS SQL 我的数据库部署在docker容器中 903876e64b67 microsoft mssql server linux bin sh c opt mssq
  • Django - 隐藏内联标签

    如何在 Django 内联中隐藏标签 当我理解正确时 您可以通过添加属性将 verbose name 设置为模型中的空字符串 verbose name 到你的领域就像 street models CharField max length 5
  • HTMX 用于处理来自 django 后端的消息

    我想使用 HTMX 来显示来自 django 后端的消息 经过大量的试验和错误 我最终得到了一个可行的解决方案 我想把它留给任何寻找它的人 另外 请随时发表您的建议 不幸的是 除了一点点example https github com ad
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 无法创建超级用户 Django

    我假设这是因为我的超级用户依赖于还没有现有数据的 UserProfile 我的模型看起来像 from django db import models from django contrib auth models import User f
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我

随机推荐

  • 重要性抽样方法实例分享

    经过matlab爱好者公众号连续不断的推送Monte Carlo方法 xff0c 所以我们对其了解透彻了吗 xff1f NO xff01 当然还得日日精进 大家经常使用的Monte Carlo方法并不完美 xff0c 我估计大多数人也听不懂
  • 你们要的网页版matlab来了,速领!

    近来有不少小伙伴在公众号里面问网页版matlab xff0c 之前公众号确实是在菜单中给大家分享过一款网页版matlab编译环境 xff0c 不过由于公众号菜单更新换代 xff0c 已经将相关分享入口给取消了 xff0c 为了让大家更加方便
  • RHEL本地登录login出现permission denied的可能的解决办法

    OS xff1a RHEL7 6 开机后发现在本地使用root和非root用户登录 xff0c 输入用户名密码后 xff0c 都会出现permission denied xff0c 没有办法进入到系统 在网上查了很多资料 xff0c 看到这
  • Updating crates.io index 速度慢的解决办法

    Rust社区公开的第三方包都集中在crates io网站上面 xff0c 他们的文档被自动发布到doc rs网站上 Rust提供了非常方便的包管理器cargo xff0c 它类似于Node js的npm和Python的pip 但cargo不
  • SecureCRT 密码解密

    SecureCRT xff08 8 以上 xff09 配置的密码存放在 Config Sessions下面的ini文件中 xff0c 内容如下 xff1a S Username 61 S Monitor Password V2 61 S P
  • AD10 四层板经验(层的性质)

    层的性质 xff1a 内部层有两种 xff1a plane和layer xff0c 他们的区别如下 xff1a plane是所有Layer的其中一个 xff0c Layer是指层 xff0c 例如有常见的信号层Signal Layers 顶
  • Centos7下httpd最新版本安装或者更新至最新版本

    查找Centos上软件库里的httpd版本 yum info httpd yum info httpd 已加载插件 xff1a fastestmirror Loading mirror speeds from cached hostfile
  • 修改git远程仓库地址

    由于git仓库的地址发生了变化 xff0c 需要修改仓库地址才能push 查看本地工程git仓库关联的远程仓库地址 xff1a span class token function git span remote v 删除本地关联的远程仓库地
  • INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法

    在Android模拟器上安装apk的时候出现 xfeff xfeff INSTALL FAILED NO MATCHING ABIS 这个错误提示的解决办法 是由于使用了native libraries 该native libraries
  • IntelliJ IDEA 控制台中文乱码

    1 预热 刚刚接触IntelliJ IDEA几天 xff0c 在易用性方面的确比Eclipse好很多 xff0c 比较智能 xff0c 各种插件 工具都已经集成 xff0c 和Mac OS X类似 开箱即用 但是还是老大难问题 中文乱码 x
  • unable to start the monitor on 4454 ,an other instance is problaly using the same port

    在打开idea studio后 xff0c 再打开android studio xff0c 或者反过来 xff0c 打开项目的时候就会报 xff1a unable to start the monitor on 4454 xff0c an
  • windows中为cmd设置代理

    在CMD环境下设置代理可能不是很常用 xff0c 但是某些情况下还是可能会用到 xff0c 比如有些资源网站被墙了 xff0c 此时你如果想访问这些资源时 xff0c 只能通过代理来访问相应的资源 xff0c 而你需要在CMD环境下下载墙外
  • version `GLIBCXX_3.4.21' not found 解决办法

    在安装cmake3 5 1运行 bootstrap的时候出现如下提示 xff1a gmake cmake 是最新的 span class hljs header usr soft cmake 3 5 1 Bootstrap cmk cmak
  • Oracle死锁查询及处理

    一 数据库死锁的现象 程序在执行的过程中 xff0c 点击确定或保存按钮 xff0c 程序没有响应 xff0c 也没有出现报错 二 死锁的原理 当对于数据库某个表的某一列做更新或删除等操作 xff0c 执行完毕后该条语句不提 交 xff0c
  • Ubuntu 18.04添加中文输入法

    找到设置 xff1a 点击 Manager Installed Languages 出现下图提示 xff1a Keyboard input method system 里面有Ibus XIM fcitx none 三种输入架构 xff0c
  • KEIL问题【打开文件太多造成任何按钮都不可点】【Keil4 编译时出现RL-ARM is not allowed with this license 】【 局部变量仿真显示not in scope】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • Django(2)模板、标签

    文章目录 一 使用Django模板修改页面二 Django模板标签 变量 列表 字典 过滤器1 default2 length3 filesizeformat4 date5 truncatechars6 safe if else标签 for
  • Django(3)模型

    文章目录 一 Django 模型 ORM二 数据库配置三 定义模型 xff08 创建数据表 xff09 四 数据库基本操作 插入数据 获取数据 xff08 1 xff09 查询所有的数据行 xff08 2 xff09 where条件查询 x
  • Django(4)表单

    文章目录 一 概述二 GET方法三 POST方法四 Request对象五 QueryDict对象 此文章参考菜鸟教程 xff1a Django 表单 菜鸟教程 runoob com Django版本 xff1a span class tok
  • Django(5)视图

    文章目录 一 视图概述二 请求对象HttpRequest xff08 1 xff09 GET xff08 2 xff09 POST xff08 3 xff09 body xff08 4 xff09 path xff08 5 xff09 me