您现在的位置是:首页 > Django > Django框架06:HTTP对象

Django框架06:HTTP对象

2018年07月13日 Django 浏览(479) 评论(0)

简介HTTPRequest对象1.HttpReqeust对象 ①服务器接收到http协议的请求后,会根据报文创建HttpRequest对象。 ②视图函数的第一个参数是HttpRequest对象。 ③在django.http模块中定义了HttpRequest对象的API。2.属性 下面除非特...

HTTPRequest对象

1.HttpReqeust对象
    ①服务器接收到http协议的请求后,会根据报文创建HttpRequest对象。
    ②视图函数的第一个参数是HttpRequest对象。
    ③在django.http模块中定义了HttpRequest对象的API。

2.属性
    下面除非特别说明,属性都是只读的。
    ①path:一个字符串,表示请求的页面的完整路径,不包含域名。
    ②method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
    ③encoding:一个字符串,表示提交的数据的编码方式。
        如果为None则表示使用浏览器的默认设置,一般为utf-8。
        这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
    ④GET:一个类似于字典的对象,包含get请求方式的所有参数。
    ⑤POST:一个类似于字典的对象,包含post请求方式的所有参数。
    ⑥FILES:一个类似于字典的对象,包含所有的上传文件。
    ⑦COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。
    ⑧session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用。

3.方法
     is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True。

QueryDict对象

1.QueryDict对象  
     ①定义在django.http.QueryDict。
     ②request对象的属性GET、POST都是QueryDict类型的对象。
     ③与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。
     ④方法get():根据键获取值。
        只能获取键的一个值。
        如果一个键同时拥有多个值,获取最后一个值。

dict.get('键',default)  # 或简写为dict['键']

    ⑤方法getlist():根据键获取值。
       将键的值以列表返回,可以获取一个键的多个值。

dict.getlist('键',default)

2.GET属性
    ①QueryDict类型的对象。
    ②包含get请求方式的所有参数。
    ③与url请求地址中的参数对应,位于?后面。
    ④参数的格式是键值对,如key1=value1。
    ⑤多个参数之间,使用&连接,如key1=value1&key2=value2。
    ⑥键是开发人员定下来的,值是可变的。

3. POST属性
    ①QueryDict类型的对象。
    ②包含post请求方式的所有参数。
    ③与form表单中的控件对应。
    ④问:表单中哪些控件会被提交?
    答:控件要有name属性,则name属性的值为键,value属性的值为键,构成键值对提交。
        对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况。
    ⑤键是开发人员定下来的,值是可变的。

HttpResponse对象

    在django.http模块中定义了HttpResponse对象的API,HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建。

1.不调用模板,直接返回数据

def index(request):
    return HttpResponse('你好')

2.调用模板

from django.http import HttpResponse
from django.template import RequestContext, loader

def index(request):
    t1 = loader.get_template('polls/index.html')
    context = RequestContext(request, {'h1': 'hello'})
    return HttpResponse(t1.render(context))

3.属性
    ①content:表示返回的内容,字符串类型。
    ②charset:表示response采用的编码字符集,字符串类型。
    ③status_code:响应的HTTP响应状态码。
    ④content-type:指定输出的MIME类型。

4.方法
    ①init :使用页内容实例化HttpResponse对象。
    ②write(content):以文件的方式写。
    ③flush():以文件的方式输出缓存区。

set_cookie(key, value='', max_age=None, expires=None) # 设置Cookie

    key、value都是字符串类型。
    max_age是一个整数,表示在指定秒数后过期。
    expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化。
    max_age与expires二选一。
    如果不指定过期时间,则两个星期后过期。

from django.http import HttpResponse
from datetime import *

def index(request):
    response = HttpResponse()
    if request.COOKIES.has_key('h1'):
        response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
        response.set_cookie('h1', '你好', 120)
        # response.set_cookie('h1', '你好', None, datetime(2016, 10, 31))
        return response

    delete_cookie(key):删除指定key的Cookie,如果key不存在则什么也不发生。

5.子类HttpResponseRedirect
    ①重定向,服务器端跳转。
    ②构造函数的第一个参数用来指定重定向的地址。

from django.http import HttpResponse,HttpResponseRedirect
def index(request):
    return HttpResponseRedirect('js/')

def index2(request,id):
    return HttpResponse(id)

6.子类JsonResponse
   ①返回json数据,一般用于异步请求。
   ②_init _(data)。
   ③帮助用户创建JSON编码的响应。
   ④参数data是字典对象。
   ⑤JsonResponse的默认Content-Type为application/json。

from django.http import JsonResponse

def index2(requeset):
   return JsonResponse({'list': 'abc'})

7.简写函数
    Render:

render(request, template_name[, context])

    ①结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象。
    ②request:该request用于生成response。
    ③template_name:要使用的模板的完整名称。
    ④context:添加到模板上下文的一个字典,视图将在渲染模板之前调用它。

from django.shortcuts import render

def index(request):
    return render(request, 'booktest/index.html', {'h1': 'hello'})

    重定向redirect(to):
    ①为传递进来的参数返回HttpResponseRedirect。
    ②to推荐使用反向解析。

from django.shortcuts import redirect
from django.core.urlresolvers import reverse

def index(request):
    return redirect(reverse('booktest:index2'))

    得到对象或返回404:

get_object_or_404(klass, args, *kwargs)

    ①通过模型管理器或查询集调用get()方法,如果没找到对象,不引发模型的DoesNotExist异常,而是引发Http404异常。

        Klass:获取对象的模型类、Manager对象或QuerySet对象。
        **kwargs:查询的参数,格式应该可以被get()和filter()接受。
        如果找到多个对象将引发MultipleObjectsReturned异常。

from django.shortcuts import *

def detail(request, id):
    try:
        book = get_object_or_404(BookInfo, pk=id)
    except BookInfo.MultipleObjectsReturned:
        book = None
    return render(request, 'booktest/detail.html', {'book': book})

    得到列表或返回404:

get_list_or_404(klass, args, *kwargs)

    klass:获取列表的一个Model、Manager或QuerySet实例。
    **kwargs:查寻的参数,格式应该可以被get()和filter()接受。

from django.shortcuts import *

def index(request):
    # list = get_list_or_404(BookInfo, pk__lt=1)
    list = get_list_or_404(BookInfo, pk__lt=6)
    return render(request, 'booktest/index.html', {'list': list})

郑重声明:

(原创博文,转载请注明来自 蒋振飞的博客!本文链接:点击我获取我的链接)

若对你有帮助,不妨扫一扫右侧的二维码打赏我一下吧 ^_^

评论区域

评论列表

智慧如你,速度抢下沙发吧 !

更多文章目录