视图(views.py):接收web请求,并响应web请求

在视图响应web请求的过程中,响应文件可能是网页,也可能是json数据

若响应的是网页,我们可分为:

视图函数:在views.py下自定义的各类函数

视图参数:视图函数的形式参数,一般我们写的是request,这个参数勒一般就存的是我们浏览器发给我们的内容(一串数据流也可以称作是一个HttpRequest实例)

错误视图:

404视图:找不到网页(url匹配不成功)时返回

  我们也可以自定义404页面:

    1.在templates下定义404.html(<h2>{{request_path}}</h2>   # 导致错误的网址)

     2.配置setting.py

         a.  DEBUG=True代表永远不会调用404.html页面,所以我们这里要设置为False

       b.  ALLOWED_HOSTS=['*']   # 允许任何人访问

大概样子长这样↓↓↓:

500视图:在视图代码中出现错误(服务器代码错误)
400视图:错误出现在客户端的操作(服务器发现你是爬虫或cookie中带了错误等)

视图中可操作对象:

HttpRequest对象:浏览器发送给服务器的数据流

服务器接收http请求后,会根据报文(数据流)创建HttpRequest对象,调用视图时,创建HttpRequest对象就传入views.py中函数的request形参中。

—— HttpRequest对象的属性

          |

HttpRequest对象—   —— HttpRequest对象的方法

          |

            —— QueryDict对象

HttpRequest对象的属性:

path 请求的完整路径(不包括域名和端口)
method 表示请求的方式(get/post)

encoding

表示浏览器提交数据的编码方式,一般为utf-8
GET

类似于字典的对象,包含类get请求的所有参数(获取浏览器地址栏传递过来的数据)

POST 类似于字典的对象,包含了post请求的所有参数(例:表单提交(获取浏览器提交的数据,并在views函数中作出对应的操作))
FILES 类似于字典的对象,包含了所有上传的文件(例:word文档上传到服务器)
COOKIES 字典,包含类所有的cookie对象
session 类似于字典的对象,表示当前会话

举个栗子:

结果:

GET属性:

举个栗子:

  浏览器:

   网址:http://localhost:8000/sunck/get1?a=1&b=2&c=3   # GET获取当数值

   结果(浏览器显示):123

   网址:http://127.0.0.1:8000/sunck/get2?a=1&a=2&b=3   # GET获取多个数值a=1&a=2

   结果(浏览器显示):123

POST属性:

举个栗子:

浏览器:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="regist/" method="post">
姓名:<input type="text" name="name" value=""/>
<hr/>
性别:<input type="radio" name="gender" value="1"/>
男<input type="radio" name="gender" value="0"/>
女<hr/>
年龄:<input type="text" name="age" value=""/>
爱好:
<input type="checkbox" name="hobby" value="power"/>权利
<input type="checkbox" name="hobby" value="money"/>金钱
<hr/>
<input type="submit" value="注册"/>
</form>
</body>
</html>

浏览器html代码

服务器:

from django.shortcuts import render,redirect,HttpResponse
def showregist(request):
return render(request,'myapp/regist.html')
def regist(request):
name = request.POST.get("name")
gender = request.POST.get("gender")
age = request.POST.get("age")
# 这个网页提交过来得到的值,用模型类创建表单对象,对应的就可以存入数据表中勒
hobby = request.POST.getlist("hobby")
print(name)
print(gender)
print(age)
print(hobby)
return HttpResponse("post")

Views模块函数

对应url配置(这里可以直接用地址重定向,就不用写这么复杂勒):

HttpRequest的方法:

is_ajax():若通过XMLHttpRequest发起的,返回True(ajax请求,一般返回json数据)

QueryDict对象:request对象中的GET/POST都属于QueryDict对象

  方法:

    get():根据键获取值(且只能获取一个值)www.sunck.wang/abc?a=1&b=2&c=3
    getlist():将键的值以列表的形式返回(获取多个值)

HttpRequest对象是由django创建,HttpResponse对象是由程序员创建(因为要合成返回给浏览器的数据)

HttpRequest对象: 给浏览器返回数据

返回数据的方法:

1. 不调用模板,直接返回数据(例:return HttpResponse('dasfds'))

2.调用模板:使用render(request, templateName[,context])

  作用: 结合数据和模板,返回完整的html页面

  参数:request:请求体对象

        templateName:模板路径

      context:传递给需要渲染在模板上的数据

  举个栗子:

    return render(request,'myapp/main.html',{'username':username})

—— HttpResponse对象的属性

          |

HttpResponse对象—   —— HttpResponse对象的方法

          |    —— 子类HttpResponseRedict

          |  ——

               —— 子类JsonResponse

HttpResponse对象的属性:

HttpResponse().content

返回给浏览器内容的类型

HttpResponse().charset

编码方式

HttpResponse().status_code

响应状态码 (200/304/404)

HttpResponse().content-type

指定输出的MIME类型(例:若我是html文件,则按网页渲染,若我是json文件,则为json文件接收)

HttpResponse对象的方法:

init

使用页面内容实例化HttpResponse对象

write(content)

以文件的形式写入

flush()

以文件的形式输出缓冲区(刷新缓冲区)

set_cookie(key,value='', max_age=None,exprise=None)

 在浏览器存入cookie

delete_cookie(key)

删除cookie(若删除不存在的key,不会报错)

set_cookie方法:

# cookie
def cookietest(request):
res = HttpResponse()
# cookie1 = request.COOKIES # 存入后,取出cookie值
# res.write('<h1>' + cookie['sunck'] + '</h1>') # 在浏览器上显示取出的cookie值
cookie = res.set_cookie('sunck','good') # 存入cookie值,这里面俺们就可以存一个token
return res
# 在浏览器》检查》Network》刷新页面》选中name》Cookie》查看写的cookie值

子类HttpResponseRedirect:继承类HttpResponse类

作用:地址重定向(服务器端的跳转)

  (例:我们输入网址1,但显示的页面是网址2滴页面)

简写方法:redirect()

举个栗子:

from django.http import HttpResponseRedirect
from django.shortcuts import redirect # 重定向
def redirect1(request):
# return HttpResponseRedirect('/sunck/redirect2')
return redirect('/sunck/redirect2') # 简写方法(推荐使用) def redirect2(request):
return HttpResponse('我是重定向页面')

对应的url:

过程:

  当我们在浏览器输入:http://localhost:8000/sunck/redirect1时,浏览器显示的网址:http://localhost:8000/sunck/redirect2/,这就是重定向,虽然在浏览器没有操作,但是它是在服务器中完成了自我跳转。

子类JsonResponse:返回json数据,一般用于异步请求(ajax)

(例:若HttpRequest().is_ajax() 为true,则我们一般返回的就是json数据)

大概过程:

from django.http import JsonResponse
def js(request):
if request.is_ajax():
return JsonResponse({}) # 返回json数据,{}代表json数据

注:JsonResponse中属性Content-type的类型为application/json(默认返回为json类型)

python_django_views视图模块的更多相关文章

  1. ASP.NET MVC 视图(一)

    ASP.NET MVC 视图(一) 前言 从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲 ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(6)--视图控制器的使用

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  3. CSS3_概述、发展史、模块介绍、与浏览器之间的关系

    一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能.    目前主流浏览器chrome.safari. ...

  4. Qt入门(20)——Qt模块简介

    当你安装Qt时,这些模块会被构建到库中.在Qt企业版.Qt评估版和Qt自由版中,包含所有的模块.对于Qt专业版,提供基本的模块--工具.核心.窗口部件.对话框.图标视图和工作区模块.画布模块画布模块提 ...

  5. bug管理工具之禅道的测试模块的使用

    https://www.cnblogs.com/evablogs/p/6785017.html 角色:产品经理PO,项目经理PM,开发,测试 测试任务: bug: 1.维护bug视图模块:[测试]-[ ...

  6. Django 建立用户的视图(搜索 )

    在web应用上,有两个关于搜索获得巨大成功的故事:Google和Yahoo,通过搜索,他们建立了几十亿美元的业务.几乎每个网站都有很大的比例访问量来自这两个搜索引擎.甚至,一个网站是否成功取决于其站内 ...

  7. [转] CSSOM视图模式(CSSOM View Module)相关整理

    以下就是一些API属性的相关内容,包括兼容性,使用,测试等. 一.Window视图属性 这些属性可以hold住整个浏览器窗体大小.微软则将这些API称为“Screenview 接口”.包括:inner ...

  8. Django来敲门~第一部分【4. 创建第一个模块应用】

    成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 ——老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问配 ...

  9. 03 Django视图

    功能 接受Web请求HttpRequest,进行逻辑处理,与 M 和 T 进行交互,返回 Web 响应 HttpResponse 给请求者 示例项目的创建 创建项目 test3 django-admi ...

随机推荐

  1. CSS3 动画Animation的8大属性

    animation复合属性.检索或设置对象所应用的动画特效. 如果有多个属性值时以","隔开,适用于所有元素,包含伪对象:after和:before 1.animation-nam ...

  2. Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify proxy interfaces…..

    报错:Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify ...

  3. dns轮训python

    环境 python3 先安装dnspython模块 httpclient模块 resolver模块 pip install dnspython pip install hhtpclient pip i ...

  4. teb教程3

    配置和运行机器人导航 简介:配置teb_local_planner作为navigation中local planner的插件 参考teb安装 由于局部代价地图的大小和分辨率对优化性能影响很大,因为占据 ...

  5. Nginx基础详细讲解

    Nginx基础详细讲解 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App,操作更方便哦 1. ...

  6. java统计一个子串在指定字符串中出现的次数

    今天查着用了用String类里的几个方法,分享下代码 题目要求:统计一个子串在指定字符串中出现的次数( 提示java字串出现了6次) public class SearchSameString { p ...

  7. HIVE基本原理和基础

    读时模式:HIVE加载数据时不校验,查询数据时才校验,与数据库相反

  8. Vue学习笔记【5】——如何定义一个基本的Vue代码结构

    插值表达式{{}} 和 v-text 默认 v-text 是没有闪烁问题的: v-text会覆盖元素中原本的内容,但是 插值表达式只会替换自己的这个占位符,不会把 整个元素的内容清空 v-cloak ...

  9. Dart编程实例 - HelloWorld

    Dart编程实例 - HelloWorld void main() { print('hello world'); } 本文转自:http://codingdict.com/article/23399

  10. 深入浅出 Vue.js 第九章 解析器---学习笔记

    本文结合 Vue 源码进行学习 学习时,根据 github 上 Vue 项目的 package.json 文件,可知版本为 2.6.10 解析器 一.解析器的作用 解析器的作用就是将模版解析成 AST ...