django怎么request请求

导读:本篇文章首席CTO笔记来给大家介绍有关django怎么request请求的相关内容,希望对大家有所帮助,一起来看看吧。

Django请求与响应(request)与(response)

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

form标签中的‘GET’和‘POST’

在HTML中,form表单的作用是收集标签中的内容,form.../form 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。

一个表单必须指定两样东西:

form表单使用get方式提交的例子:

可以看见在地址栏会显示参数。

form表单使用post方式提交的例子:

一键多值的getlist方法:

request对象的属性GET、POST都是QueryDict类型的对象

与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

GET属性:

View类视图以请求方式为类方法.

在对应的方式下面编写对应的逻辑函数.

就是将视图中的方法以类的方式书写逻辑。

View类视图的引用.

在url.py中配置路由是通过: as_view()

Django在处理文件上传的时候,文件数据被保存在了request.FILES,FILES中的每个键为input type=\"file\" name=\"\" /中的name

设置文件的存储路径:

1.在项目根目录下static中创建media文件夹

2.图片上传后,会被保存到“/static/media/文件”

3.打开settings.py文件,增加media_root项

FILES只有在请求的方法为POST 且提交的form带有enctype=\"multipart/form-data\" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象

文件上传视图函数:

HttpResponse对象:

HttpResponse的子类:

返回数据的响应函数有:

HttpResponse() 返回简单的字符串对象

render() 渲染模板

redirect() 重定向

JsonResponse() 返回json数据

HTTP协议:

HTTP(超文本传输协议)是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

客户端和服务器都是怎么记录登录的状态的呢?

浏览器中的----cookie:(请自行查找)

注意:设置cookie值以及删除cookie值都是response对象的操作,而获取cookie是从requeset相应中获得的.

虽然cookie可以保存状态,但注意不要存储敏感信息.

django怎么request请求  第1张

django的request,response,session的常用方法函数,不用多,帮忙列一下谢谢

HttpRequest对象

HttpRequest 表示来自某客户端的一个单独的HTTP请求。

HttpRequest实例的属性包含了关于此次请求的大多数重要信息(详见表H-1)。 除了session外的所有属性都应该认为是只读的.

表 H-1. HttpRequest对象的属性

属性

描述

path 表示提交请求页面完整地址的字符串, 不包括域名,如 \"/music/bands/the_beatles/\" 。

method

表示提交请求使用的HTTP方法。 它总是大写的。例如:

if request.method == \'GET\':

do_something()

elif request.method == \'POST\':

do_something_else()

GET 一个类字典对象,包含所有的HTTP的GET参数的信息。 见 QueryDict 文档。

POST

一个类字典对象,包含所有的HTTP的POST参数的信息。 见 QueryDict 文档。

通过POST提交的请求有可能包含一个空的 POST 字典, 也就是说, 一个通过POST方法提交的表单可能不包含数据。 因此,不应该使用 if request.POST 来判断POST方法的使用, 而是使用if request.method == \"POST\" (见表中的 method 条目)。

注意: POST 并 不 包含文件上传信息。 见 FILES 。

REQUEST

为了方便而创建,这是一个类字典对象,先搜索 POST , 再搜索 GET 。 灵感来自于PHP的$_REQEUST 。

例如, 若 GET = {\"name\": \"john\"} , POST = {\"age\": \'34\'} , REQUEST[\"name\"] 会是 \"john\" ,REQUEST[\"age\"] 会是 \"34\" 。

强烈建议使用 GET 和 POST ,而不是 REQUEST 。 这是为了向前兼容和更清楚的表示。

COOKIES 一个标准的Python字典,包含所有cookie。 键和值都是字符串。cookie使用的更多信息见第12章。

FILES

一个类字典对象,包含所有上传的文件。 FILES 的键来自 input type=\"file\" name=\"\" / 中的name 。 FILES 的值是一个标准的Python字典, 包含以下三个键:

filename :字符串,表示上传文件的文件名。

content-type :上传文件的内容类型。

content :上传文件的原始内容。

注意 FILES 只在请求的方法是 POST ,并且提交的 form 包含 enctype=\"multipart/form-data\" 时 才包含数据。否则, FILES 只是一个空的类字典对象。

META

一个标准的Python字典,包含所有有效的HTTP头信息。 有效的头信息与客户端和服务器有关。 这里有几个例子:

CONTENT_LENGTH

CONTENT_TYPE

QUERY_STRING :未解析的原始请求字符串。

REMOTE_ADDR :客户端IP地址。

REMOTE_HOST :客户端主机名。

SERVER_NAME :服务器主机名。

SERVER_PORT :服务器端口号。

在 META 中有效的任一HTTP头信息都是带有 HTTP_ 前缀的 键,例如:

HTTP_ACCEPT_ENCODING

HTTP_ACCEPT_LANGUAGE

HTTP_HOST :客户端发送的 Host 头信息。

HTTP_REFERER :被指向的页面,如果存在的。

HTTP_USER_AGENT :客户端的user-agent字符串。

HTTP_X_BENDER : X-Bender 头信息的值, 如果已设的话。

user

一个 django.contrib.auth.models.User 对象表示 当前登录用户。 若当前用户尚未登录, user 会设为 django.contrib.auth.models.AnonymousUser 的一个实例。 可以将它们与is_authenticated() 区别开:

if request.user.is_authenticated():

# Do something for logged-in users.

else:

# Do something for anonymous users.

user 仅当Django激活 AuthenticationMiddleware 时有效。

关于认证和用户的完整细节,见第12章。

session 一个可读写的类字典对象,表示当前session。 仅当Django已激活session支持时有效。 见第12章。

raw_post_data POST的原始数据。 用于对数据的复杂处理。

Request对象同样包含了一些有用的方法,见表H-2。

表 H-2. HttpRequest 的方法

方法

描述

__getitem__(key)

请求所给键的GET/POST值,先查找POST,然后是GET。 若键不存在,则引发异常 KeyError。

该方法使用户可以以访问字典的方式来访问一个 HttpRequest 实例。

例如, request[\"foo\"] 和先检查 request.POST[\"foo\"] 再检查 request.GET[\"foo\"] 一 样。

has_key() 返回 True 或 False , 标识 request.GET 或 request.POST 是否包含所给的 键。

get_full_path() 返回 path ,若请求字符串有效,则附加于其后。 例如,\"/music/bands/the_beatles/?print=true\" 。

is_secure() 如果请求是安全的,则返回 True 。 也就是说,请求是以HTTPS的形式提交的。

QueryDict 对象

在一个 HttpRequest 对象中, GET 和 POST 属性都是 django.http.QueryDict 的实例。 QueryDict 是一个类似于字典的类,专门用来处理用一个键的多值。当处理一些HTML表单中的元素,特别是 select multiple=\"multiple\" 之类传递同一key的多值的元素时,就需要这个类了。

translating....

QueryDict 实例是不可变的,除非创建了一个 copy() 副本。也就是说不能直接更改 request.POST 和 request.GET 的属性。

QueryDict 实现了所有标准的字典的方法,因为它正是字典的一个子类。与其不同的东西都已在表H-3中列出。

表 H-3. QueryDicts 与标准字典的区别

方法

与标准字典实现的不同

__getitem__ 与一个字典一样。但是,当一个键有多个值时, __getitem__() 返回最后一个值。

__setitem__ 将所给键的值设为 [value] (一个只有一个 value 元素的 Python列表)。 注意,因对其它的字典函数有副作用,故它只能被称 为一个可变的 QueryDict (通过 copy() 创建)。

get() 如果一个键多个值,和 __getitem__ 一样, get() 返回 最后一个值。

update()

参数是一个 QueryDict 或标准字典。 和标准字典的

update 不同,这个方法*增加*而不是替换一项内容:

q = QueryDict(\'a=1\')

q = q.copy() # 使其可变

q.update({\'a\': \'2\'})

q.getlist(\'a\')

[\'1\', \'2\']

q[\'a\'] # 返回最后一个值

[\'2\']

items()

和标准字典的 items() 方法一样, 不同的是它和 __getitem()__ 一样,返回最后一个值:

q = QueryDict(\'a=1a=2a=3\')

q.items()

[(\'a\', \'3\')]

values() 和标准字典的 values() 方法一样, 不同的是它和 __getitem()__ 一样,返回最后一个值。

另外, QueryDict 还有在表H-4中列出的方法。

表 H-4. 附加的 (非字典的) QueryDict 方法

方法

描述

copy() 返回一个对象的副本,使用的是Python标准库中的 copy.deepcopy() 。 该副本是可变的, 也就是说,你能改变它的值。

getlist(key) 以Python列表的形式返回所请求键的数据。 若键不存在则返回空列表。 它保证了一定会返回某种形式的list。

setlist(key, list_) 将所给键的键值设为 list_ (与 __setitem__() 不同)。

appendlist(key, item) 在 key 相关的list上增加 item 。

setlistdefault(key, l) 和 setdefault 一样, 不同的是它的第二个参数是 一个列表,而不是一个值。

lists()

和 items() 一样, 不同的是它以一个列表的形式 返回字典每一个成员的所有值。 例如:

q = QueryDict(\'a=1a=2a=3\')

q.lists()

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

urlencode() 返回一个请求字符串格式的数据字符串 (如, \"a=2b=3b=5\" )。

一个完整的例子

例如, 给定这个HTML表单:

form action=\"/foo/bar/\" method=\"post\"

input type=\"text\" name=\"your_name\" /

select multiple=\"multiple\" name=\"bands\"

option value=\"beatles\"The Beatles/option

option value=\"who\"The Who/option

option value=\"zombies\"The Zombies/option

/select

input type=\"submit\" /

/form

如果用户在 your_name 中输入 \"John Smith\" ,并且在多选框中同时选择了The Beatles和The Zombies,那么以下就是Django的request对象所拥有的:

request.GET

{}

request.POST

{\'your_name\': [\'John Smith\'], \'bands\': [\'beatles\', \'zombies\']}

request.POST[\'your_name\']

\'John Smith\'

request.POST[\'bands\']

\'zombies\'

request.POST.getlist(\'bands\')

[\'beatles\', \'zombies\']

request.POST.get(\'your_name\', \'Adrian\')

\'John Smith\'

request.POST.get(\'nonexistent_field\', \'Nowhere Man\')

\'Nowhere Man\'

使用时请注意:

GET , POST , COOKIES , FILES , META , REQUEST , raw_post_data 和 user 这些属性都是延迟加载的。 也就是说除非代码中访问它们,否则Django并不会花费资源来计算这些属性值。

django 获取 POST 请求值的几种方法

1、django获取post过来的多个键值对:

Ajax:

var languages = {};

languages[\'english\'] = [\'mark\', \'james\'];

languages[\'spanish\'] = [\'amy\', \'john\'];

$.ajax({

type: \'POST\',

url: \'/save/\',

data: languages,

dataType: \'json\'

});

Django Views.py

if request.is_ajax() and request.method == \'POST\':

for key in request.POST:

print key

valuelist = request.POST.getlist(key)

print valuelist

---------------------

fiddle:

name=june; age=26;

---------------------

views.py

16 for key in request.POST: 17 print key 18 valuelist = request.POST.getlist(key) 19 print valuelist

----------------------------

Development server is running at Quit the server with CONTROL-C. Your method is POST! name [u\'june\']

age [u\'26\'] [04/Apr/2012 10:58:11] \"POST /getuin/ HTTP/1.1\" 200 20

2、一次加载所有值:

def view_example(request):

data=simplejson.loads(request.raw_post_data)

3、获取多个值作为一个列表

request.POST get multiple values

The QueryDict.getlist() allows to get all the checkbox(or select list) values from the request.POST/GET object.

Let’s assume we have a simple form with the following checkboxes. Each checkbox contains an ID of an artist. 1 form method=\"post\" action=\"\" 2 ... 3 input value=\"1\" name=\"artists\" type=\"checkbox\" 4 input value=\"2\" name=\"artists\" type=\"checkbox\" 5 input value=\"3\" name=\"artists\" type=\"checkbox\" 6 ... 7 /form

In views.py : 1 def handle(request): 2 if request.method == \'POST\': 3 artists = request.POST.getlist(\'artists\') # now artists is a list of [1,2,3]

结语:以上就是首席CTO笔记为大家整理的关于django怎么request请求的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:18
下一篇 2023-09-23

相关推荐

发表回复

登录后才能评论