Django--4--views.py详解

本文介绍了Django框架中HTTP请求处理的基本原理,包括HttpRequest对象的使用方法、常见属性及如何通过GET和POST方式获取参数。同时,还探讨了HttpResponse对象的创建与使用,以及页面渲染和跳转的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2.request & response

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

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

<form method="post" action="/hello/">

{% csrf_token %}

<input type = "text" value=" " name="key">

<input type = "submit" value = "提交"></form>
然后我们在代码里面这样写

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值