Django视图V
视图
一.视图的功能
请求接受,进行处理,与M和T进行交互,返回应答。
返回 html 内容 HttpResponse 也可以重定向 redirect
二.视图函数使用
1.使用
- 定义视图函数 request 参数必须有。是一个 HttpRequest类型对象。参数名可以变换,但不要更改。
- 配置url建立url 和视图函数之间的对应关系。
2.url配置过程
- 在项目的urls 文件中包含具体应用的urls 文件,在具体应用的urls文件中包含具体url和视图的对应关系。
- url配置项是定义在一个叫 urlpatterns 的列表中,其中每一个元素就是一个配置项,每一个配置项都调用urlh函数。
3.url匹配的过程
url:http://127.0.0.1:8000/aindex?a=1
- 去除域名和后面的参数,剩下/aindex,再把前面的/去掉,剩下aindex
- 拿aindex先到项目的url.py 文件中进行从上到下的匹配,匹配成功后执行后面对应的处理动作,就是把匹配成功的部分a字符去掉,然后拿剩下的部分index到应用的urls.py 文件中在进行从上到下的匹配。
- 如果匹配成功则调用相应的视图产生内容返回给客户端。如果匹配失败则产生404错误。
4.错误视图
404:找不到页面,关闭浏览器调试模式之后,默认会显示一个标准的错误页面,如果要显示自定义的页面,则需要的templates目录下面自定义一个404.html文件。
- url没有配置
- url配置错误
500:服务器端的错误。
- 视图错误
网站开发完成需要关闭调试模式,在settings.py 文件中:
1 | DEBUG = False |
5.捕获url参数
进行url匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样Django框架就会自动把匹配成功后相应组的内容作为参数传递给视图函数。
位置参数
位置参数,参数名可以随意指定
1
2
3urlpatterns = [
path('index(\d+)',views.index), //捕获url参数:位置参数
]
关键字参数:在位置参数的基础伤给正则表达式组命名即可。
?P<组名>
关键字参数,视图中参数名必须和正则表达式组名一致。
1
2
3urlpatterns = [
path('index(?p<num>\d+)',views.index), //捕获url参数:关键字参数
]
- request就是HttpRequest类型的对象
- request包含浏览器请求的信息
6.普通登陆案例
显示出登陆页面
设计url,通过浏览器访问 http://127.0.0.1:8000/login 的时候显示登陆页面
设计url对应的视图函数logjn
编写模板文件 login.html
1
2
3
4
5<form method = 'POST' action = '/login_check'> //提交方式,提交到那个页面
用户名:<input type='text' name='username'><br>
密码:<input type='password' name='password'><br>
<input type='submit' value='登陆'>
</form>
- POST:提交的参数请求头。
- GET:提交的参数在url中。
属性:
- path :一个字符串,表示请求的页面的完整路径,不包含域名和部分参数。
- method : 一个字符串,表示请求使用的HTTP方法,常用值包括 GET 、POST 。
- 在浏览器中给出地址发请求采用get方式,如超链接。
- 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
- encoding : 一个字符串,表示提交的数据编码方式。
- 如果为None则表示使用浏览器的默认设置,一般为utf-8.
- 这个属性是可写的,可以通过修改它来访问表单数据使用的编码,接下来对属性的任何访问将使用鑫的encoding值。
- GET :QueryDict类型对象,类似与字典,包含get请求方式所有参数。
- POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数。
- FILES : 一个类似于字典的对象,包含所有上传文件。
- COOKIES : 一个标准的Python字典,包含所有cookie,键和值都为字符串。
- session : 一个既可以读 又可以写的类似于字典的对象,表示当前的话,只当有Django 启用绘画的支持时才可使用,详情内容见 “状态保持”。
- 运行服务器,在浏览器中浏览首页,可以在浏览器“开发者工具”中看到下图:
7.Ajax
(1).基本概念
点击普通的超链接和手动输入地址。
表单提交。
通过ajax请求。
请求 –> 响应
处理函数
- 返回页面 HttpResponse
- 重定向 HttpResoonseRedirect
- 返回Json数据 JsonResponse
发起请求后不等结束,程序直接进行的被成为异步
异步就是发起请求后,代码继续执行不会等回调函数执行,等到服务器返回j’son之后,这个回调函数才会被执行。
同步ajax请求是按照代码的顺序依次执行。
1 | $(function(){ |
(2).Ajax登陆案例
首先分析出访问地址时候需要携带的参数。
视图函数处理完成之后,所返回的json的格式。
显示出登陆页面
设计url,通过浏览器访问 http://127.0.0.1:8000/login_ajax 时候显示登陆页面。
设计url对应的视图函数 login_ajax
编写模板文件 login_ajax.html
在里面写jquery代码发起ajax请求。
登陆校验功能
设计url,点击登陆页的登陆按钮发起请求http://127.0.0.1:8000/login_ajax_check时进行校验。
设计url对应的视图函数 login_ajax_check
接受post提交过来的数据。
进行登陆校验,并返回json内容。JsonResonse
1
2{'res':'1'} //表示登陆成功
{'res':'0'} //表示登陆失败
8.状态保持
Http协议是无访问状态的。下一次去访问同一个页面并不知道上一次对这个页面做了什么。
(1).Cookie
比如你去卖豆浆,你是浏览器,老板是服务器,你去买豆浆就是一个请求,你请求网站的时候他记不住信息 他记不住你买过豆浆他就给了你一个单子 就是cookie,这个单子交给浏览器 由你来保管下次你再来访问 服务器的时候 你就会把单子给服务器,老板就知道你买过豆浆。
cookie:是有服务器生成,存储在浏览器的一小段文本信息。
#####cooie的特点:
以键值对方式进行存储。
通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给网站的服务器。request.COOKIES
(你去买烧饼,你去买烧饼,你只会把买少烧饼的单子给他 你肯定不会把卖豆浆的单子也起给他)
cookie 是基于域名安全的。
cookie是有过期时间的,如果不指定,默认关闭浏览器之后 cookie就会过期。
#####注册Cookie
1 | def set_cookie(request): |
#####获取Cookie
1 | def get_cookie(request): |
设置过期时间
格式 | 描述 |
---|---|
max_age= | 设置秒,保存cookie的时候是多少秒过期 |
expires= | 设置时间,到达一定时间后过期 |
max_age设置cookie两周过期:
1 | response.set_cookie('num':1,max_age = 14*24*3600) |
expires 设置cookie两周过期
1 | from datetime import datetime,timedelta |
HttpResponse子类对象:
- HttpResponseRedirect
- JsonResponse
记住用户案例
view代码:
1 | def login(request): |
template/login.html
1 | <body> |
####(2).Session
session 存储在服务器端。
session的特点:
session是以键值对进行存储的。
session依赖于cookie。唯一的标识码保存在sessionid cookie 中。
问:所有请求者的session 都会存储在服务器中,服务器如何区分请求者和session的数据对应关系呢?
答:在使用session后,会在Cookie中存储一条sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器接收sessionid后,会根据这个值找到这个请求者的session.
结果如果想使用session,浏览器必须支持cookie,否则就无法使用session了。
存储session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息进行了base64编码,过期时间有开发人员设置。
session 也是有过期时间的,如果不指定,默认就会两周过期。
对象及方法
通过HttpRequest对象的session属性进行会话的读写操作。
以键值对的格式写session.
1
request.session['键'] = 值
根据键获取值。
1
request.session.get['键',默认值]
清除所有session,在存储中删除部分值
1
request.session.clear()
清除session数据,在存储中删除session的整条数据
1
request.session.flush()
删除session中指定键及值,在存储中只删除某个键及对应的值。
1
del request.session['键']
设置会话超时时间,如果没有指定过期时间则两星期后过期。
1
request.session.set_expiry(value)
- 如果value是一个整数,会话的session_id cookie 将在value秒没有活动后过期。
- 如果value为0,那么用户的session_id cookie 将在用户的浏览器关闭时过期。
- 如果value为None,那么会话的session_id cookie 两周之后过期。
设置session
设置session : request.session[‘username’]=’root’
1 | def set_session(request): |
获取session
获取session:request.session[‘username’]
1 | def get_session(request): |
清除session
1 | def clear_session(request): |
#####session过期时间
1 | def set_session(request): |
(3).cookie和session的应用场景
Cookie:
记住用户名。
保存在浏览器端。
对于安全性要求不高的数据可以使用cookie进行保存。
session:
记住用户的登录状态
保存在服务器端
对于安全性要求比较高的,比如用户银行卡等信息使用session进行保存。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com