Django1.11.4之视图(三)

Django1.11.4之视图

导图大纲
在这里插入图片描述

文章目录

概述

作用

视图接收web请求,并响应web请求

本质

视图就是一个Python函数

响应

网页
重定向
错误视图
404
500
JSON数据

过程

用户在浏览器输入网址
Django获取网址信息
去除ip与端口
交给url管理器逐个匹配urlconf,匹配成功进入对应的视图函数
视图管理器找到对应的视图函数去执行,返回结果给浏览器
双击放大

url配置

配置流程

制定根级url配置文件
settings.py文件
ROOT_URLCONF = ‘demo.urls’
默认已实现
urlpatterns
一个url实例的列表
里面存的是url对象
三个参数

####### 正则表达式

####### 视图名称

####### 名称

url匹配正则的注意事项
如果想要从url中获取一个值,需要对正则加小括号
r’^(\d+)/$’
匹配数字
匹配正则前方不需要加反斜杠/
正则前需要加r表示字符串不转义

引入其他url配置

在应用中创建urls.py文件,定义本应用的url配置,方便不同项目的url管理,在工程urls文件中使用include()方法
include(‘myApp.urls’)
匹配过程
project中的urls.py中匹配到某个项目
进入匹配的项目再去匹配某个view

url的反向解析

概述
如果在视图、模板中使用了硬编码(即路径是写死的),在url配置发生改变时,动态生成链接的地址
解决
在使用连接时,通过url配置的名称,动态生成url地址
作用
使用url模板

视图函数

定义视图

本质:一个函数
视图参数
一个HTTPrequest的实例,是浏览器发过来的
通过正则表达式获取的参数
位置
一般在views.py文件下

错误视图

404
找不到网页时(url匹配不成功)返回
在templates目录下定义404.html
request_path

####### 导致错误的网址

配置settings.py
DEBUG = True

####### 如果为True则永远不调用404.HTML

ALLOWED_HOSTS = [’*’]
500
在视图代码中出现错误(服务器代码)
400
错误出现在客户的操作

HttpRequest对象

概述

服务器接收http请求后,会根据报文创建一个HttpRequest对象
视图的第一个参数就是HttpRequest对象
HttpRequest对象是Django创建的,之后调用视图时传递给视图

属性

path
请求的完整路径(不包括域名和端口)
method
表示请求的方式
GET
POST
encoding
表示浏览器提交的数据的编码方式
一般为utf-8
GET
类似字典的对象,包含了get请求的所有参数
POST
类似字典的对象,包含了post请求的所有参数
FILES
类似字典的对象,包含了所有上传的文件
COOKIES
字典,包含所有的cookie
session
类似字典的对象,表示当前的会话

方法

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

Quertict对象

request对象中的GET,POST都属于QueryDict对象
方法
get()
作用:根据键获取值
只能获取一个值
www.zcz.com/abc?a=1&b=2&c=3
getlist()
作用:将键的值以列表的形式返回
可以获取多个值
www.zcz.com/abc?a=1&a=2…

####### 两个a都可以取到,但get()做不到

GET属性

http://127.0.0.1:8000/get1?a=1&b=2&c=3
# TODO 获取get传递的数据

def get1(request):
a = request.GET.get(‘a’)
b = request.GET.get(‘b’)
c = request.GET.get(‘c’)
return HttpResponse(a + ’ ’ + b + ’ ’ + c)

http://127.0.0.1:8000/get2?a=1&a=2&b=3&c=3
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('b')
c = request.GET.get('c')

return HttpResponse(a1 + ’ ’ + a2 + ’ ’ + b + ’ ’ + c)

POST属性

使用表单提交实现post请求
关闭csrf
注释掉sdttings.py的MIDDLEWARE中的某行
#‘django.middleware.csrf.CsrfViewMiddleware’,
def showregister(request):
return render(request, 'myApp/register.html')

def register(request):
name = request.POST.get(‘name’)
return HttpResponse(name)

HttpResponse对象

概述

作用:给浏览器返回数据
HttpRequest对象是由Django创建的,HttpResponse对象是程序员创建

返回的用法

不调用模板,直接返回数据
def index(request):

return HttpResponse('zcz is a goood boy. ')

调用模板
使用render方法
原型

####### render(request, templateName, [content])

作用

####### 结合数据和模板,返回完成的HTML

参数

####### request

######## 请求体对象

####### templateName

######## 模板路径

####### content

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

示例

####### def showregister(request):
return render(request, ‘myApp/register.html’)

属性

content
表示返回的内容的类型
charset
编码格式
status_code
响应状态码
200
304
404
content-type
指定输出的MIME类型

方法

init
使用页面的内容实例化HttpResponse对象
write(content)
以文件的形式写入
flush()
以文件的形式输出缓冲区
set_cookie(key, value, max_age=None, expires = None)
delete_cookie(key)
删除cookie
注意
如果cookie不存在,则当什么都没发生

子类HttpResponseRedirect

功能
重定向,服务器端跳转
# 重定向

def redirect1(request):
return HttpResponseRedirect("/redirect2/")

def redirect2(request):
return HttpResponse(‘我是重定向后的视图’)

注意,/redirect2/是绝对路径, 不加第一个单斜杠是相对路径
简写
redirect(to,)
# 重定向

def redirect1(request):
# return HttpResponseRedirect("/redirect2/")
return redirect(’/redirect2’)

to推荐使用反向解析

子类JsonResponse

返回json数据,一般用于异步请求(ajax)
init(self, data)
data
字典的对象
注意
Content-type类型为application/json

状态保持

http协议是无状态的,每次请求都是一次新的请求,不记得以前的请求

客户端与服务器端的一次通信就是一次会话

实现状态的保持,就在客户端或服务端存储有关会话的数据

存储方式

cookie
所有数据都存储在客户端,但不要存储敏感数据
session
所有数据存储在服务端,在客户端用cookie存储session_id

状态保持的目的

在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据
注意
不同的请求者之间不会共享数据

启用session

settings.py文件中
INSTALLED_APPS
‘django.contrib.sessions’,
MIDDLEWARE
‘django.contrib.sessions.middleware.SessionMiddleware’,
默认启用

使用session

启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
get(key, default=None)
根据键获取session值
clear()
清空所有的会话
flush()
删除当前会话并删除cookie中对应的session_id
实例
def main(request):
username = request.session.get('uname', '游客')
return render(request, 'myApp/main.html', {'username': username})

def login(request):
return render(request, ‘myApp/login.html’)

def showmain(request):
uname = request.POST.get(‘username’)
print(’---------’)
request.session[‘uname’] = uname
return redirect(’/main/’)

清除 session

def clear(request):
#1 logout(request)
#2 request.session.clear()
#3 request.session.flush()
return redirect(’/main/’)

设置过期时间

set_expiry(value)
如果不设置,两个星期后过期
整数
时间对象
0
关闭浏览器时失效
None
永不过期

存储session的位置

数据库
默认在数据库
SESSION_ENGINE
缓存
只存储在本地内存中,如果丢失不能找回,比数据库块
数据库+缓存
优先从本地缓存中读取,读取不到再去数据库中读取

使用redis缓存session

pip install django-redis-sessions
settings.py文件添加
SESSION_ENGINE = ‘redis_sessions.session’

SESSION_REDIS_HOST = ‘localhost’
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0
SESSION_REDIS_PASSWORD = ‘123456’
SESSION_REDIS_PREFIX = ‘session’

Django1.11.4之视图
	概述
		作用
			视图接收web请求,并响应web请求
		本质
			视图就是一个Python函数
		响应
			网页
				重定向
				错误视图
					404
					500
			JSON数据
		过程
			用户在浏览器输入网址
			Django获取网址信息
				去除ip与端口
			交给url管理器逐个匹配urlconf,匹配成功进入对应的视图函数
			视图管理器找到对应的视图函数去执行,返回结果给浏览器
			双击放大 
	url配置
		配置流程
			制定根级url配置文件
				settings.py文件
				ROOT_URLCONF = 'demo.urls'
				默认已实现
			urlpatterns
				一个url实例的列表
				里面存的是url对象
					三个参数
						正则表达式
						视图名称
						名称
			url匹配正则的注意事项
				如果想要从url中获取一个值,需要对正则加小括号
					r'^(\d+)/$'
					匹配数字
				匹配正则前方不需要加反斜杠/
				正则前需要加r表示字符串不转义
		引入其他url配置
			在应用中创建urls.py文件,定义本应用的url配置,方便不同项目的url管理,在工程urls文件中使用include()方法
				include('myApp.urls')
			匹配过程
				project中的urls.py中匹配到某个项目
				进入匹配的项目再去匹配某个view
		url的反向解析
			概述
				如果在视图、模板中使用了硬编码(即路径是写死的),在url配置发生改变时,动态生成链接的地址
			解决
				在使用连接时,通过url配置的名称,动态生成url地址
			作用
				使用url模板
	视图函数
		定义视图
			本质:一个函数
			视图参数
				一个HTTPrequest的实例,是浏览器发过来的
				通过正则表达式获取的参数
			位置
				一般在views.py文件下
		错误视图
			404
				找不到网页时(url匹配不成功)返回
				在templates目录下定义404.html
					request_path
						导致错误的网址
				配置settings.py
					DEBUG = True
						如果为True则永远不调用404.HTML
					ALLOWED_HOSTS = ['*']
			500
				在视图代码中出现错误(服务器代码)
			400
				错误出现在客户的操作
	HttpRequest对象
		概述
			服务器接收http请求后,会根据报文创建一个HttpRequest对象
			视图的第一个参数就是HttpRequest对象
			HttpRequest对象是Django创建的,之后调用视图时传递给视图
		属性
			path
				请求的完整路径(不包括域名和端口)
			method
				表示请求的方式
					GET
					POST
			encoding
				表示浏览器提交的数据的编码方式
					一般为utf-8
			GET
				类似字典的对象,包含了get请求的所有参数
			POST
				类似字典的对象,包含了post请求的所有参数
			FILES
				类似字典的对象,包含了所有上传的文件
			COOKIES
				字典,包含所有的cookie
			session
				类似字典的对象,表示当前的会话
		方法
			is_ajax()
				如果是通过XMLHttpRequest发起的,返回True
		Quertict对象
			request对象中的GET,POST都属于QueryDict对象
			方法
				get()
					作用:根据键获取值
					只能获取一个值
					www.zcz.com/abc?a=1&b=2&c=3
				getlist()
					作用:将键的值以列表的形式返回
					可以获取多个值
					www.zcz.com/abc?a=1&a=2........
						两个a都可以取到,但get()做不到
		GET属性
			http://127.0.0.1:8000/get1?a=1&b=2&c=3
				# TODO 获取get传递的数据\ndef get1(request):\n	a = request.GET.get('a')\n	b = request.GET.get('b')\n	c = request.GET.get('c')\n	return HttpResponse(a + '  ' + b + '  ' + c)
			http://127.0.0.1:8000/get2?a=1&a=2&b=3&c=3
				def get2(request):\n	a = request.GET.getlist('a')\n	a1 = a[0]\n	a2 = a[1]\n	b = request.GET.get('b')\n	c = request.GET.get('c')\n   return HttpResponse(a1 + '  ' + a2 + '  ' + b + '  ' + c)
		POST属性
			使用表单提交实现post请求
			关闭csrf
				注释掉sdttings.py的MIDDLEWARE中的某行
					#'django.middleware.csrf.CsrfViewMiddleware',
			def showregister(request):\n	return render(request, 'myApp/register.html')\n\n\ndef register(request):\n	name = request.POST.get('name')\n	return HttpResponse(name)
	HttpResponse对象
		概述
			作用:给浏览器返回数据
			HttpRequest对象是由Django创建的,HttpResponse对象是程序员创建
		返回的用法
			不调用模板,直接返回数据
				def index(request):\n   return HttpResponse('zcz is a goood boy. ')
			调用模板
				使用render方法
					原型
						render(request, templateName, [content])
					作用
						结合数据和模板,返回完成的HTML
					参数
						request
							请求体对象
						templateName
							模板路径
						content
							传递给需要渲染在模板上的数据
					示例
						def showregister(request):\n   return render(request, 'myApp/register.html')
		属性
			content
				表示返回的内容的类型
			charset
				编码格式
			status_code
				响应状态码
					200
					304
					404
			content-type
				指定输出的MIME类型
		方法
			init
				使用页面的内容实例化HttpResponse对象
			write(content)
				以文件的形式写入
			flush()
				以文件的形式输出缓冲区
			set_cookie(key, value, max_age=None, expires = None)
			delete_cookie(key)
				删除cookie
				注意
					如果cookie不存在,则当什么都没发生
		子类HttpResponseRedirect
			功能
				重定向,服务器端跳转
					# 重定向\ndef redirect1(request):\n	return HttpResponseRedirect("/redirect2/")\n\ndef redirect2(request):\n	return HttpResponse('我是重定向后的视图')
					注意,/redirect2/是绝对路径, 不加第一个单斜杠是相对路径
			简写
				redirect(to,)
					# 重定向\ndef redirect1(request):\n	# return HttpResponseRedirect("/redirect2/")\n	return redirect('/redirect2')
			to推荐使用反向解析
		子类JsonResponse
			返回json数据,一般用于异步请求(ajax)
			__init__(self, data)
			data
				字典的对象
			注意
				Content-type类型为application/json
	状态保持
		http协议是无状态的,每次请求都是一次新的请求,不记得以前的请求
		客户端与服务器端的一次通信就是一次会话
		实现状态的保持,就在客户端或服务端存储有关会话的数据
		存储方式
			cookie
				所有数据都存储在客户端,但不要存储敏感数据
			session
				所有数据存储在服务端,在客户端用cookie存储session_id
		状态保持的目的
			在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据
			注意
				不同的请求者之间不会共享数据
		启用session
			settings.py文件中
				INSTALLED_APPS
					'django.contrib.sessions',
				MIDDLEWARE
					'django.contrib.sessions.middleware.SessionMiddleware',
			默认启用
		使用session
			启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
			get(key, default=None)
				根据键获取session值
			clear()
				清空所有的会话
			flush()
				删除当前会话并删除cookie中对应的session_id
			实例
				def main(request):\n	username = request.session.get('uname', '游客')\n	return render(request, 'myApp/main.html', {'username': username})\n\n\ndef login(request):\n	return render(request, 'myApp/login.html')\n\n\ndef showmain(request):\n	uname = request.POST.get('username')\n	print('---------')\n	request.session['uname'] = uname\n	return redirect('/main/')\n\n\n# 清除 session\ndef clear(request):\n	#1 logout(request)\n	#2 request.session.clear()\n	#3 request.session.flush()\n	return redirect('/main/')
		设置过期时间
			set_expiry(value)
			如果不设置,两个星期后过期
			整数
			时间对象
			0
				关闭浏览器时失效
			None
				永不过期
		存储session的位置
			数据库
				默认在数据库
					SESSION_ENGINE
			缓存
				只存储在本地内存中,如果丢失不能找回,比数据库块
			数据库+缓存
				优先从本地缓存中读取,读取不到再去数据库中读取
		使用redis缓存session
			pip install django-redis-sessions
			settings.py文件添加
				SESSION_ENGINE = 'redis_sessions.session'\nSESSION_REDIS_HOST = 'localhost'\nSESSION_REDIS_PORT = 6379\nSESSION_REDIS_DB = 0\nSESSION_REDIS_PASSWORD = '123456'\nSESSION_REDIS_PREFIX = 'session'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young_svg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值