web.py学习心得
1、注意判断数字时,如果是get传递的参数,一定要用int转换。不然出错。
2、$var 定义时,冒号后的内容不是python内容,需加上$符号。如$var naviId:$naviId。
3、各个模板中的变量,要对应一致。在用base布局时,整个模板内容为layout模板的content,模板内定义的变量x(模板变量),在layout模板内用content.x 引用。
4、模板编码要统一,有一次新建文件时,忘记改编码了,缺省值没设。。。报错:list index out of range,统一改为utf-8后正常。
5、模板render渲染支持文件夹子目录。如"/templates/aaa/bbb.html",return render.aaa.bbb()
出现“Render instance has no __call__ method”错误信息时,查看模板文件夹与文件是否有重名。
6、使用apache运行web.py:
1)、导入模块出现问题,提示ImportError: No module named model(在apache的/logs/error.log查看),路径有问题,在import web 模块的前面加上如下语句
import sys, os
abspath = os.path.dirname(__file__)
sys.path.append(abspath)
os.chdir(abspath)
2)、httpd.conf 配置如下:apache访问css js ,需配置虚拟路径和根路径。将配置文件改为
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / "D:/pythonTest/web/code.py/" 根目录 Alias /static "D:/pythonTest/web/static/" #设置静态路径
AddType text/html .py 修改DocumentRoot "d:/pythonTest/web11"与<Directory "d:/pythonTest/web11"> 虚拟主机配置(同个IP,多个端口)
1、将监听端口增加
Listen 80
Listen 8080
2、 在末尾加上:
LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so
<VirtualHost 127.0.0.1:80>
DocumentRoot "d:/pythonTest/www"
WSGIScriptAlias / "d:/pythonTest/www/code.py"
Alias /static "d:/pythonTest/www/static/"
AddType text/html .py
<Directory "D:/pythontest/www">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 127.0.0.1:8080>
DocumentRoot "d:/pythonTest/web"
WSGIScriptAlias / "d:/pythonTest/web/code.py"
Alias /static "d:/pythonTest/web/static/"
AddType text/html .py
<Directory "D:/pythontest/web">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
3)、code.py 的 app 代码:
app = web.application(urls,globals(),autoreload=False)
application = app.wsgifunc()
4)、出现“ Internal Server Error”时,在配置文件输入:
LoadModule rewrite_module modules/mod_rewrite.so
7、url传值时,出现传递的参数需加引号 ?
8、no such column:SQL语句包含数据库表中不存在的列名。。。需要在查询语句里的字符串加逗号。?
9、web.py 网页 导出excel的简单办法。
1)、在py代码里写入 web.header的值:
web.header('content-type','application/vnd.ms-excel;charset=UTF-8')
return render.XXX()
2)、在html页面头部写入meta :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
3)、均需采用utf-8 编码,不然有乱码。
4)、web.header('Content-type','application/vnd.ms-excel') #指定返回的类型
web.header('Transfer-Encoding','chunked')
web.header('Content-Disposition','attachment;filename="export.xls"') #设定用户浏览器显示的保存文件名
10。文件上传:
1)取不到上传的数据时,检查form 表单是否加上 enctype="multipart/form-data" 声明。
2)判断是否有文件上传:
i = web.input(uploadfile={})
if i.uploadfile.filename:
... uploadfile 为form表单中 file input 的name 值
3)更多细节查看cgi的相关内容。
11. webpy的database封装得不错,api也好用。可以用在其他项目中。
------------------------------------网上其他的使用心得----------------------------------------
http://maplebeats.com/2012/03/03/web-py.html
web.py的文档有中文版,非常不错。虽然我也没有深入研究,但是我觉得有些细节还是得写一写。
web.config.debug = True
开发的时候肯定要把调试开启,跟踪报错很重要。我就是这样子发现该死的编码错误的,文件不要放在中文目录下,浏览器最好使用‘现代’浏览器,不然web.input处理中文会报错。
关于static目录,js,css,images神马文件之类的都放到这里面。我试过自己建文件夹,失败。在html里引用的时候,目录要使用static//file。解决办法就这样子,原理我也不想搞明白,也不想去搞明白,能用就行。好像是全局变量问题神马的。
templates模版目录,定义一个base是不错的选择。。。当然也可以用拼凑。在html里引用的时候是$:name,一定要注意那个冒号,不加冒号就被处理成纯文本了。
render = web.template.render('templates/',base='layout')
定义类就能生成页面,用urls的列表来关联类。类的return返回值就是生成的html,引用模版render.template(var)。。。当然返回值能有多个,要与模版的参数个数一致。
GET和POST,如其字面意思。如果想从网页中得到输入的参数就用POST。web.input()可以从网页中得到输入的数据,以字典的形式返回,所以对返回值用get方法就能得到想要数据。
class Login:
'''完全是用来骗老师伪登陆,只是作为一个例子说明'''
def POST(self):
i = web.input()
account = i.get('account','no account')
passwd = i.get('password','no password')
if account == 'maple' and passwd == '123':
return render.main(account,None,None)
else:
return render.error('account or password wrong')
web.py连接mysql和postgresql比较简单,wiki上有详细说明。我要提的就是关于sqlite,因为这种小玩意用mysql等完全就是杀鸡用牛刀,于是用python本身就自带的sqlite。但是web.py的连接数据库好像并不支持sqlite,所以请用python-sqlite语句对sqlite进行操作。在code.py开头最好不要定义web.py的数据库为sqlite,虽然这样子能连接上数据库,但是这毫意义还会对后面的数据为操作产生干扰。
---------------------------------- 网络上搜索的其他faq ----------------------------------------
1.所有的模板只能共享一个HTML标签,如<HTML>的,在其他地方不能有任何关于HTML信息之类的东西,如头文件,<HTML>,<BODY>之类的,否则出错,其它模板文件也一样
2.模板注释一定要写在末尾,至少要在def with后面,否则会有莫名其妙的错误!不管什么情况,def with必须在第一行!
3.用mod_wsgi运行web.py时,要指明模板路径,否则显示错误:raise AttributeError, “No template named ” + name
AttributeError: No template named index
解决:
template_root = os.path.join(os.path.dirname(‘D:/pythonStudy/WebpyStudy/projects/blogs/’), ‘templates’)
render = web.template.render(os.path.abspath(os.path.dirname(‘D:/pythonStudy/WebpyStudy/projects/blogs’))+’/templates/’, base = ‘base’, globals=t_globals)#这里要标明全局变量!!!
4.在web.py用到datestr:
t_globals = {
‘datestr’:web.datestr
}
运行打开http://localhost:8080/显示Invalid format string
错误显示datestr ValueError: Invalid format string
这时需要重新建表,即要把数据库之前创建的那个表先删除,再重新建立,我用Pycharm,换了一个主题(从Default改成monokai),跟这个有关
5.t_globals = dict(
datestr = web.datestr,
static = ‘/static’,#必须在这里加上这一行,才可以在index.html中显示static文件夹下的东西,如图片,调用时可这样:<img src=”$static/webpy.png” alt=”webpy”/>
)
6.自定义404错误
def notfound():
return web.notfound(‘噢,没有找到!’)
app.notfound= notfound
7.路径可用正则表达式匹配
大部分时候简单的正则可以适用你的常规应用了,数字用 (\d+),字符串用 (.*),注意不要漏写
像/,/help,/item/(\d+)(\d+将匹配数字),后面是接受请求的类名称
8.GET函数用于请求网页文本,还有POST函数,经常被用在提交form,如提交一个去做什么事情的请求时,就用POST
GET的URL可以被搜索引擎索引,并通过搜索引擎访问,虽然大部分页面你希望被索引,但是少数类似订单处理的页面是不希望被索引的
9.问题:在浏览器显示500错误,查Apache的log显示”ImportError: No module named model”
解决:在顶部加上这一行就行,注意import model要放在后面,同样的方法可以解决”No module named web”的方法(感谢CPyUG的Ken同学,还有别的问题可至:http://webpy.org/install
abspath = os.path.dirname(“D:/pythonStudy/WebpyStudy/projects/blogs/”)
sys.path.append(abspath)
os.chdir(abspath)
import model
---------------------------------------
mako模板使用:
include标签用法、
<%include file="left_menu.html" args="sub=sub"/>
第一个sub是传递过去的变量。第二个是变量。
在left_menu.html里
<%page args="sub" />
然后直接使用sub变量。
-----------------------------------------
1、在session设计里,用IE可以清除登录,用火狐浏览器无法清除,将火狐浏览器里的缓存全部删除后,正常。
2、登录才能查看的页面:
1)设计一个判断是否登录的基类 -> 其他的模板继承该基类(注意需将基类初始化)。(这个麻烦点)
2)定义一个函数check_login():if sess.login == 0:raise web.seeother("/login")
在对数据库进行批量操作时,用事务速度相当的快。
web.py学习心得的更多相关文章
- web.py 学习(-)Rocket web框架
Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...
- web.py学习遇到的问题
刚配置好了web.py运行所需要的环境,试着运行一个入门小实例,结果遇到了异常提示.不知道是什么原因导致的(是环境没配置好?还是……),暂时做个标记,记录一下. 运行的代码 import web ur ...
- web.py 学习(二)Worker
Rocket Server 启动一个线程监听客户端的连接,收到连接将连接放置到队列中.线程池中的Worker会以这个连接进行初始化.Rocket中Worker的基类是: class Worker(Th ...
- web.py simpletodo 例子
一个很好的例子: 许多新手,特别是从 ASP/PHP/JSP 转过来的同学,经常问下面这几个问题: 所有东西都放在一个 code.py 中呀?我有好多东西该如何部署我的代码? 是不是 /index 对 ...
- web.py开发
web.py需要使用python2.X,所以安装python版本2.7.9 web.py 是一个轻量级Python web框架,它简单而且功能强大 web.py安装 安装python (1)使用pip ...
- Web.py 框架学习笔记 - URL处理
最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...
- Web前端培训学习心得
web前端工程师技术日趋成熟,越来越多的行业巨头正不断向web前端工程师示好,在未来几年,web前端将会以更多的形式渗透到我们生活中的方方面面,因此越来越多的从业者开始关注web前端开发行业,今天小编 ...
- python学习笔记(十 四)、web.py
使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...
- 【Python】web.py初识学习
简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web From:https://www.oschi ...
随机推荐
- qt 设置等待事件
QElapsedTimer et;et.start();while(et.elapsed() < 1000) QCoreApplication::processEvents();
- iar 问题
我的笔记本是win10 之前用的iar 430 版本是5.5 都没有问题.但,突然就
- Python 基礎 - 文件的操作
在來我們來玩一下文件操作,這個在未來工作上,也是會很常用到的功能 Python2.7中,可以用file()來打開文件,而在Python3中,一律都是用open(),接下來在當前目錄下,先建立一個空文件 ...
- 解决python字典结构内存暴涨问题
背景:当读取一个key value数据的时候,python的字典结构会造成内存使用扩10倍左右,无可容忍.此文解决这个问题 数据:word2vec训练的结果,word对应400维的词向量.词表共1.6 ...
- NoSuchMethodError
http://www.tuicool.com/articles/iIVbuuZ 有些服务器是指定某个目录下的所有jar包,这样如果同时存在不同版本的jar包,也会引起这个问题,算一个检查点
- ionic中的service简单写法
在service中写服务 服务名叫feedService .service('feedService',function($ionicLoading,$q,$http){ return{ //获取反馈 ...
- jsp的九大内置对象和四大作用域(转)
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象(作用域) 客户端的 ...
- Android.os.NetworkOnMainThreadException
出现Android.os.NetworkOnMainThreadException错误提示的原因原因:不允许在主线程中进行网络访问解决办法:将网络访问的操作单独放到一个线程中
- 最近这两天看了关于H5游戏开发的一个教程,实践很短暂,看了很多理论的东西,现在呢也只是想回忆回忆关于EUI的部分知识吧
首先我了解了什么是Egret: Egret中文就是白鹭的意思,Egret是一套H5游戏开发的软件.(纯粹属于个人理解) 其次我对以下几款软件的相关知识做了些了解: Egret Engine(引擎),E ...
- ubuntu更新命令点点滴滴
ubuntu更新命令点点滴滴 一些非root的更新命令: sudo: sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一 ...