Django--4--views.py详解

1.views.py的作用:业务数据的请求和处理

2.request & response

先来看看之前这张图,urls.py在上一节我们已经说过了。而MTV模式中的V模块还有另外两个重要的东西,即 requestresponse

Django--4--views.py详解_第1张图片

而这两个对象其实是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源码中加上这段

{% csrf_token %}


然后我们在代码里面这样写

# 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...

你可能感兴趣的:(Django)