render真的是Django框架中的一个神奇的函数,到目前为止,在我的理解里,它是负责前端页面和后端逻辑之前传出数据。
首先看看网上别人的理解,参考链接:http://www.cnblogs.com/panwenbin-logs/p/5838064.html
别的不说先上源码:(这里Django版本是1.9)
参考链接: http://www.ziqiangxuetang.com/django/django-json-templates.html
首先我们想传递一个dict或者list传递给JavaScript,处理之后显示到网页上,比如要用js进行可视化数据。有两种方法:
一种就是我这几天在用的render方法,这个方法需要在视图函数中使用(也就是应用下面的views.py文件中使用),和网页其他的部分一起渲染到网页上(一次性地渲染,还是同一次请求)。
看例子:先是views.py
参考链接: http://www.cnblogs.com/feixuelove1009/p/5922347.html
render()函数的第一个位置参数是请求对象(就是view函数的第一个参数),第二个位置参数是模板,还可以有一个可选的第三参数—一个字典,包含需要传递给模板的数据。最后render函数返回一个经过字典数据渲染过的模板封装而成的HttpResponse对象。
也就是说render的参数中只能有一个dict类型的对象。如果像之前尝试的那样传进去两个字典作为参数,就会报错,==AttributeError ‘dict’ object has no attribute ‘push’==,具体我也不知道字典类型的变量到底具有什么属性。
接下来继续探索,就是我们在视图函数中将一些内容传到前端页面,具体传了什么呢?
这里以用户注册为例:视图函数:
我们开始调试,按照要求填入信息,调试之后得到的
一些中间过程的内容:
这是我们得到的request的内容,其实request是一个字典类型的值:
接下来是填入信息之后得到的前端传来的数据填写的表单,也就是register_form(这里思考一个问题,表单是什么类型的值呢?):
在接下来后端接收了数据,并且从数据库中根据email查找用户,获取到的email被赋值给了变量user_name:
发现没查找到,这就说明这个邮箱之前是没有注册过账户的,这次注册是合法的,所以向数据库中的用户信息表(在我的项目中是UserProfile数据表)插入一条数据,获取到所有的数据后得到的要插入的数据是:
这里就是我们从前端页面获取到数据,在后端处理之后存入数据库的过程。
接下来就说一下前端页面请求数据的时候,后端是怎样将数据传到前端用于显示的。
看代码:
这段代码是发生在用户在注册页面中填入的数据出错的时候,用户要继续留在注册界面,并且要将发生的错误显示到前端页面中以提示用户,看前端的代码:
|
|
这里我们在显示错误信息到前端页面的时候用到了register_form中的错误,每次出错的时候就会将错误都显示出来,而register_form的内容就是通过render()函数传过来的。
目前就是这些收获,未完待续