概述

视图:视图的本质就是一个python中的函数,作用是接收web请求,并响应web请求。

过程:django获取浏览器输入的url,经过django中的url管理器匹配到对应的视图函数,视图管理器执行视图函数,并将结果返回给浏览器。


url的配置

  • 工程下url配置

1.制定根级url配置文件,在seetings.py文件中配置ROOT_URLCONF = 'project.urls',django默认已配置。

2.在urls.py配置urlpatterns

  • 应用url配置

1.创建应用,python manage.py startapp app

2.在工程目录下的urls.py中导入模块from django.conf.urls import url, include,在urlpatterns中添加url(r'^app/', include('app.urls', namespace="myApp")

3.在应用中创建urls.py文件,导入模块from django.conf.urls import url,添加urlpatterns列表,在列表中配置自定义url。


url的配置注意事项

1.如果想要从url中获取一个值,需要对正则加小括号,如url(r'^test/(\d+)/',views.test,name='test')

2.匹配正则前方不需要加反斜杠,因为在工程目录下urls.py文件中进行如下配置url(r'^app/', include('app.urls', namespace="myApp")

3.正则前需要加r表示字符串不转义。


url的反向解析

在定义url的时候使用namespace与name对url进行命名。

urls.py中:

urlpatterns = [
url(r'^app/',include('app.urls',namespace='app'))
]

app中urls.py中:

urlpatterns = [
url(r'^index/',views.index,name='index')
]

在视图中反向解析:

from django.http import HttpResponseRedirect
from django.urls import reverse def index(request):
return HttpResponseRedirect(reverse('app:index'))

视图函数

视图本质是一个函数,函数的参数是一个HttpRequest实例。

错误视图的定义:

404视图:找不到网页时返回,500视图:视图代码出现错误(服务器错误),400视图:错误出现在客户的操作

配置:在settings.py文件中设置DEBUG的值为

True

,为Fasle永远不会调用错误视图,ALLOWED_HOSTS = ['*']。然后再定义相对应的网页,404.html等。


HttpRequest对象

概述

服务器接收http请求后,会根据报文创建HttpRequest对象,视图函数的第一个参数就是HttpRequest对象。

属性

request.path:请求的完整路径(不包括域名和端口)

request.method:表示请求的方式,常用的有GET、POST

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

request.GET:类似字典的对象,包含了get请求的所有参数

request.POST:类似字典的对象,包含了post请求的所有参数

request.FILES:类似字典的对象,包含了所有上传的文件

request.COOKIES字典,包含所有的cookie

request.session:类似字典的对象,表示当前会话

方法

is_ajax():如果是通过XMLHttpRequest发起的,返回True

QueryDict对象

request对象中的GET、POST都属于QueryDict对象,GET对象用来获取浏览器传递过来给服务器的数据,POST用来使用表单提交实现post请求。

request.GET.get(key):作用:根据键获取值,只能获取一个值

request.POST.get(key):作用:根据键获取值,只能获取一个值

request.GET.getlist(key):将键的值以列表的形式返回,可以获取多个值

request.POST.getlist(key):将键的值以列表的形式返回,可以获取多个值


HttpResponse对象

概述

作用:给浏览器返回数据,HttpRequest对象是由django创建的,HttpResponse对象由用户创建。

from django.http import HttpResponse

# 不调用模板,直接返回数据
def index(request):
if request.method == 'GET':
return HttpResponse('欢迎访问') # 调用模板,render方法
def index(request):
if request.method == 'GET':
data = '欢迎访问'
return render(request,'index.html',{'data':data})

属性

response.content:表示返回的内容

response.charset:编码格式

response.status_code:响应状态码

response.content-type:指定输出的MIME类型

方法

response.init():使用页面内容实例化HttpResponse对象

response.write(content):以文件的形式写入

response.flush():以文件的形式输出缓冲区

response.set_cookie(key, value='', max_age=None,exprise=None):设置cookie

response.delete_cookie(key):删除cookie,如果删除一个不存在的key,就当什么都没发生

子类HttpResponseRedirect

功能:重定向,服务器端跳转,简写:redirect(to)

from django.http import HttpResponseRedirect
from django.shortcuts import redirect def redirects(request):
return redirect('/app/index')

状态保持

概述

http协议时无状态的,每次请求都是一次新的请求,不记得以前的请求,客户端与服务器端的一次通信就是一次会话,实现状态保持,在客户端或者服务端存储有关会话的数据。

存储方式:cookie,所有的数据存储在客户端,不要存敏感的数据,session,所有的数存储在服务端,在客户端用cookie存储session_id。

状态保持的目的:在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据。

不同的请求者之间不会共享这个数据,与请求者一一对应的

启用session

seetings.py文件django已默认启用。

INSTALLED_APPS = [
'django.contrib.sessions',
] MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]

使用session

启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象

取session值

	session = request.session.get(key) # 根据键获取session值

设置session值

	request.session[key] = value # 设置session值

清除session值

from django.contrib.auth import logout

request.session.clear() # 清空所有的会话
request.session.flush() # 删除当前的会话并删除会话的cookie
logout(request) # django自带的清除cookie的方法

设置过期时间

如果不设置,两个星期后过期

request.session.set_expiry(10) # 10秒后过期
request.session.set_expiry(0) # 关闭浏览器失效
request.session.set_expiry(None) # 永不过期

django视图的定义的更多相关文章

  1. Django 2.0 学习(03):Django视图和URL(下)

    接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...

  2. Django 视图系统

    Django 视图系统 概念 一个视图函数,简称视图,是一个简单的Python函数,用于接受Web请求并返回Web响应. 通常将视图函数写在project或app目录中的名为views.py文件中 简 ...

  3. Django视图层之路由配置系统(urls)

    视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...

  4. 1.2、Django 视图与网址__进阶

    Django 视图与网址进阶 1.1.简单使用: 把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 HelloDjango/HelloDjango/settings. ...

  5. Django视图(一)

    Django视图(一) 一. 概述 作用:视图接受web请求,并相应请求 本质:视图是自定义的一个python中的函数 响应内容:正常视图,重定向视图,错误视图(404,500,400) 响应过程: ...

  6. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  7. 如何在django视图中使用asyncio(协程)和ThreadPoolExecutor(多线程)

    Django视图函数执行,不在主线程中,直接 loop = asyncio.new_event_loop() # 更不能loop = asyncio.get_event_loop() 会触发 Runt ...

  8. Oracle查看表或者视图的定义语句

    查看表的定义 SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_NAME') FROM DUAL; 查看视图的定义语句 SELECT DBMS_METADATA. ...

  9. 令Django 视图有默认 login_required

    方法一 from django.template import RequestContext from django.shortcuts import render_to_response from ...

随机推荐

  1. HDU 5176

    这道题以前好像在哪遇到过. 注意树的每一条边都是桥,所以,桥两端的点要到达对方是必须通过这条边的.于是,可以把边由小到大排序,利用并查集,这样,每加一条边就连通了一部分,而随着权值的增大,必定是桥两端 ...

  2. # 从零開始搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...

  3. 18124 N皇后问题

    18124 N皇后问题 时间限制:2000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC;VC Description 有N*N的国际象棋棋盘,要 ...

  4. OLR文件丢失的恢复

    11.2.0.1的RAC中,rac1和rac2 一.OLR有备份的情况 1.手动将rac1中的olr重命名,模拟丢失 mv rac1.olr rac1.olr.test 2.重新启动crs ./crs ...

  5. 10.2 Hibernate持久层

    点击项目右键->MyEclipse->Add Hibernate Capabilities 打开MyEclipse Hibernate Perspective(MyEclipse Hibe ...

  6. 两道人数多,课程少,query多的题

    #每天进步一点点# 来两道很相似的题目~ (智商啊智商.....) hihoCoder #1236:Scores (简单的分桶法+bitset) 2015 Beijing Online的最后一题.题目 ...

  7. codeforces 712 Memory and De-Evolution

    2019-05-19 13:25:37 加油,加油,坚持,坚持!!! 一定要逆推,才可以是最少的次数 更好的方法: https://www.cnblogs.com/ECJTUACM-873284962 ...

  8. Super超级ERP系统---(8)订单管理--订单创建

    订单管理是ERP系统中一个重要模块,客户下订单,ERP通过订单来为客户进行配送.订单模块主要包括订单创建,订单修改,订单审核,订单取消,订单分配,订单打印,订单拣货,订单出库.在随后的几节里我们看看这 ...

  9. 10.2&10.3 Xcode开发包

    10.2开发包下载链接 10.3开发包下载链接 Finder打开后,按command+shift+G前往这个地址: /Applications/Xcode.app/Contents/Developer ...

  10. 【转载】Java实现word转pdf

    最近遇到一个项目需要把word转成pdf,GOOGLE了一下网上的方案有很多,比如虚拟打印.给word装扩展插件等,这些方案都依赖于ms word程序,在java代码中也得使用诸如jacob或jcom ...