06 2017 档案
摘要:一.简介 模版是纯文本文件。它可以产生任何基于文本的的格式(HTML,XML,CSV等等)。 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。 1.变量 2.过滤器 可以通过使用 过滤器来改变变量的显示 格式: 过滤器参数; default length 返回值的长度。它对字符串和列表
阅读全文
摘要:自定义验证逻辑 检查变更字段 Django用has_changed()来判断用户是否修改过数据
阅读全文
摘要:结果 模板 默认管理员站点文件在Django/contrib/admin/templates/admin 可以继承其中任意文件,来管理定制自己的管理站点 1、定义子模板文件路径 2、修改项目settings.py 3、开发子模板文件 站点 1、app/admin.py 定义AdminSite子类 2
阅读全文
摘要:URL映射 1、分布式url映射 include()函数提供分布式url映射功能,使URL映射可以被编写在多个url.py文件中 2、反向解析 反向解析在模版中调用方法:在模版文件中用{%url%}标签反向解析 python中用django.core.urlresolvers.reverse()函数
阅读全文
摘要:基本操作 1、meta类属性汇总 字段名称限制: 一个字段名不能包含连续的一个以上的下划线,因为那是Django查询语句的语法。 2、字段列表纵览表 字段名 参数 意义 AutoField 一个能够根据可用ID自增的 IntegerField BooleanField 一个真/假(true/fals
阅读全文
摘要:建立django目录,为了独立区分app和主站的关系,需要把app完全和主站分离 app/views.py app/urls.py管理app中的url映射 django/urls.py app.models.py 建立模型 定义表单类app/form.py 创建模版文件app/templates/m
阅读全文
摘要:1、安装python的SSL插件pyOpenSSL pip install pyopenssl 2、安装OpenSSL工具包 sudo apt-get install openssl sudo apt-get install libssl-dev OpenSSL命令:/usr/bin/openssl
阅读全文
摘要:Twisted 提供主线程和辅线程,主线程只有1个,即reactor.run(),辅线程有多个,可以自由配置 Twisted 大多数代码运行在主线程中,dataReceived(),connectionLose()等事件处理函数由主线程调用,如果耗时太长,可以将其移到辅助线程中处理 同时,Twist
阅读全文
摘要:延迟(defer)是twisted框架中实现异步的编程体系,使程序设计可以采用事件驱动的机制 1、基本使用 defer可以看作一个管理回调函数的对象,可以向该对象添加需要的回调函数同时也可以指定该组函数何时被调用 注:一个defer对象在添加完成回调函数过程后,只能由callback或者errbac
阅读全文
摘要:实战演练1:普通UDP UDP是一种无连接对等通信协议,没有服务器和客户端概念,通信的任何一方均可通过通信原语直接和其他方通信 1、相对于TCP,UDP编程只需定义DatagramProtocol子类 无需定义Factory;完全基于twisted的方案 2、适配普通的socket对象的UDP编程
阅读全文
摘要:twisted 提供更多传输层 udp,tcp,tls及应用层HTTP,FTP等协议的支持,在开发方法上更提供了丰富的特性来支持异步编程 安装twisted 建议使用anaconda 安装,conda install twisted, Windows 安装需要先安装两个支持库,zope inteef
阅读全文
摘要:模板 修改index.py readdb.py 添加select_columns 方法 修改index.html文件 要求用户正确登录之后,跳转到另外一个页面,并且在那个页面中显示出用户的完整信息。 先修改 url.py 文件,在其中增加一些内容 然后就建立 handlers/user.py 文件
阅读全文
摘要:连接数据库 methods 中建立一个文件 db.py 分别建立起连接对象和游标对象 用户登录 进入到 templates 文件,建立名为 index.html 的文件: 其中<meta name="viewport" content="width=device-width, initial-sca
阅读全文
摘要:应用场景 WebSocket 的特点如下 适合服务器主动推送的场景(好友上线,即时聊天信息,火灾警告,股票涨停等) 相对于Ajax和Long poll等轮询技术,它更高效,不耗费网络带宽和计算资源 它仍然与HTTP完成网络通信 不受企业防火墙拦截 通信原理 客户端发起的 WebSocket 连接报文
阅读全文
摘要:1、安全cookie机制 为了防止客户端篡改,随意解析cookie的键值 2、用户身份认证 tornado和flask一样,在requestHandler中current_user保存当前请求用户名,但默认值时空,需要用requestHandler.get_current_user属性设置该属性 防
阅读全文
摘要:同步异步I/O客户端 协程 1、编写协程函数 2、调用协程函数 由于Tornado协程基于python的yield关键字实现,所以不能调用普通函数一样调用协程函数 协程函数可通过以下三种方式调用 在本身是协程的函数内通过yield关键字调用 在IOLoop尚未启动时,通过IOLoop的run_syn
阅读全文
摘要:解释下,”gevent.spawn()”方法会创建一个新的greenlet协程对象,并运行它。”gevent.joinall()”方法会等待所有传入的greenlet协程运行结束后再退出,这个方法可以接受一个”timeout”参数来设置超时时间,单位是秒。运行上面的程序,执行顺序如下: 所以,程序运
阅读全文
摘要:这里创建了两个greenlet协程对象,gr1和gr2,分别对应于函数test1()和test2()。使用greenlet对象的switch()方法,即可以切换协程。上例中,我们先调用”gr1.switch()”,函数test1()被执行,然后打印出”12″;接着由于”gr2.switch()”被调
阅读全文
摘要:有时候你想在一台服务器上为不同的域名运行不同的站点。比如www.siteA.com作为博客,www.siteB.com作为论坛。你可以把两个域名的IP都解析到你的服务器上,但是没法在Nginx的根目录里同时运行两个不同的网站。这时候,你就需要使用虚拟目录了。假设你把博客放在”/home/user/w
阅读全文
摘要:参考:http://zmrenwu.com/post/20/ uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能。它支持WSGI协议,同时它也支持自有的uWSGI协议,该协议据说性能非常高,而且内存占用率低,为mod_wsgi的一半左右,我没有实测过。它还支持多应用的
阅读全文
摘要:我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用。 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装。在Ubuntu或Debian环境中,你可以使用apt-get命令来安装: 不过我们建议采用编译安装
阅读全文
摘要:作为Python标准的打包及分发工具,setuptools可以说相当地简单易用。它会随着Python一起安装在你的机器上。你只需写一个简短的setup.py安装文件,就可以将你的Python应用打包 首先,如果你需要另外安装setuptools,你可以使用下面的命令: wget http://pea
阅读全文
摘要:参考文章:http://zmrenwu.com/post/21/ Fabric是一个Python的库,它提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化、流水化地执行Shell命令。因此它非常适合用来做应用的远程部署及系统维护。其上手也极其简单,你需要的只是懂得基本的Shell命令。
阅读全文
摘要:创建一个为视图访问加日志的扩展Flask-Logging,并从中了解到写Flask扩展的规范。 创建工程 先创建一个工程,目录结构如下: 根据Flask扩展命名规范,扩展名必须为”Flask-Logging”形式,以”Flask-“为前缀,后面的单词首字母大写。扩展的代码必须放在名为”flask_l
阅读全文
摘要:Restful API不保存状态,无法依赖Cookie及Session来保存用户信息,自然也无法使用Flask-Login扩展来实现用户认证。所以这里,我们就要介绍另一个扩展,Flask-HTTPAuth。 pip install flask-httpauth 接下来创建扩展对象实例: 注意,初始化
阅读全文
摘要:pip install flask-login 接下来创建扩展对象实例: 同时,你可以对LoginManager对象赋上配置参数: 编写用户类 使用Flask-Login之前,你需要先定义用户类,该类必须实现以下三个属性和一个方法: 属性 is_authenticated 当用户登录成功后,该属性为
阅读全文
摘要:pip install flask-wtf 一个简单的表单 表单类MyForm定义个了一个字符型字段,也就是一个文字输入框”user”。StringField的第一个参数”Username”指定了该字段的显示名,第二个参数指定了验证规则。这是一个列表,也就是你可以对一个字段定义多个验证规则,上例中我
阅读全文
摘要:pip install flask-babel 先初始化一个Flask-Babel的实例 设置语言和时区 Flask-Babel提供了两个Flask应用配置项: BABEL_DEFAULT_LOCALE: 应用默认语言,不设置的话即为”en” BABEL_DEFAULT_TIMEZONE: 应用默认
阅读全文
摘要:如果同一个请求会被多次调用,每次调用都会消耗很多资源,并且每次返回的内容都相同,就该使用缓存了 自定义缓存装饰器 在使用Flask-Cache扩展实现缓存功能之前,我们先来自己写个视图缓存装饰器,方便我们来理解视图缓存的实现。首先,我们要有一个缓存,Werkzeug框架中的提供了一个简单的缓存对象S
阅读全文
摘要:安装 pip install Flask-PyMongo 初始化Pymongo实例 在应用配置中,我们指定了MongoDB的服务器地址,端口,数据库名,用户名和密码。对于上面的配置,我们也可以简化为: 在同一应用中,我们还可以初始化两个以上的Flask-PyMongo实例,分别基于不同的配置项: 当
阅读全文
摘要:安装 pip install flask-mail 配置参数 批量发送 这样应用同邮件服务器的连接”mail.connect()”会一直保持到所有邮件发送完毕,也就是退出with语句后再关闭,避免多次创建关闭连接的开销。批量发送邮件个数上限由配置项”MAIL_MAX_EMAILS”决定。 邮件带附件
阅读全文
摘要:import requests from bs4 import BeautifulSoup import pymongo from multiprocessing.dummy import Pool as ThreadPool headers = {'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) Apple...
阅读全文
摘要:Flask路由可以指定HTTP请求方法,并在请求函数中根据不同的请求方法,执行不同的逻辑。这样实现一个Restful的请求已经相当简单了 Flask还有更简便的方法,就是其Flask-RESTful扩展。首先,我们来安装这个扩展: 安装完后,你就可以在代码中导入该扩展包 这个例子很容易理解,Rest
阅读全文
摘要:测试是每个应用系统发布前必须经历的步骤,自动化测试对测试效率的提高也是毋庸置疑的。对于Flask应用来说,当然可以使用Web自动化测试工具,比如Selenium等来测。Flask官方推荐的自动化测试方法是一种白盒测试,它依赖于Werkzeug的Client对象来模拟客户端。使用这个方法的好处是你不需
阅读全文
摘要:到目前为止,启动Flask应用都是通过”app.run()”方法,在开发环境中,这样固然可行,不过到了生产环境上,势必需要采用一个健壮的,功能强大的Web应用服务器来处理各种复杂情形。同时,由于开发过程中,应用变化频繁,手动将每次改动部署到生产环境上很是繁琐,最好有一个自动化的工具来简化持续集成的工
阅读全文
摘要:一个好的应用目录结构可以方便代码的管理和维护,一个好的应用管理维护方式也可以强化程序的可扩展性 应用目录结构 假定我们的应用主目录是”flask-demo”,首先我们建议每个应用都放在一个独立的包下,假设包名是”myapp”。所以,整个应用的目录结构如下: 应用的创建代码放在”myapp/__ini
阅读全文
摘要:蓝图使用起来就像应用当中的子应用一样,可以有自己的模板,静态目录,有自己的视图函数和URL规则,蓝图之间互相不影响。但是它们又属于应用中,可以共享应用的配置。对于大型应用来说,我们可以通过添加蓝图来扩展应用功能,而不至于影响原来的程序。不过有一点要注意,目前Flask蓝图的注册是静态的,不支持可插拔
阅读全文
摘要:当我们要往客户端发送大量的数据比较好的方式是使用流,通过流的方式来将响应内容发送给客户端,实现文件的上传功能,以及如何获取上传后的文件。 响应流的生成 Flask响应流的实现原理就是通过Python的生成器,也就是大家所熟知的yield的表达式,将yield的内容直接发送到客户端。下面就是一个简单的
阅读全文
摘要:web服务器的工作过程 案例 tornado.httpserver:这个模块就是用来解决 web 服务器的 http 协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado 的非阻塞、单线程的特点在这个模块中体现。 tornado.ioloop:这个也非常重要,能够实现非阻塞 s
阅读全文
摘要:信号(Signal)就是两个独立的模块用来传递消息的方式,它有一个消息的发送者Sender,还有一个消息的订阅者Subscriber。信号的存在使得模块之间可以摆脱互相调用的模式,也就是解耦合。发送者无需知道谁会接收消息,接收者也可自由选择订阅何种消息 Flask的信号功能是基于Python消息分发
阅读全文
摘要:写个验证用户登录的装饰器:在调用函数前,先检查session里有没有用户 需将此装饰器加在每个需要验证登录的请求方法上即可 URL集中映射 Flask也支持像Django一样,把URL路由规则统一管理,而不是写在视图函数上 我们先来写个视图函数,将它放在一个”views.py”文件中: 然后在Fla
阅读全文
摘要:内置全局函数 dict()函数,方便生成字典型变量 joiner()函数,神奇的辅助函数。它可以初始化为一个分隔符,然后第一次调用时返回空字符串,以后再调用则返回分隔符。对分隔循环中的内容很有帮助 cycler()函数,在给定的序列中轮循,列表项<li>的”class”在”odd”和”even”两个
阅读全文
摘要:安装MongoDB 启动数据库:安装完成指定数据库存放路径 mongod.exe --dbpath c:\data\db进入目录后运行mongo.exe 成功 创建数据库 db 指向了数据库 mydb,books 是这个数据库里面的一个集合(类似 mysql 里面的表),向集合 books 里面插入
阅读全文
摘要:会话session ,允许你在不同请求 之间储存信息。这个对象相当于用密钥签名加密的 cookie ,即用户可以查看你的 cookie ,但是如果没有密钥就无法修改它。 这里用到的 escape() 是用来转义的。如果不使用模板引擎就可以像上例 一样使用这个函数来转义。 利用系统生成一个好的密匙 基
阅读全文
摘要:upload.html show.html 文件上传 HTML 表单中设置 enctype="multipart/form-data" 属性,已上传的文件被储存在内存或文件系统的临时位置。你可以通过请求对象 files 属性来访问上传的文件。每个上传的文件都储存在这个 字典型属性中。这个属性基本和标
阅读全文
摘要:pip install pika 使用API操作RabbitMQ 基于Queue实现生产者消费者模型 View Code 对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Server实现的消息队列。 #!/usr/bin/env python import pika # ######################### 生...
阅读全文
摘要:启动Memcached memcached -d -m 10 -u root -l 10.211.55.4 -p 12000 -c 256 -P /tmp/memcached.pid 参数说明: -d 是启动一个守护进程 -m 是分配给Memcache使用的内存数量,单位是MB -u 是运行Memcache的用户 -l 是监听的服务器IP地址 ...
阅读全文
摘要:SQLAlchemy python链接 步骤一: 使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。 事务操作 步骤二: 使用 Schema Type/SQL
阅读全文
摘要:http://cuiqingcai.com/4020.html
阅读全文
摘要:第一章 1、编写functional_tests.py 2、运行Django,再运行functional_tests.py,测试成功 第二章 functional_tests.py 用unittest 扩展功能测试 第三章
阅读全文
摘要:回调接入点-页面缓存逻辑 使用过滤器 字符串过滤器 数值操作 列表操作 字典列表操作 Flask内置过滤器 Flask提供了一个内置过滤器”tojson”,它的作用是将变量输出为JSON字符串。这个在配合Javascript使用时非常有用。我们延用上节字典列表操作中定义的”users”变量 <scr
阅读全文
摘要:在模板渲染中,使用Markup转换变量中的特殊字符 from flask import Markup Markup函数对字符串进行转移处理再传递给render_template()函数 在浏览器中显示标签代码 路由地址的反响生成 通过函数名获得与其绑定的Url地址 需要使用url_for函数进行反向
阅读全文
摘要:部署流程 manage.py 部署命令 每次安装升级只需运行deploy命令即可完成操作 把生产环境中的错误写入日志 config.py 程序出错时发送电子邮件 运行生产服务器 pip install gunicorn gunicorn manage:app 使用gunicorn运行程序 添加依赖需
阅读全文
摘要:记录影响性能的数据库查询 app/main/views.py config.py 启用缓慢查询记录功能的配置 分析源码 manage.py 在请求分析器的监视下运行 使用python manage.py profile 启动程序,终端会显示每条请求的分析数据,其中包含了25个运行最慢的25个函数 -
阅读全文
摘要:获取代码覆盖报告 安装代码覆盖工具 pip install coverage manage.py 覆盖检测 Flask测试客户端 测试web程序 tests/test_client.py 使用Flask测试客户端编写的测试框架 config.py 在测试配置中禁用CSRF保护 测试web api服务
阅读全文
摘要:import requests from bs4 import BeautifulSoup import pandas as pd import gevent from gevent import monkey;monkey.patch_all() import time import re import random UA_list = [ 'Mozilla/5.0 (Windows NT ...
阅读全文
摘要:最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。 REST的六个特性: RESTful web service的样子 REST架构就是为了HTTP协议设计的。RESTful web services的核心概念是管理资源。资
阅读全文
摘要:评论在数据库中的表示 由于评论和2个模型有关系,分别是谁发了评论,以及评论了哪个文章,所以这次要更新数据库模型 models.py 创建用户评论数据库模型 User和Post里面也要和Comment设置相应的关系 提交和显示评论 main/forms.py 创建评论输入表单 为支持评论更新路由pos
阅读全文
摘要:数据库关系 1.1多对多关系 添加第三张表(关联表),多对多关系可以分解成原表和关联表之间的两个一对多的关系 多对多仍然使用db.relationship()方法定义,但是secondary参数必须设定为关联表,多对多关系可以在任何一个表中定义,backref参数会处理好关系的另一侧 1.2 自引用
阅读全文