模板技术是做BS开发绕不掉的,response给用户是一个凑好的html,但是真的要凑一个html太麻烦了。
网页中其实只有一小部分内容是从数据库里找出来的,只要把模板凑好,把这一小部分替换掉就成了
postman是前端众多调试工具中的一个,如果restful风格的接口开发的时候,往往接口需要调试,这一次采用的前后端分离,调用接口全是restfu风格。用restful风格的接口暴露,来让别人调用功能,这种接口用http暴露出来的,给的是url链接
这一栏有一个加号
使用get方法,左边打点的意思就是修改过的
参数里有id,name,name
get方法提交参数的方式只有查询字符串的方式,查询字符串是get方法和服务器进行数据交互的一种方式
查询字符串是通过get方法,post依然可以写字符串,post的那一部分内容在body中,但是如果查询字符串写在url里,本身就是url的一部分,就写在提交的头部分,第一行里,写在了url中,所以get方法,查询字符串是在head中的第一行,post的请求,请求内容是在body中的
多写一个name会自动解析
这一块整个是写请求的地方,下面是response
send方法
get方法就有 了
现在改成post方法,依然是查询字符串,左边这样就不合适了
post保存一下
现在只要一send就变成post了,(上一次使用post,网页里写了很多表单控件,表单控件里面name的出现了三次,name不一定是check box)
因为有这个东西存在,返回403阻止了
pretty是漂亮点的格式
preview是变成网页
对post请求做了一个安全性验证机制
在middleware中间件,把csrf验证注释掉,这样就可以测试了
点击send,东西是 回来了
post的之前是方法,然后打了个横杠,然后下面是空的,也就是post内容没有拿到
因为用的是查询字符串,查询字符串用的是参数
在body里写,form-data是一个一个写进去
这次选择row
把url的查询字符串删除
send了还是没有
应该把row的东西放到别的,因为row的东西不在能够解析的范围中,是放在另一个属性中
现在感觉好像混在一起
现在算一个
取消钩就不发了
提示要用new line来排
这样改了
现在就对了,但是等号还是有点问题
分隔符是冒号
把等于号改成冒号
提交下 数据
现在就有了
body部分可以预览可以用漂亮格式,还可以看head
花了多长时间,大小
这是response的head,请求的header是我们自己填的
返回的类型是utf-8
请求我们没写header,实际上默认就是用的这种方式,这是默认表单提交方式
这些是提交的数据,放在request中的body部分
这是定义cookie
get post是 最常用的方法,开发最常用的就是get和post,head一般做测试用(返回的只有头)。
主要还会用到put和delete,在用restful风格的时候会用,会写put和delete。
get相当于查询,post是insert,put是modified修改,delete 删
这四种方法加上url,就可以表达出我们想要表达的操作,这种东西就叫restful
模版就是为我们构建一个html出来,因为我们自己用拼接字符串的方式太累 了,所谓的模版就是带图带表的html,我们要做的就是从数据库填数据到表里,通过for循环,塞进去
现在这几项信息比较重要,path,getmethod,路径信息以及post都是我们关心的
django的模版使用自己发明的一种语言,跟orm一样,自己用自己的,django自己的模版语言称为DTL
模版需要setting,需要告诉别人去哪里找模版,模版按照你指定的路径去找,后台自己找类,会在模版路径当中去找,路径写在第二项DIRS【】这是模版搜索路径列表
APP_DIRS,所有已经注册的app
也就是这些app。去app的目录下找模版
改成false,就不去找了,后台admin就找不到模版了,找不到模版直接抛出异常
路径喜欢这么写,一般在网站跟目录下建个文件夹,把模版塞进去
用这种路径,os.path是解释器直接加载的,所以省事了,不然要import os.path才能使用
basedir就是blog12,blog12下的templates
做前后端分离,后端就是提供数据的数据源,前端才是做网页的,(前端用react,js+css前部完成,后端纯粹用django来解决数据的问题,前端通过url访问你,你只要给数据即可,前端拿到数据,由react这些框架把页面绘制出来,这就是前后端分离)
在项目根目录创建一个templates文件夹,里面创建index。html
直接访问index.html是找不到的
还没有使用views.py,按照道理index函数是不写在这里的,url是做路由映射的
现在试试直接用json返回,d构造一个字典
虽然传的是json,但是现在是正文部分
正文部分恰好描述就是json格式的
看相应头部信息
现在告诉的是发回来的是json数据
假如数据返回来,里面可以调用到js,用ajax来调用,用它来访问后台服务,前后端分离就需要用ajax
现在只是返回 了一个纯json数据
django有模板,可以看下模板里有什么东西可以用
有几个东西需要使用,1.loader模板加载,把模板加载了,然后我们需要在里面填充数据
loader有一个get模板
第一个参数是模板名,后面的参数先缺省值,这就是获得了一个模板对象
有了模板就不能用json响应了,就需要http响应,先打印整个对象类型,再看看有什么方法
刷新一下
告诉你是这么一个类型,django后台的一个类型
html拿到之后要渲染,这里是假的渲染,把数据拿到后,把html凑出来,真的渲染丢给前端
刷新一次,现在就出来了
现在已经把index.html转成str了,要返回回去就要看看类型
刷新一下
text估计就是字符串
能不能把字符串转换二进制
现在就把html.encode,放到http响应试试
所谓的html模板,还是该response还是response,只不过正文来自字符串,字符串来自模板的渲染,模板的渲染相当于对html的模板loader进来,所谓的load只不过就是调用一下文件IO,将HTML读进来(用open方法把里面的东西拿到)要的时候,把里面的内容当字符串给你
现在想把网页做活,往里面添加东西,这里是html的语法。hr可以不必口,但是在react的时候,是JSX,xml的语法一定要有开口就有闭口,这里不是react,忘记react。
写个变量school
查看在render函数中提供了什么
有一个上下文,make_context上下文,要用这些内容,根据模板定义,将大字符串拼接而起来
现在就是缺一个上下文对象,变量名和值组织起来就只能使用字典。
如果这样成功,说明你用模板加载好html后,里面有很多空,现在准备填空,填空好后,整个str就准备好了,把str编码直接丢给response就ok了,所以所谓的模板技术就是在拼接字符串。给的空需要用名字找,名字多 了,要管理起来,就用字典
内容就有了
现在知道什么是模板了,就是写一个html在里面挖空,空号后,用上下文,字典来填,填好后生成respoonse,大字符串是正文部分,就response回去。
这个时候浏览器看到的已经是拼接好的字符串,这个MIME类型是html,就构建DOM树渲染出来
这样用起来太累
看看简单的方法,django有一些快捷的方式,render
看看render需要什么参数,request请求信息,template_name模板名,context上下文,response的状态码也可以替代
它连response都想替代
再次刷新
一样的效果
这个就是快捷方法,如果用模板用它就更合适 了,模板最重要的就是掏了什么空,你把空用什么填
request用不用其实无所谓
更多的时候是,把request处理生成后,生成一个上下文字典,凑到index模板当中去,然后形成一个大字符串,再response回去
做前后端分离,render就很少使用了
模板首先需要告诉路径,要写绝对路径,不然找不到,绝对路经要告诉从哪里开始,base_dir是项目跟目录,这就是一个模板搜索路径的修改
模板想要复用就放到app_dir(user)
下没放到其他项目里就可以直接用了
这个是上下文dict的key,其实是用这个key到上下文字典里去找
模板写好了,要使用,第一步就需要通过文件IO先加载
如果模板有空但是没数据,是否会报错
没有出下面任何错误
如果找不到不显示的数据,也就不给你显示而已,数据没了就没了
首先加载模板,渲染就是真正生成一个返回浏览器端的一个真正html的大字符串,将这些内容直接拿到即可。
第一步load,第二部凑上下文,然后渲染出来得到大字符串,该bytesbytes,该字符串字符串
提供了一个render方法,只需要把request,模板名给了,就去模板的搜索路径去找,找到之后就会用你的上下文,用字符串拼出来,然后发送出去
所谓的渲染的目的就是连加载带渲染,生成一个字符串,然后把字符串想办法返回回去,这个就是正文的内容。正文的内容就需要告诉response类型以及状态,这就是satrt_response里要写的内容,start_response在讲wsgi接口的时候,start_response要写什么,start_response要状态,mime文档类型
loader之后得到一个模板,然后再把模板变字符串,最后把内容返回回去
模板有django的自己的语言,DTL