AI智能
改变未来

Django学习笔记(三)——Views专题


视图(Views)

作用:接收web请求,并响应web请求。
本质:就是python中的函数。
响应内容:①网页、重定向、错误视图(404,500)②json数据

响应过程:

1、用户在浏览器输入网址
2、django获取网址信息,去除IP和端口号
3、url管理器逐个匹配url conf
4、若匹配成功,则执行对应的视图函数
5、视图管理器找到对应视图并执行,返回结果给浏览器

url配置

流程:

1、指定根级url文件(settings.py中设置。)

# Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/1.11/howto/static-files/STATIC_URL = \'/static/\'

2、project/urls.py中的urlpatterns中是一个url实例的列表。
每个对象都包括 正则表达式、视图名称和namespace。

3、引入其他url配置文件,在project/urls.py中使用include方法

from myapp import urlsurlpatterns = [url(r\'^admin/\', admin.site.urls),url(r\'^chendw/\', include(\'myapp.urls\', namespace=\"myapp\"))]

url配置正则需注意

1、若要从url中获取值,则需要对正则加小括号

url(r\'^(\\d+)/$\', views.detail),  # 正则表达式

2、匹配正则前方不需要加 ‘/’反斜杠
3、正则前需要加‘r’,表示字符串不转义

视图函数

定义试图(本质为函数)

参数:
第一个,HttpRequest的对象实例
第二个,通过正则表达式获取

def detail(request, num):return HttpResponse(\"detail -%s\" %num)

位置:
一般在views.py中定义

错误视图:
500 在视图代码中出错
400 错误出现在客户的操作
404 找不到网页(url匹配失败)
以上错误视图均可自己定义,在template目录下定义,并在settings.py中进行配置。(注释掉默认的错误视图)

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\',]

HttpRequest对象(由django创建)

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

对象属性
属性 内容
path 请求的完整路径
method 请求的方式,如GET,POST
encoding 编码方式
GET 类似字典对象,包含了get对象的各个参数
POST 类似字典对象,包含了post对象的各个参数
FILES 类似字典对象,包含上传文件参数
COOKIES 类似字典对象,包含了所有cookies
session 表示当前会话

HttpResponse对象(由程序员创建)

用于给浏览器返回数据

用法:

1、不调用模板,直接返回数据

def index(request):return HttpResponse(\"chendw is good man\")

2、调用模板,使用render()方法渲染

def grades(request):# 去模板里取数据grades_list = Grades.objects.all()# 将数据传给模板return render(request, \'myapp/grades.html\', {\"grades\": grades_list})
render()方法

原型: render(request,template,{context})
作用:结合数据和模板,返回完整html页面

对象属性
属性 内容
content 表示返回完整地内容
charset 编码格式
status-code 响应状态码
content-type 指定输出MIME类型
方法
方法 功能
init 使用页面内容实例化HttpResponse对象
write(content) 以文件形式输入
flush() 以文件形式输出缓冲区
set_cookie(key,value,max_age,expires) 设置cookie
delete_cookie(key) 删除cookie
子类

HttpResponseRedirect 重定向,服务器跳转

from django.http import  HttpResponseRedirect# redirectdef redirecttest1(request):return HttpResponseRedirect(\'/chendw/redirect2\')

Session状态保持

概述:
Http协议是无状态的,每次请求都是新的请求。
服务器与客户端的一次通信,就是一个新的会话。
实现状态保持,由客户端或服务器存储。
存储方式包括:cookie或session。

目的:
在一段时间内跟踪请求者的状态,可以实现跨页面访问请求者数据,但不同请求者直接的数据不共享。

启用

settings.py文件中的INSTALLED_APP和MIDDLEWARE字段中配置。

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

每个HttpRequest对象都有一个session属性,是一个类似字典的对象。通过调用session对象进行调用。

def main(request):username = request.session.get(\'name\', \"游客\")return render(request, \'myapp/main.html\',{\'name\': username})def login(request):return render(request,\'myapp/login.html\')def showmain(request):username = request.POST.get(\'username\')request.session[\'name\'] = usernamerequest.session.set_expiry(10)return redirect(\'/chendw/main/\')from django.contrib.auth import logoutdef quit(request):# logout(requestrequest.session.clear()return redirect(\'/chendw/main\')
设置过期时间
request.session.set_expiry(10)

若不设置,则默认两周后过期。
参数可选:

参数 效果
None 永不过期
整数
时间对象 指定日期过期
0 关闭浏览器过期
存储session的位置

1、默认为数据库存储session

# 数据库保存sessionSESSION_ENGINE = \'django.contrib.session.backends.db\'

2、使用缓存保存session,只保存在内存中,若丢失则无法恢复,但相比数据库访问速度较快。

# 缓存保存sessionSESSION_ENGINE = \'django.contrib.session.backends.cache\'

3、数据库和缓存并用保存session,优先读取缓存,若无则寻找数据库。

# 缓存和数据库保存sessionSESSION_ENGINE = \'django.contrib.session.backends.cached_db\'
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Django学习笔记(三)——Views专题