导读:本篇文章首席CTO笔记来给大家介绍有关前端如何给django传参数的相关内容,希望对大家有所帮助,一起来看看吧。
django rest framework 获取前端参数的几种方式
这种是通过url传参 (params),那么应该使用:
request.query_params拿到的是QueryDict的类型,使用dict()方法转化为dict
request.data拿到的参数是QueryDict的类型,此处只讲获取,QueryDict类包含了很多方法,具体的可以参考:
request.data 拿到是Dict类型
request.data 拿到的也是QueryDict类型,获取方法可以参考 链接
注意:
此处都是基于继承 rest framework 中APIView的类重新封装的request来获取参数喔!
django HttpResponseRedirect怎么传递参数
使用session传递:
这种方法的前提是你的框架启动了session,关于怎么启动session,这里贴一段1.6的官方文档的描述:
在跳转之前(HttpResponseRedirect之前),把需要传递的参数保存到request的某个session中,然后跳转到某个url(U),在该url(U)的view方法中,从request的session中,就可以得到传过来的参数。
django1.8和jinja2配合,url标签怎么传参数
可以使用url里面自带的name的方法。
对于像a这样链接的操作。 用法: 不带参数的: {% url \'name\' %} 带参数的:参数可以是变量名 {% url \'name\' 参数 %} 所以这里的改变为:url(\'^login_first/$\',views.login,name=\"login_first\")(对于其他部分自动补脑),在a href=\"{% url\'login_first\'%}\".
解释:{% url \'login_first\'%},这里的login_first代表着这个url自动去寻找django的url里面name=\"login_first\"这个条链接,并将前面的url赋给a标签中的href。
Django接受前端数据的几种方法
字符型
字符型的数据相对好获取,前端传递的方法如下:
sendData = { \"exporttype\": exporttype,
\"bugids\": bugids,
\"test\": JSON.stringify({\"test\": \"test\"})
};
在Django的后端只要使用exporttype = request.GET.get(\"exporttype\")
就能正常的获取到这个数据了。
注意: 在Python2.7中数据是unicode编码的,如果要使用,有时候需要进行转str
结果示例:
Excle type \'unicode\'
数组型
获取数组型的数据如果使用获取字符串的数据的方法,打出的结果是None。我们要使用这个方法:
bugids = request.GET.getlist(\"bugids[]\")
这样获取的数据就是数组类型。
注意: 获取的数组中的元素是unicode编码的,在某些时候使用需要转编码
结果示例:
•传递的url
[14/Jul/2016 11:00:41]\"GET /testtools/exportbug/?exporttype=Exclebugids%5B%5D=102bugids%5B%5D=101bugids%5B%5D
•获取的数据
[u\'102\', u\'101\', u\'100\', u\'99\', u\'98\', u\'97\', u\'96\', u\'95\', u\'94\', u\'93\', u\'92\', u\'91\', u\'90\', u\'89\', u\'88\', u\'87\'
字典型
字典型数据其实可以当成字符串数据来处理,获取到对应字符串后使用JSON模块做一下格式化就行了。
对于前端来说,传递字典型的数据就是传递JSON数据,所以使用的方法是:
\"test\": JSON.stringify({\"test\": \"test\"})
结果示例:
{\"test\":\"test\"} type \'unicode\'
相关源码
•Get方法
Get方法是wsgi里面的一个方法。
def GET(self):
# The WSGI spec says \'QUERY_STRING\' may be absent.
raw_query_string = get_bytes_from_wsgi(self.environ, \'QUERY_STRING\', \'\')
return http.QueryDict(raw_query_string, encoding=self._encoding)
最终返回的是一个http.QueryDict(raw_query_string, encoding=self._encoding)http的原始数据,而QueryDict继承于MultiValueDict ,所以我们直接看MultiValueDict就好了。
•MultiValueDict
其实源码看起来并不难。
def get(self, key, default=None):
\"\"\"
Returns the last data value for the passed key. If key doesn\'t exist
or value is an empty list, then default is returned.
\"\"\"
try:
val = self[key]
except KeyError:
return default
if val == []:
return default
return val
def getlist(self, key, default=None):
\"\"\"
Returns the list of values for the passed key. If key doesn\'t exist,
then a default value is returned.
\"\"\"
try:
return super(MultiValueDict, self).__getitem__(key)
except KeyError:
if default is None:
return []
return default
def __getitem__(self, key):
\"\"\"
Returns the last data value for this key, or [] if it\'s an empty list;
raises KeyError if not found.
\"\"\"
try:
list_ = super(MultiValueDict, self).__getitem__(key)
except KeyError:
raise MultiValueDictKeyError(repr(key))
try:
return list_[-1]
except IndexError:
return []
Django 怎样传数据给HTML页面的ajax
Django传数据给HTML页面的ajax的方法是通过load方法传入的。
举例:ajax.html
html
head
meta charset=\"utf-8\" /
titleajax test/title
script type=\"text/javascript\" src=\"\"/script
script type=\"text/javascript\"
jQuery(function($){
$(\'button\').click(function(){
$name = $(this).attr(\'name\');
$(\'#out\').empty().load(\'/ajax_deal/\',{ name : $name });
});
});
/script
style type=\"text/css\"/style
/head
body
button id=\"btn-1\" name=\"1\"1/button
button id=\"btn-2\" name=\"2\"2/button
button id=\"btn-3\" name=\"3\"3/button
div id=\"out\"/div
/body
/html
设置下路由:url(r\'^ajax_deal/$\',\'jobs.views.ajax_deal\'),创建名为jobs的app
/opt/django/webproject/jobs
处理函数:
def ajax_deal(request):
return HttpResponse(\"hello\")
django中怎么在一个网页向另一个网页传递参数
获取字典中某个key的值有2种方式:
print user.get(\'username\')11
print user[\'username\']11
他们到底有什么区别呢?
我来常识打印一个没有的key,比如
print user.get(\'kk\')11
打印结果为:None
print user[\'kk\']11
页面会报错
结语:以上就是首席CTO笔记为大家介绍的关于前端如何给django传参数的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!
版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。