对citrus的理解

一、请求发生时代码的逻辑如下:

1、http://localhost:8081/foo/dbins?name=hello

第一步:运行citrus.py 的 route 函数

上述请求发生时,根据flask路由代码: @app.route(‘/<controller>/<action>‘, methods = [‘GET‘, ‘POST‘]),路由注册了get与post方法,地址带有两个动态参数 controller与action,根据视图函数route(controller, action),此时的controller是foo,action是dbins,请求被分发到controller.foo的doins方法,并返回(调用)此函数。

第二步:运行 dbins方法:

(1)调用_ctl_ module中的parse_request函数,其中关键字参数get为列表[‘name‘];

(2)因为此时parse_request函数 中post默认为none,则parse_request函数以元组形式返回链接中的“name”的值“hello”;

(3)将上一步的结果“hello”作为参数,调用model文件中的foo函数;foo函数主要创建类(含id与name属性),并将传递过来的“hello”参数赋值给对象的name属性;

(4)调用citrus的db对象,将上一步实例化的对象添加并提交到数据库中,同时返回“new foo id: (该对象的id值)。

2、parse_request方法的理解:

(1)该方法含有get、post参数,默认值皆为none;

(2)定义处理异常的try;

(3)定义一个空的列表ret;

(4)将请求的form内容以CombinedMultiDict形式赋值给form,将请求链接的参数CombinedMultiDict形赋值给args;

(5)如果post为真(即非空或非0),将form的所有值(表单值)添加到ret列表;

(6) 如果get为真(即非空或非0),将链接中参数的所有值添加到ret列表;

(7)以tuple形式返回ret;

(8)如有异常,则raise/抛出自定义的异常CitrusException,errcode为module _err_ 的INVALID_REQUEST_ARGS,值1001。

3、POST http://localhost:8081/foo/postget?args1=a1&args2=a2

Content-type:application/x-www-form-urlencoded

POST_BODY:

form1=f1&form2=f2

(1)链接基本与第1点类似,请求被分发到controller.foo的postget方法,并返回(调用)此函数。

(2)调用parse_request方法 ,其中post = [‘form1‘, ‘form2‘],get=[‘args1‘, ‘args2‘],获取‘form1‘, ‘form2‘,‘args1‘, ‘args2‘对应的值,返回并赋值给form1, form2, args1, args2;如参数不够或多余,则抛出异常:std err: 1001。

(3)返回 form1, form2, args1, args2。

二、cookie和session理解:

1、cookie 主要是用于用户识别及状态管理,当客服端将用户ID和密码等相关信息发送给服务器的时候,服务器返还给客户端的不仅是所请求的信息,还有一个包含Session ID、日期及时间的cookie,并将其保存在用户的硬盘上,其生命周期为cookie上载明的过期时间或浏览器会话结束(如无载明过期时间)。session 主要是将用户的请求信息放在服务器端来保存,服务器将Session ID返还的同时,也将用户的认证状态与Session ID绑定在服务器端。

2、客户端再次访问服务器的时候,会自动发送含Session ID在内的的cookie,服务器可通过验证接收到的Session ID识别用户和其认证状态,这样可以不必客户端每次都输入用户信息。

3、由于cookie可以被人为禁止,可使用将session id 直接附加在 URL 路径的后面的URL重写技术将Session ID发送给服务器。

时间: 2024-12-18 17:27:59

对citrus的理解的相关文章

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

2.2 logistic回归损失函数(非常重要,深入理解)

上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的,希望通过训练集找到参数w和b,来得到自己得输出 对训练集当中的值进行预测,将他写成y^(I)我们希望他会接近于训练集当中的y^(i)的数值 现在来看一下损失函数或者叫做误差函数 他们可以用来衡量算法的运行情况 可以定义损失函数为y^和y的差,或者他们差的平方的一半,结果表明你可能这样做,但是实际当中

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

深度理解div+css布局嵌套盒子

1. 网页布局概述 网页布局的概念是把即将出现在网页中的所有元素进行定位,而CSS网页排版技术有别于传统的网页排版方法,它将页面首先在整体上使用<div>标记进行分块,然后对每个快进行CSS定位以及设置显示效果,最后在每个块中添加相应的内容.利用CSS排版方法更容易地控制页面每个元素的效果,更新也更容易,甚至页面的拓扑结构也可以通过修改相应的CSS属性来重新定位.  2. 盒子模型 盒子模型是CSS控制页面元素的一个重要概念,只有掌握了盒子模型,才能让CSS很好地控制页面上每一个元素,达到我们

深入理解Java:类加载机制及反射

一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能. 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 2.工作机制 类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示

八幅漫画理解使用 JSON Web Token 设计单点登录系统

原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统,然后再延伸到单点登录系统. 如果还没有阅读<JSON Web Token – 在Web应用间安全地传递信息>,我强烈建议你花十分钟阅读它,理解JWT的生成过程和原理. 用户认证八步走 所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时

谈谈你对Hibernate的理解

答: 1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象.建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就表现在内存中的对象状态发生了变化. 2.为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大量对象信息.从Java程序的运行功能上来讲,保存对

IOS contentOffset该如何理解

contentOffset是哪个点??? 首先从字面理解:内容偏移 我可是查了词典的!!! 对于contentOffset有的时候我们会产生错误理解. 我不想在这里介绍错误的理解避免不必要的混淆. 我们什么时候会遇到contentOffset??? 更多的时候是在滚动试图中,我们可以通过它结合代理实现一些方法. 比如轮播(我会在下一篇介绍轮播的实现原理至于代码如果需要我可整理出来) 那么请让我通过图片演示来解释contentOffset. (一) 图一中绿色为屏幕也就是最大的显示范围也是滚动视图