python进阶——django学习之View
概述
- 作用:视图接收web请求,并响应web请求
- 本质:视图就是一个python中的函数
- 响应
- 网页
重定向
错误视图:404、500等- JSON数据
- 过程
URL配置
配置流程
- 指定跟级url配置文件
- settings.py文件中的ROOT_URLCONF
- ROOT_URLCONF='项目名称.urls'——默认
urlpatterns
- 一个url实例的列表
- url对象
- 正则表达式
- 视图名称
- 名称——用于反向解析
- url匹配正则的注意事项
(1)如果想要从url中获取一个值,需要对正则加小括号
(2)匹配正则前方不需要加反斜杠
(3)正则前需要加 'r' 表示不转义引入其他url配置
- 在应用中创建url.py文件,定义本应用的url配置,在项目url.py文件中使用include()方法
- 匹配过程
- 用户在发送url请求
- 项目urls.py文件将url传递给应用urls.py文件
- 应用urls.py文件处理url请求,并返回给用户相应的数据
URL的反向解析(什么是反向解析?)
- 概述:如果在视图、模板中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址
- 解决:在使用链接时,通过url配置的名称name,动态生成url地址
- 作用:在使用模板时使用
视图函数
定义视图
- 本质:一个函数
- 视图参数
- 一个HttpRequest的实例
- 通过正则表达式获取的参数
- 位置:一般在views.py文件下定义
错误视图
- 400视图:错误出现在客户端的操作,在templates目录下定义404.html
- 404视图
- 找不到网页,即url匹配不成功
- 在templates目录下定义404.html
request_path——导致错误的网址<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>404页面</title> </head> <body> <h1>页面丢失</h1> <h2>{{request_path}}</h2> </body> </html>- 配置settings.py文件
DEBUG = True
ALLOWED_HOSTS = ['*']
- 500视图:在视图代码中出现错误(服务器代码)
HttpRequest对象
概述
- 服务器接收http请求后,会根据报文创建HttpRequest对象
- 视图的第一个参数就是HttpRequest对象
- django创建的HttpRequest对象,之后调用视图时传递给视图
属性
属性 概述 path 请求的完整路径(不包括域名和端口) method 表示请求的方式,常用的有GET、POST encoding 表示浏览器提交的数据的编码方式,一般为UTF-8 GET 类似字典的对象,包含了get请求的所有参数 POST 类似字典的对象,包含了POST请求的所有参数 FILES 类似字典的对象,包含了所有上传的文件 COOKIES 类似字典的对象,包含了所有的COOKIES session 类似字典的对象,表示当前会话 方法
- is_ajax()——如果是通过XMLHttpRequest发起的,返回True
QueryDict对象
- request对象中的GET、POST都属于QueryDict对象
- 方法
- get()
(1)作用:根据键获取值
(2)只能获取一个值- getlist()
(1)作用:将键的值以列表的形式返回
(2)可以获取多个值GET属性
- 获取浏览器传递给服务器的数据
# get()示例,http://127.0.0.1:8000/index/get?a=1&b=2&c=3 def get1(request): a = request.GET.get('a') b = request.GET.get('b') c = request.GET.get('c') return HttpResponse(a+"-"+b+"-"+c) # getlist()示例,http://127.0.0.1:8000/index/get?a=1&a=2&c=3 def get2(request): a = request.GET.get('a') a1 = a[0] a2 = a[1] c = request.GET.get('c') return HttpResponse(a1+"-"+a2+"-"+c)POST属性
- 使用表单提交实现post请求
- 关闭CSRF(什么是CSRF?)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
- 代码示例——实现注册
def regist(request): name = request.POST.get("name") gender = request.POST.get("gender") age = request.POST.get("age") hobby = request.POST.getlist("hobby") return HttpResponse(name+"-"+gender+"-"+age+"\n"+hobby)
HttpResponse对象
概述
- 作用:给浏览器返回数据
- HttpRequest对象由django创建,HttpResponse对象由程序员创建
返回数据用法
- 不调用模板,直接返回数据
# 示例 from django.http import HttpResponse def index(request): return HttpResponse("Hello World!")
- 调用模板:使用render方法
- 原型:render(request, templateName, [context]),[context]可有可无
- 作用:结和数据和模板,返回完整的HTML页面
- 参数
(1)request——请求体对象
(2)templateName——模板名
(3)context——传递给需要渲染在模板上的数据- 示例
# 示例 from django.http import HttpResponse def index(request): return render(request, 'myApp/index.html')属性
属性 概述 content 表示返回的内容 charset 编码格式 status_code 响应状态码(200、304、404...) content-type 指定输出的MIME类型(什么是MIME?) 方法
方法 概述 init 使用页面内容实例化HttpResponse对象 write(content) 以文件的形式写入 flush() 以文件的形式输出缓冲区 set_cookie(key, value='', max_age=None, exprise=None) 增加cookie delete_cookie(key) 删除cookie 注意:如果删除一个不存在的key,则不发生任何情况 子类HttpResponseRedirect
- 功能:重定向,服务器端的跳转(待实践)
# 示例代码 from django.conf.urls import url urlpatterns = [ url(r'^$', views.index), url(r'^index.html', views.index1), ]# 代码示例 from django.http import HttpResponseRedirect from django.shortcuts import render def index(request): return render(request,'myApp/index.html') def index1(request): return HttpResponseRedirect('/')
- 简写:redirect(to)
# 代码示例 from django.http import HttpResponseRedirect from django.shortcuts import redirect def index(request): return render(request,'myApp/index.html') def index1(request): return redirect('/')
- to推荐使用url反向解析
子类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
- 每个HttpRequest对象都有一个session属性(启用时),就是一个类似字典对象
- get(key, default=None)——根据键获取session值
- clear()——清空所有的会话
- flush()——删除当前的会话并删除会话的cookie
使用redis缓存session
- 安装:pip install django-redis-sessions
- 在settings.py文件中添加
"""在settings.py文件中添加""" SESSION_ENGINE = 'redis_sessions.session' SESSION_REDIS_HOST = 'localhost' SESSION_REDIS_PORT = 6379 SESSION_REDIS_DB = 0 SESSION_REDIS_PASSWORD = 'password' SESSION_REDIS_PREFIX = 'session'----------------------待更新-------------------
版权声明:本文为qq_43633412原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

