1.views.py的作用:业务数据的请求和处理
2.request & response
先来看看之前这张图,urls.py在上一节我们已经说过了。而MTV模式中的V模块还有另外两个重要的东西,即 request 和response
而这两个对象其实是http请求中重要的两个对象,而在python中http请求的对象是HttpRequest,http响应的对象是HttpResponse,所在位置是Django.http)
from django.shortcuts import render
from django.contrib.auth.models import User from django.http import HttpRequest, HttpResponse # 这里我们进行导入 # Create your views here. def hello(request): # 注意这个参数request, 它的类型就是HttpRequest user_list = User.objects.all() return render(request, 'table.html', {'user_list': user_list})接下来谈谈HttpRequest对象的常用属性:
from django.shortcuts import render from django.contrib.auth.models import User # Create your views here. def hello(request): print request.path # 请求页面的全路径 这里是/hello/ print request.method # 请求使用的http方法 这里是GET user_list = User.objects.all() return render(request, 'table.html', {'user_list': user_list})而因为这里是 get属性,所以我们可以这样写:
from django.shortcuts import render from django.contrib.auth.models import User # Create your views here. def hello(request): print request.GET.get('name')
# 因为是GET方法,我们可以这样写url:"http://localhost:8000/hello/?name="chris",这句代码就会输出
user_list
= User.objects.all()
return render(
request,
'table.html', {
'user_list'
: user_list}) 接下来尝试一下
post的效果:
首先我们需要构造个表单,在html源码中加上这段
# Create your views here. def hello(request): print request.POST.get('key') # 这里就会输出你输入的key的值了 user_list = User.objects.all() # render实现渲染功能 return render(request, 'table.html', {'user_list': user_list})除了path, method, get, post之外,还有几个重要的属性:user, 这个属性保存了Django登录用户的相关信息 ;session :保存会话属性
接下来是HttpResponse的相关属性:
首先要说明一点是,对于HttpRequest对象来说,是Django自己创建的,但是HttpResponse就必须要我们自己创建。注意每个view方法都必须返回一个HttpResponse对象,HttpResonse对象也是在Django.http里面,这里我们看看之前一直用到的render函数:
def render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, current_app=_current_app_undefined, dirs=_dirs_undefined, dictionary=_dictionary_undefined, using=None): ...........省略............ return HttpResponse(content, content_type, status) # 可以看到最后返回的就是个HttpResponse对象这里的render函数其实是给我们一种快捷的方法,这里我们也可以自己去定义HttpResponse:
def hello(request): response = HttpResponse("Hello I am a HttpResponse") return response这样你打开页面,就会看到“Hello I am a HttpResponse”这句话,不过不推荐这样写哦,render()就挺方便的。这里还有个redirect()方法,在这里是做页面跳转的:
# Create your views here. def hello(request): return redirect('http://www.baidu.com') # 这样当你打开的时候,就会出来百度的页面了最后还要说的一个方法是locals(),这个方法会将函数中所有的方法全部传递给模板
这个方法用于当你要传递的变量(就像是之前的user_list)很多的时候,这个时候如果一个一个写就很麻烦。所以这里可以这样写:
# Create your views here. def hello(request): user_list = User.objects.all() return render(request, 'table.html', locals()) # locals()
to be continued...