django怎么拿到request请求

大神,打扰一下,django怎么拿到request请求
最新回答
脸滚键盘抬头懵

2024-11-22 11:08:24

导读:很多朋友问到关于django怎么拿到request请求的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

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中的每个键为inputtype="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,response,session的常用方法函数,不用多,帮忙列一下谢谢

HttpRequest对象

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

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

表H-1.HttpRequest对象的属性

属性

描述

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

method

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

ifrequest.method=='GET':

do_something()

elifrequest.method=='POST':

do_something_else()

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

POST

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

通过POST提交的请求有可能包含一个空的POST字典,也就是说,一个通过POST方法提交的表单可能不包含数据。因此,不应该使用ifrequest.POST来判断POST方法的使用,而是使用ifrequest.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的键来自inputtype="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()区别开:

ifrequest.user.is_authenticated():

#Dosomethingforlogged-inusers.

else:

#Dosomethingforanonymoususers.

user仅当Django激活AuthenticationMiddleware时有效。

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

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

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

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表单中的元素,特别是selectmultiple="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表单:

formaction="/foo/bar/"method="post"

inputtype="text"name="your_name"/

selectmultiple="multiple"name="bands"

optionvalue="beatles"TheBeatles/option

optionvalue="who"TheWho/option

optionvalue="zombies"TheZombies/option

/select

inputtype="submit"/

/form

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

request.GET

{}

request.POST

{'your_name':['JohnSmith'],'bands':['beatles','zombies']}

request.POST['your_name']

'JohnSmith'

request.POST['bands']

'zombies'

request.POST.getlist('bands')

['beatles','zombies']

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

'JohnSmith'

request.POST.get('nonexistent_field','NowhereMan')

'NowhereMan'

使用时请注意:

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

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

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

Ajax:

varlanguages={};

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

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

$.ajax({

type:'POST',

url:'/save/',

data:languages,

dataType:'json'

});

DjangoViews.py

ifrequest.is_ajax()andrequest.method=='POST':

forkeyinrequest.POST:

printkey

valuelist=request.POST.getlist(key)

printvaluelist

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

fiddle:

name=june;age=26;

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

views.py

16

forkeyinrequest.POST:17printkey18valuelist=

request.POST.getlist(key)19printvaluelist

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

Development

serverisrunningatQuittheserverwith

CONTROL-C.YourmethodisPOST!name

[u'june']

age[u'26'][04/Apr/201210:58:11]"POST/getuin/HTTP/1.1"20020

2、一次加载所有值:

defview_example(request):

data=simplejson.loads(request.raw_post_data)

结语:以上就是首席CTO笔记为大家整理的关于django怎么拿到request请求的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么拿到request请求的相关内容别忘了在本站进行查找喔。