Django View Request和Response


== 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























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值