Django视图
错误视图
1 | # 配置404页面,当用户请求的页面不存在的时候,就会直接启用该错误视图 |
1 | # 如果需要自定义404页面,则可以在模板根目录下创建一个404.html文件,django会自动调用 |
url参数传递
1 | # 修改的文件是urls.py文件 |
request对象信息
POST、GET
视图函数中传递的request参数其实是一个HttpRequest对象,里面包含着用户请求页面的信息
其中最重要的有两个方法:POST、GET,里面是用户的传递的参数,如下:
1
2
3
4
5
6
7
8# 假设用户传递用户名【username】
# 视图通过request对象获取传递的信息
def login(request):
# 通过POST方法
username = request.POST.get('username')
# 通过get方法
password = request.GET.get('username')
return HttpResponse('ok')QueryDict格式
QueryDict数据对象是django的一种特殊对象,类似于字典,但是比字典要更加的灵活,通过HttpRequest中request获得的各类参数就是QueryDict对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14from django.http.request import QueryDict
# 存入QueryDict参数
data = QueryDict('q=1&b=2&c=3')
# 直接读取存入的数据,如果该键对应的数据不存在则报错
data['a']
# 通过get方法获取该数据,如果键对应的值不存在则返回null,或者是自己设定的值
data.get('a')
data.get('a', 'default')
# 当传入多个同名的键数据时,get默认只能取最后一个键对应的值,而getlist可以返回键对应的值列表
data.getlist('a')request常用属性
属性名 含义 path 字符串,表示请求的完整路径,不包含域名和参数 method 字符串,表示请求的方式 encoding 表示提交请求数据时的编码方式 GET QueryDict对象,包含请求携带的所有get数据 POST QueryDict对象,包含请求携带的所有POST数据 FILES 类似于字典的对象,包含所有上传的文件 COOKIES 标准的python字典,包含所有的cookie数据,键值对都是字符串 session 既可读又可写的类似于字典的对象,表示当前的会话
ajax请求
django静态文件
1
2
3
4
5
6
7
8# 在根目录下新建一个【static】文件夹,内部按照不同的静态文件再单独新建文件夹
# 在项目的settings.py文件夹中配置静态文件的路径
STATIC_URL = '/static/'
STATICFILES_DIR = [os.path.join(BASE_DIR, 'static')]
# 配置完以后在模板文件中引入,则按照相对路径引入即可
<img href='/static/imgage/1.png'>配置ajax请求的页面返回数据:一般是json格式的数据
1
2
3
4
5# 页面返回json数据,则需要调用JsonResponse,它返回给前端页面的是一个json格式的数据
from django.http import JsonResponse
def login_check(request):
return JsonResponse({"name":"shuai"})ajax对应的模板参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$('#btn').click(function () {
$.ajax({
url:'/login_check',
datatype: 'json',
}
).success(function (data) {
alert(data['name'])
}).fail(function () {
alert('失败了')
})
})
})
</script>
</head>
<body>
<input type="button" id="btn" value="按钮">
</body>
</html>
Cookie
http协议是一个无状态的协议,下一次访问页面时是无法知道上一次访问该页面时做了什么
cookie本质:由服务器生成,存储在浏览器中的一小段文本信息
cookie的特点:
- 以键值对存在
- 通过浏览器访问网站时,会将浏览器存储的COOKIE内容全部发送给服务器,服务器访问传递来的cookie数据:【request.COOKIES】
- cookie是基于域名安全的
- cookie有过期时间,如果不指定,则关闭浏览器后该cookie就会失效
设置Cookie
1
2
3
4
5
6
7
8
9
10
11
12# cookie设置和获取需要在视图函数中设定
# 设置cookie需要一个HttpResponse对象,或者是其子类对象
# cookie的设置方式:set_cookie()
def set_cookie(request):
response = HttpResponse('设置cookie的值信息')
# 通过expires设置cookie的过期时间
response.set_cookie('cookie_name', 'cookie_value', expires=datetime.now() + timedelta(days = 14))
# 设置max_age来设置cookie的过期时间
# response.set_cookie('cookie_name', 'cookie_value', max_age=14*24*3600)
return response获取cookie
1
2
3
4def get_cookie(request):
# 获取cookie的方式, cookie中不管设置时是什么数据格式,获取的时候都变成字符串
cookie_value = request.COOKIES['cookie_name']
return cookie_value
Session
session存储于服务器端
session的特点
- session以键值对进行存储,django中使用django_session表存储session数据信息,其中有三个子段:session_key【随机主键值】、session_data【存储的数据,base64加密后的】、expiredate【过期时间,默认14天】
- session依赖于cookie,因为客户端的数据通过cookie进行存储
- session也有过期时间,如果不指定,默认两周后自动过期
session的设置
1
2
3
4
5
6
7
8
9# session的配置和获取都在视图函数中进行配置
def set_session(request):
if request.session.has_key('usename'):
return redirect('/index')
# 设置session时通过request
request.session['usename'] = 'smart'
request.session['age'] = 18
return HttpResponse('设置session')session的获取
1
2
3
4
5def get_session(request):
username = request.session['usename']
# session中,存储时是什么格式的数据,取出来的时候就是什么类型的数据
age = request.session['age']
return HttpResponse(username + ':' + str(age))session的常用方法
方法名 含义 request.session[‘键’]=’值’ 设置session request.session.get(‘键’, 默认值) 根据键读取session值,如果没有则返回默认值 request.session.clear() 清除当前用户存储的所有session值,但是只清除值部分 request.session.flush() 清除session数据,在存储中删除掉整条session数据 del request.session[‘键’] 只删除session中对应的键值信息 request.session.set_expiry(value) 设置会话的超时时间,没有设定则默认两周。value=整数,表示在指定的秒以后过期。value=0,表示session在用户的浏览器关闭时即过期。value=None,表示session在两周后自动过期。 Request.session.has_key(‘键’) 判断session中是否含有某个键,有则返回True,否则返回False