python-web学习笔记

python学习笔记

由于WSGI的通用性,出现了独立的WSGI程序,例如uWSGI和Apache的mod_wsgi

虽然WSGI的设计目标是连接标准的Web服务器(Nginx、Apache等)与服务器端程序,但WSGI Server本身也可以作为Web服务器运行。由于性能方面的原因,该服务器一般只做测试使用,不能用于正式运行。

应该把应用模块或包的名字传给Flask构造函数的第1个参数,Flask在运行过程中将使用这个参数作为定位模板和其他静态文件的基础。

直接运行本模块时,__name__的值为__main__;通过其他模块调用本模块时,__name__的值为本模块的名称。

app.run()将一直运行,不要在它后面写任何代码。

模板文件必须被保存在网站的/templates目录中。

向render_template传入的参数,不仅可以是单纯的字符串,还可以包含HTML特殊字符(比如<、>、空格、/等),如果这些字符仅应该被解释成字符串,则应该通过Markup()函数将这些字符串做转义处理,然后传给render_template()函数

重定向:Flask的redirect()函数

中止一个请求并返回错误,而不是重定向到其他地址,则可以使用abort()函数

本例中用Flask的errorhandler装饰器添加了自定义的错误处理器。当程序中返回400错误时,系统会执行bad_request()函数。在该函数中向客户端返回400错误的同时,还传送了自定义的错误页面bad_request.html。

有“/”作为结尾的路径样式除了可以接受对其本身的访问,还可以接受相同路径前缀但不带“/”结尾的路径访问;而不带“/”结尾的路径样式则没有此效果。

可以在函数中通过request.method属性获得本次HTTP请求的访问方式。request是Flask框架的一个全局对象

通过函数名称获得与其绑定的URL地址。Flask通过url_for()函数实现了这个功能

Flask中test_request_context()方法用于告诉解释器在其作用域中的代码模拟一个HTTP请求上下文,使其好像被一个HTTP请求所调用。HTTP请求上下文是调用url_for()函数所必需的环境。
——————
会话上下文(Session Context)是Web服务器上基于Cookie的对象,它提供了为同一个客户端在多次请求之间共享信息的方式。
应用全局对象(Application Global)提供了在一次请求的多个处理函数中共享信息的方式。
请求上下文(Request Context)是Web服务器管理单次用户请求的环境对象,用于处理客户端向Web服务器发送的数据。
————
由于应用了装饰器teardown_request(),因此teardown_db()函数在请求结束时自动被 Flask 框架调用

· form:获取HTML表单提交的数据,HTML表单通过POST或PUT请求从客户端向服务器端发送。
· args:访问URL中的查询参数。
 values:是form和args的结合,
data:当以Flask未知的MIMETYPE类型提交数据时,data属性用于以字符串形式保存所提交的数据。
· files:访问通过HTTP POST或PUT请求向服务器上传的文件信息。

。一个Flask应用可以定义多个before_request()接入点,每个接入点在请求处理之前会依次被调用

一旦在一个before_request()中返回Response,则Flask会停止该次请求的调用链
与after_request()不同的是,after_request()在其之前的处理函数发生未捕获异常时就不会被调用;而teardown_request()即使在之前的处理函数中发生异常时也会被Flask框架调用。因此,teardown_request()也可以被用来做异常处理

多个过滤器可以链式调用,前一个过滤器的输出会被作为后一个过滤器的输入

过滤器通过管道符号“|”与变量连接,并且可以通过圆括号传递参数。

过滤器中的第1个参数是被转换的变量,其后的参数需要以圆括号的形式传递给过滤器

要测试一个变量或表达式,则需要在变量后加上一个is及测试的名
Jinja2用if语句来实现判断逻辑。

extends标签必须是子模板中的第1个标签

不能在同一个模板中定义多个同名的{% block %}标签。

每个函数中都通过with语句启用上下文函数session_scope(),通过它获取到session对象,并自动开启新事务

查询条件由filter设置,多个查询条件可以用or_或and_连接。
————
SQLAlchemy这样的ORM数据库操作方式可以对业务开发者屏蔽不同数据库之间的差异
————

模糊查询like只适用于查询字符串类型,不适用于数值类型

在查询语句中可以使用join关键字进行连接查询,
如果需要用除外键外的其他字段作为连接条件,则需要开发者在join中自行设置。

定义了班级表Class(父表)和学生表Student(子表)。一对多的关系由父表中的relationship属性students进行定义

Form类的最主要功能是通过其所包含的Filed类提供对表单内数据的快捷访问方式。

每个Field类型对应一种HTML input标签控件
———
———
Tornado常被用作大型站点的接口服务框架,

HTTPClient是Tornado的同步访问HTTP客户端

AsyncHTTPClient是Tornado的异步访问HTTP客户端。

协程是Torando中进行异步I/O代码开发的方法

迭代器与普通Python对象在使用上的区别是,可以对Iterator调用next()函数以获得一个元素

定义一个Iterable类一般可以通过为其实现__iter__()和__next__()两个成员方法来完成

调用任何定义中包含yield关键字的函数都不会执行该函数,而会获得一个对应该函数的生成器。

IOLoop的spawn_callback()函数没有为开发者提供获取协程函数调用返回值的方法,所以只能用spawn_callback()调用没有返回值的协程函数。

在协程中直接调用阻塞函数会影响协程本身的性能,所以Tornado提供了在协程中利用线程池调度阻塞函数,从而不影响协程本身继续执行的方法

prepare()方法用于调用请求处理(get、post等)方法之前的初始化处理。而on_finish()用于请求处理结束后的一些清理工作。

在一般情况下用get_argument/get_arguments即可。因为它们是get_query_argument/get_query_arguments和get_body_argument/get_body_arguments的合集

与set_header不同的是,add_header配置的Header值将不会覆盖之前配置的Header

在同步或协程访问处理的函数中,无须调用finish()函数

使用@tornado.web.asynchronous修饰器,将默认的同步机制改为异步机制。

使用@tornado.gen.coroutine修饰器,将默认的同步机制改为协程机制。

Tornado使用bytes类型保存cookie值,因此在用get_secure_cookie()读取cookie后需要用decode()函数将其转换为string类型再使用

防止跨站请求伪造:Tornado应用可以通过一个Cookie头和一个隐藏的HTML表单元素向页面提供令牌。这样,当一个合法页面的表单被提交时,它将包括表单值和已存储的Cookie。如果两者匹配,则Tornado应用认定请求有效。

WebSocket正是在HTTP客户端与服务器之间建立持久连接的HTML 5标准技术。

所有Tornado线程中必须有一个event_loop,该项要求通过sendTime()函数中的第一行代码被满足

在运营环境中不要开启debug模式,这样会增加网站被攻击的危险。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqxzcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值