您的位置:首页 > 产品设计 > UI/UE

Django View Request和Response

2016-03-16 13:46 453 查看
== HttpRequest 对象

- HttpRequest 属性

所有属性应被视为只读的,除非特别声明。

HttpRequest.scheme (http or https)

HttpRequest.body => HttpRequest.read()

HttpRequest.path /app/path/to/

HttpRequest.path_info /path/to/

HttpRequest.method 大写GET, POST

HttpRequest.encoding

HttpRequest.GET 类字典对象(QueryDict)

HttpRequest.POST 类字典对象

HttpRequest.COOKIES python字典

HttpRequest.FILES 类字典对象 => <input type="file" name="" />, UploadedFile

HttpRequest.META python字典

CONTENT_LENGTH – The length of the request body (as a string).

CONTENT_TYPE – The MIME type of the request body.

HTTP_ACCEPT – Acceptable content types for the response.

HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.

HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.

HTTP_HOST – The HTTP Host header sent by the client.

HTTP_REFERER – The referring page, if any.

HTTP_USER_AGENT – The client’s user-agent string.

QUERY_STRING – The query string, as a single (unparsed) string.

REMOTE_ADDR – The IP address of the client.

REMOTE_HOST – The hostname of the client.

REMOTE_USER – The user authenticated by the Web server, if any.

REQUEST_METHOD – A string such as "GET" or "POST".

SERVER_NAME – The hostname of the server.

SERVER_PORT – The port of the server (as a string).

HttpRequest.urlconf 覆盖ROOT_URLCONF

HttpRequest.resolver_match

HttpRequest.current_app

#由中间件设置的属性

HttpRequest.session => SessionMiddleware 可读写的类字典对象

HttpRequest.site => CurrentSiteMiddleware Site

HttpRequest.user =>

- HttpRequest 方法

HttpRequest.get_host() => "127.0.0.1:8000"

HttpRequest.get_full_path() => "/music/bands/the_beatles/?print=true"

HttpRequest.build_absolute_uri(location) => "http://example.com/music/bands/the_beatles/?print=true"

HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

HttpRequest.is_secure() HTTPS.

HttpRequest.is_ajax()

HttpRequest.read(size=None)

HttpRequest.readline()

HttpRequest.readlines()

HttpRequest.xreadlines()

HttpRequest.__iter__()

- HttpRequest QueryDict

dictionary的子类

QueryDict.__init__(query_string=None, mutable=False, encoding=None)

>>> QueryDict('a=1&a=2&c=3')

<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

QueryDict.__getitem__(key)

QueryDict.__setitem__(key, value)

QueryDict.__contains__(key)

QueryDict.get(key, default=None)

QueryDict.setdefault(key, default=None)

QueryDict.update(other_dict)

QueryDict.values() # 最后一个value

>>> q = QueryDict('a=1&a=2&a=3')

>>> q.values()

['3']

QueryDict.itervalues()

QueryDict.copy()

QueryDict.getlist(key, default=None)

QueryDict.setlist(key, list_)

QueryDict.appendlist(key, item)

QueryDict.setlistdefault(key, default_list=None)

QueryDict.lists()

>>> q = QueryDict('a=1&a=2&a=3')

>>> q.lists()

[('a', ['1', '2', '3'])]

QueryDict.pop(key)

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)

>>> q.pop('a')

['1', '2', '3']

QueryDict.popitem()

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)

>>> q.popitem()

('a', ['1', '2', '3'])

QueryDict.dict()

>>> q = QueryDict('a=1&a=3&a=5')

>>> q.dict()

{'a': '5'}

QueryDict.urlencode(safe=None)

>>> q = QueryDict('a=2&b=3&b=5')

>>> q.urlencode()

'a=2&b=3&b=5'

>>> q = QueryDict(mutable=True)

>>> q['next'] = '/a&b/'

>>> q.urlencode(safe='/') #不要求编码的字符

'next=/a%26b/'

== HttpResponse 对象

- HttpResponse 用法

# 传递字符串

>>> from django.http import HttpResponse

>>> response = HttpResponse("Here's the text of the Web page.")

>>> response = HttpResponse("Text only, please.", content_type="text/plain")

>>> response = HttpResponse()

>>> response.write("<p>Here's the text of the Web page.</p>")

>>> response.write("<p>Here's another paragraph.</p>")

# 传递iterators

存储其中的内容为字符串(string)

# 设置Header属性

>>> response = HttpResponse()

>>> response['Age'] = 120

>>> del response['Age']

# 将响应作为一个附件

>>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel')

>>> response['Content-Disposition'] = 'attachment; filename="foo.xls"'

- HttpResponse 属性

HttpResponse.content bytestring表示内容

HttpResponse.charset DEFAULT_CHARSET:'utf-8'

HttpResponse.status_code https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10
HttpResponse.reason_phrase

HttpResponse.streaming always False. 用于区分streaming responses和普通responses

HttpResponse.closed True if the response has been closed.

- HttpResponse 方法

HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None)

# content iterator或string

# content_type 默认值"text/html; charset=utf-8"

HttpResponse.__setitem__(header, value) #header和value都是string

HttpResponse.__delitem__(header)

HttpResponse.__getitem__(header)

HttpResponse.has_header(header)

HttpResponse.setdefault(header, value)

HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)

# https://docs.python.org/3/library/http.cookies.html#http.cookies.Morsel
HttpResponse.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=True)

HttpResponse.delete_cookie(key, path='/', domain=None)

HttpResponse.write(content)

HttpResponse.flush()

HttpResponse.tell()

HttpResponse.getvalue()

HttpResponse.writable()

HttpResponse.writelines(lines)

- HttpResponse 子类
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10
class HttpResponseRedirect 重定向 status code 302: found

class HttpResponsePermanentRedirect 重定向 status code 301: moved

class HttpResponseNotModified status code 304

class HttpResponseBadReques status code 400

class HttpResponseNotFound status code 404

class HttpResponseForbidden status code 403

class HttpResponseNotAllowed status code 405

class HttpResponseGone status code 410

class HttpResponseServerError status code 500

== JsonResponse 对象

class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, **kwargs)

# Content-Type header is set to application/json

# data, dict 对象

# safe, True(默认)只能传dict对象;False可以传任何对象

>>> from django.http import JsonResponse

>>> response = JsonResponse({'foo': 'bar'})

>>> response.content

b'{"foo": "bar"}'

>>> response = JsonResponse([1, 2, 3], safe=False) # safe=False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: