本文共 5030 字,大约阅读时间需要 16 分钟。
模版用的还是比较多的,企业不可能全部做前后端分离,html标签和服务器端代码混写,应该把数据准备好,让模版做更少的操作。没必要过滤器来炫技,要什么数据准备什么数据即可,尽量少做操作
第一步先应该在settings里将模版的搜索目录填好 下面要把项目运行起来,让他能够做url映射,必须配置路由文件,一开始我们配的是blog下的,urls,全局的 每个请求应该单独调用对应的handler,不可能混用,每个请求送到函数里去,各自压自己的栈,互不影响。 现在准备对testlist进行遍历 需要奇偶行,模版做好后,就遍历里面的所有元素,将这个元素该打印打印,ul放在外面,迭代里面的li即可。forloop是行号 行号就不要加reverse了,往往都是从1开始 刷新一下F5 现在已经满足了对行号的要求,然后所有数据需要+100现在+100,需要过滤器来完成
为了避免问题,还是加上引号 要求奇偶颜色不同 现在奇偶的效果是出来了就一点不一样,试试使用三元表达式
就是yes or no的问题,其实就是说的三元表达式 能整除就是event,不能就是odd。先整除,后判断 现在有了这个基础,开始考虑颜色,这部分提取出来考虑颜色的问题 在模版渲染的时候不关心标签,只关心要替换的位置 所以是先用渲染函数,把我们的数据处理完,处理完之后拼接到字符串里填的空,只不过这个空是循环填,循环完了以后,字符串最后变成了一个url里面套很多li 服务器这端,玩的就是字符串替换,替换完生成的正文字符串,发回浏览器端,浏览器看到MIME类型是什么类型,如html就按照html解析,渲染,构造DOM树。 所有动态语言都这样,只要出现这种语法都会将这些内容在服务器端做替换,如果是循环就循环替换,替换完了,会生成一个文本。这个文本被http封装成http报文返回到浏览器端,由浏览器负责解释渲染 这一块是把它先替换,替换完了就变成大字符串里面,这个表达式最后通过管道,要么输出red,要么blue,把red拼到color:后面 现在就搞定了 这就是输出的结果 也可以通过奇偶行的样式不同来改变颜色 打印99乘法表需要用表格 日常方式输出,要么是上面的方式,要么是table,就这两种,一般企业不会用react,就用模版有了user之后,就要围绕user表做一些功能,方法加url结合在一起就是restful风格,前后端分离都需要,
需要两个东西,方法和url,查询字符串基本不用,如果要把数据推送上去就要采用post,注册的时候需要推送emil,用户名 ,密码 POST现在不采用传统的表单提交了,准备使用前端的ajax,做完前端依然会有界面,依然表单控件,提交数据但是不是用form表单的post了,会转换成json,用js转换成json,用json的方式,和后台进行交互B端会发送AJAX请求,用异步的方式提交请求,之前是用postman构造数据发送请求给server,server其实不关心你用的是浏览器还是不是浏览器,只关心发的请求对不对,postman是个工具浏览器
后端用postman这种工具浏览器来测试我们开发的功能 前端假定要访问谁,访问一个server但是没有开发好,就会有一个模拟的server,测试server ,ms,写好的数据返回给前端,这样前端后端各自开发各自的,完全分离 前端直接和MS进行通信,假数据拿到了,可以用react把数据填充起来 前后端分离,就要中间传无格式数据(格式就需要前端人员开发,纯粹html,+css+js写的框架,需要发起一个个url的http请求,请求到后端,由server去查数据回来,将数据直接返回给前端,前端只要把数据拿到,用nodejs填充到表格里就行) 先要是吧数据和模版混成一个大字符串返回给客户端的,这是两套开发方式现在要把耦合降到最低,就没有模版了,中间就需要定义json格式
restful是定义数据接口传输的风格,用的三种传输方式的第三种,第一种get,第二种post,第三种是url也带着信息。 url的信息+方法,组合起来就是restful风格 项目管理上建议每个项目都形成一个接口文档,不管是不是敏捷开发整个过程采用异步的过程,浏览器用ajax发送异步的请求,然后提交json数据,处理完之后,返回json数据过去,整个过程中间,数据不带格式
SPA是单页面,一套模版可以弄完,只不过一套模版有单调,模版需要在前端做,不需要再后端做,前后端分离就不需要在后端做了接口已经设计好了,注册调用跟下d /user/reg,采用POST方式,提交JSON格式。现在restful风格必须定义这种格式,传的什么url,什么方式,什么参数,没个参数什么意思,都要规定下来
现在restful风格必须定义这种格式,传的什么url,什么方式,什么参数,没个参数什么意思,都要规定下来现在做路由配置,用render就需要模版,但是这里不要render,这里采用前后端分离,就不需要提供模版
就找django和http相关的,纯json即可 现在只是做了view 如何访问,还需要配置urls,定义好views视图,如果让用户看到还需要配置url路由 现在返回的response就是json,10个字符长度 但是这个urls是全局的,如果有100多个路由,那么这个url里的partterns就会有很多,就不太好 在应用user里,创建一个urls.py 之前settings配置的入口是blog.urls,这样就不认识应用下的urls了 实际上可以用include 配置文件里有include 试试现在映射关系写 应该写include 但是include不是这么用的 这里的意思是只要是user/开头的,都扔到user.urls里来 到user下的urls里,要求是以reg开头reg结尾,跟reg函数映射 路由配置的几项 只要匹配到user/开头的,都传给user.urls user下的urls配置的是reg开头和结尾的,就跟reg函数映射起来,每次匹配进去,就把匹配到的剥掉了,只匹配剩余部分,这样就建立器一种多级的匹配。 现在就发现blog.urls下的文件是每个业务入口的匹配,每个业务的匹配应该交给每个业务的urls映射文件 试试这样能否使用 改一下views 这里就发生了变化,说明路径配置正确用url来做模式匹配,当模式符合的时候可以跟函数,可以跟函数下的方法,我们自己也可以用include(包名.模块名),urls.py是模块,
user开头的,一旦匹配到,就把匹配的部分去掉了,剩下的跟这个指向的模块对应起来 相当于选中这部分已经去掉了 下面剩下匹配的就只有reg了,符合条件就可以调用reg函数了 必须写urlpatterns 选中部分必须写映射的列表 url来自哪里就来自哪里 与什么函数建立关系 两种方式,要么在这里建立映射,要么使用刚才的多级关系,开发中更常用多级的方式,否则全局的urls太多内容,每个应用都应该建立自己的urls映射关系include写的应用就是包,项目根目录哪些user就是包
url函数,如果第二个不是可调用对象 如果不是可调用对象,可以是元组,可以是列表,include函数会返回一个三元组 所以url第二个参数里做了很多事情,做了很多判断 重要的是,不管接收什么参数,会将已经匹配到的部分摘除,送到下一级进行匹配 下面开始要解决视图的问题,现在reg函数要更加完善,要完成注册,提交数据完成解析,检查数据是否错误,最后将数据存储到数据库,告诉用户注册成功 在postman里去做,用json的方式完成提交数据 数据发送过去又posts了,还是应该先把settings里的中间件关掉,提交上来后,再解决跨站欺骗问题CSRF 要在请求body部分传输数据,用row的方式是最原始的。然后再选择json的方式就可以 现在就需要解决业务问题reg,现在打印出来空的信息 post是表单提交的方式,现在已经不玩这种方式了,现在是json,试试是不是is_ajax 再发送下数据 false,代表不用ajax方式,因为不是按这个方式提交的 这里第一个是来定位的,在页面里定位,就会定位到哪个py文件 看看request里有什么,选择点击定位 看看这里提供哪些方法,这里面是能够看到的方法,好像看不到跟头head相关的,有些就需要区基类看看 这里的body是一个属性,有read方法说明跟socket相关,从数据里读取出来 get和post拿到的内容塞到了里面去了,meat,path,method,最重要的几个都在了,meta就是header 一个request请求体里是会有body的,看一下这个body 拿到了一个bytes 这些信息通过客户端http协议发到了服务器端,服务器端通过映射映射到了函数中,在函数中拿到了最原始的header,body,然后将head和body通过wsgi的server替我们封装成了environ,将给了application,application就是django,django就是框架,将application得到的environ,重新封装到request对象中,这个request对象的类型是httprequest 安装一个simple json,json格式比较复杂就用simple json 现在拿到了数据,准备用simplejson,loads(request.body)打印一下body里的东西
可以它发什么返回什么 是一个字典,有了字典下面就可以使用了 注册环节相当于insert,要把数据添加到数据库中,就要用到orm的语法,payload如果拿到的是空字典也会出错,所以用try,不能把错误raise出去,给客户端,因为raise了相当于当前线程崩溃了 应该return一个response对象,在http里看一下 http里有一大堆东西,notfound 404 父类是response 再看一下这个404 这是异常 父类response response继承base。 base继承这个 继承自object,所以不是异常 不能用404,现在就用badrequest告诉请求是错误的 但是这么做是错的,这里不能使用raise,异常是要基于baseexception来的,这个现在不是从那里来的,404特殊是基于异常的 应该这么写 所有的东西打印一下看看,(用get就不会报错,中括号拿不到就会报错) 打印的是邮箱地址和用户名和密码 类似ORM工具,导入我们写的user类 在save的时候会做一次提交,可以打印一下问题 给用户看的要答非所问,不要暴露内部 raise直接往外抛,下面就可以捕获到,不用写两次 首先提取出body,约定好用json,如果拿不出来json就报错,特别用中括号,中括号拿不到就会出错 拿到这三项,填充对象, 填充好后调用save方法,如果提交成功就会自动commit 也可以这里抛出任何异常都归它管 这个return写哪里都可以 sqlalchemy的时候,当我们insert成功,会立即select将这个对象的ID填充好,内部肯定有维护状态,不然怎么知道提交成功与否,所有的orm都是这个样子 返回1 成功了 从这个简单例子,提取了非表单post提交的数据,能用的无非就是get,post,body,如果在url中有查询字符串,依然去get里找,在body里的,就去requestpost里去找 找到这个数据发现是个字符串,但这个字符串实际上是bytes,现在要用一个json的序列化库,这次用的是simplejson,会把这个bytes的json转换成一个字典,用这个字典提取数据插入到准备好的modle类构造的实例中,最后调用model类实例 的save方法,一旦提交会生成一个id 返回的错误要含糊,比如登录失败,一般告诉用户名或者密码错误转载地址:http://gazgn.baihongyu.com/