在Django MTV模式中,View视图负责业务逻辑部分,路由系统接收到HTTP请求,并将任务分配给相应的视图函数,由视图函数来负责响应这个请求。无论视图本身包含什么逻辑,都要返回响应。

在这里HTTP请求中产生两个核心对象:

  • HTTP请求:HttpRequest对象
  • HTTP响应:HttpResponse对象

所在位置:django.http

在Django项目中,一个app内的视图函数都放在views.py中

def register(request): # 一个视图函数
print(request)

HttpRequest对象的属性和方法

request.path   获取路径
request.get_full_path() 带数据的路径
request.method 请求方式("POST"/"GET")
request.GET 包含所有HTTP GET参数的类字典对象
request.POST 包含所有HTTP POST参数的类字典对象
name = request.POST.get("user") 获取提交的数据(form表单中name属性为user的 用户输入文本值)
pwd = request.POST.get("pwd")(form表单中name属性为pwd的 用户输入的文本值) 服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
if request.POST来判断是否使用了HTTP POST 方法;应该使用 if request.method=="POST" request.COOKIES 包含所有cookies的标准Python字典对象;keys和values都是字符串。
FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
filename: 上传文件名,用字符串表示
content_type: 上传文件的Content Type
content: 上传文件的原始内容 request.user 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。
你可以通过user的is_authenticated()方法来辨别用户是否登陆:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用 request.session 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。 request.META 包含了所有本次HTTP请求的Header信息,是一个python字典。这个字典中常见的键值有:
HTTP_REFERER 进站前链接网页,可以用来统计网站流量来源。 (请注意,它是REFERRER的笔误)
HTTP_USER_AGENT 用户浏览器标识,可以获知浏览器的型号版本等信息。
REMOTE_ADDR 客户端IP(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址)

HttpResponse对象的属性和方法

页面渲染: 推荐用render(request,"模板.html",{})  第三个参数可以是键值对,也可以是locals()函数
页面跳转: redirect("路径")
locals() 可以直接将函数中所有的变量传给模板 render和redirect的区别:
redirect跳转将会使url发生改变,而render不会改变。要在合适的时候使用redirect

示例:

url.py中:
url(r"login", views.login),
url(r"yse", views.yes), views.py中:
def login(request):
if request.method == "POST":
if request.POST.get("user") == "alex" and request.POST.get("pwd") == "666":
return redirect("/yes/")
return render(request,"login.html",locals())
def yes(request):
name = "alex"
return render(request,"yes.html",locals()) login.html中:
<form action="/register/" method="post">
<div class="input">
<input type="text" class="inputs" placeholder="用户名" name="user">
</div>
<div class="input">
<input type="password" class="inputs" placeholder="密码" name="pwd">
</div>
<input type="button" class="button" value="注册">
</form>
yes.html中:
<h1>{{ name }}你好!</h1> 总结: render和redirect的区别:
1. render的页面需要模板语言渲染,即需要将数据库的数据加载到html,那么所有的这些数据除了写在yes的视图函数中,必须还要写在login中,代码重复,没有解耦.
2. 最重要的: url没有跳转到/yes/,而是还在/login/,所以当刷新后又得重新登录。

  

Django view(视图)的更多相关文章

  1. Django View视图

    视图view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者 ...

  2. django view 视图控制之数据返回的视图函数

    八.视图 view 概述:views.py定义的python函数,它接受Web请求并且返回Web响应. 有几个页面就有几个视图view user出入url地址,发送request--->urls ...

  3. Django view 视图

    request.method 判断请求方式 8种 GET : 获取一个页面 POST: 提交数据 PUT : 上传 HEAD: 不用上传就获取数据 DELETE: 删除 Request-URL 标识的 ...

  4. Django的View(视图)和路由系统

    一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...

  5. Django中的View视图讲解

    Django中的View视图(view.py)是负责处理用户请求和返回响应的逻辑. 视图函数或视图简而言之就是一个python函数,它接受一个web请求并返回一个Web响应. 此响应可以是网页的HTM ...

  6. Django框架 之 view视图

    Django框架 之 view视图 浏览目录 概述 简单的视图 HttpRequest对象 CBV和FBV 给视图加装饰器 Request对象 Response对象 JsonResponse对象 Dj ...

  7. Django View(视图系统)

    Django View 官方文档 一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...

  8. 【Django】 视图层说明

    [Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...

  9. Django基本视图

    Django基本视图 下面这三个类也许不能提供项目所需的所有的功能,这些应用于基于类的视图或Mixins情形下. 大多数Django的内建视图继承于其他基于类的视图或者各种mixins中,因为继承链是 ...

随机推荐

  1. 补习系列(6)- springboot 整合 shiro 一指禅

    目标 了解ApacheShiro是什么,能做什么: 通过QuickStart 代码领会 Shiro的关键概念: 能基于SpringBoot 整合Shiro 实现URL安全访问: 掌握基于注解的方法,以 ...

  2. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  3. 【Node.js】通过mongoose得到模型,不能新添字段的问题

    问题描述 通过node.js为查询到的json对象添加新的字段,对象成功保存到数据库中,但新增字段却没保存. 前几天用vue+node.js+mongodb技术做一个购物车功能的网页,发现node.j ...

  4. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  5. C#组件系列——又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  6. 使用微软PinYinConverter查询汉字拼音

    通过汉字,如何查询拼音? 微软有相应的DLL可直接使用 引用方式 Nuget包管理安装 DLL下载后,引用 可以从微软的网站上下载相关文字处理的类库,下载地址如下: http://download.m ...

  7. win10下rdlc报表在vs(visual studio)中中文显示小方块的批量处理解决方法

    在网上找vs中rdlc报表显示中文时显示小方块的解决方案,无外就是修改文本框的字体属性.但是对于维护已有的rdlc报表时,有中文的地方(此时都显示了小方块)会很多,再一个一个设置实在太麻烦.所以自己花 ...

  8. Uncaught SyntaxError: Invalid shorthand property initializer报错

    出现这个错误一定是:把":"写成了"="号

  9. PHP中的Traits用法详解

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法.php的Traits和Go语言的组合功能有点类似, 通过在类中使用use关键字声明要组合的Tr ...

  10. Java集合类源码解析:AbstractList

    今天学习Java集合类中的一个抽象类,AbstractList. 初识AbstractList AbstractList 是一个抽象类,实现了List<E>接口,是隶属于Java集合框架中 ...