为什么要写这个教程呢?非常多的新手问同样的问题,很烦恼。我并不打算写得大而全,我只想写一个简单的入门级的,解决新手的烦恼,其他知识你需要看官方文档。我写了一个简单的 todo 程序,供新手学习和参考。

查看100%效果图 > 来看源代码的?直接拉到最后。

新人的烦恼

许多新手,特别是从 ASP/PHP/JSP 转过来的同学,经常问下面这几个问题:

  • 所有东西都放在一个 code.py 中呀?我有好多东西该如何部署我的代码?
  • 是不是 /index 对应访问目录下的 /index.py?
  • 我想要PHP中的那个 include,在模板该怎么实现?
  • 我输出的内容为什么是纯文本的?我输入的是 Html,原样输出了哦。

嗯,我很理解,我当初也一样遇到,原因是我们对 Python 的基础工作原理不熟悉。Python 中有一个包机制,也就是说 code.py 中的东西都可以独立出来,做为一个模块或一个包存在,你需要什么就导入什么。例如 url 的配置,你可以独立成一个 url.py 的文件,这样你把 url 配置写在这里,在 code.py 中导入即可。

不是 /index 对应访问 /index.py 的,在 web.py 中,是对应后面的类。在 web.py 中,绝大部分是没有写死的,只有 GET 和 POST 是写死的。

工作文件目录看起来是如何的?

这是我的文件结构,不代表其他同学。

|-- code.py
|-- config/
|   |-- __init__.py
|   |-- settings.py
|   `-- url.py
|-- controllers/
|   |-- __init__.py
|   `-- todo.py
|-- static/
|   |-- images/
|   `-- styles/
|       |-- index/
|       |   |-- images/
|       |   |   `-- website.png
|       |   `-- style.css
|       `-- reset.css
`-- templates/
    |-- error.html
    |-- foot.html
    |-- header.html
    |-- index.html
    `-- todo/
        `-- edit.html

# 使用 Ulipad 的 目录树打印 功能输出。

他们如何工作?

code.py 主要用于启动,绝大部分时候它是没有用的。

/static 这个是静态文件目录,在内置的开发服务器上不可以修改,如果你使用其他 web server 来配置的是可以改的。

/controllers 控制层的代码,或者实际工作的代码就在这里。

__init__.py 这是用来做什么的?看起来像初始化?嗯… 如果你希望某个目录可以被引用,加上这个一样空白文件就好了,表示当前是一个模块可以被引用。这是给新手做的说明。

/config 一些常用配置,我把 url 的配置独立出来了,因为项目做大了,url 很长。

我取消了 model 层,不要问我为什么,这是一个很纠结的话题,如果你需要,你可以独立出一个 model 层。

其他的应该不用解释了。

简单说一下 url 的配置

pre_fix = 'controllers.'

urls = (
    '/',                    pre_fix + 'todo.Index',
    '/todo/new',            pre_fix + 'todo.New',
    '/todo/(\d+)',          pre_fix + 'todo.View',
    '/todo/(\d+)/edit',     pre_fix + 'todo.Edit',
    '/todo/(\d+)/delete',   pre_fix + 'todo.Delete',

)

原理前面说过了,前面的访问地址对应后面的方法路径。好多重复的字符串,所以我就把前面的弄成一个变量了。

大部分时候简单的正则可以适用你的常规应用了,数字用 (\d+),字符串用 (.*) 。

新手科普

#!/usr/bin/env python
# coding: utf-8

程序文件中请确保有这两行开头,你读过简明教程,对吧?你应该懂的。第一行表示在 *nix 下面,使用 python 来解释当前程序;第二行表示当前文件编码为 utf-8。

程序老是报编码错误

数据库、程序文件等,请全部使用 utf-8 编码。

经常遇到程序编码错误?web.py 内部默认使用 unicode,经过 web.py 处理过的都是 unicode,所以你如果有中文,尝试转为 unicode,比如 a = u'中文啊'。大部分情况下可能解决。

开发服务器加载CSS文件非常慢

请统一换行符,即文件格式问题,全部使用 Unix 风格的换行符。可能是你的 CSS 是 win 格式的编码,请改为 Unix 编码。

关于 static 静态文件目录

默认 webserver 开发模式下,不可改名,不可改路径。你要是拖了自己的其他  webserver,那你自己另外配,当然可以是任何名字。

类似 PHP 中的 include 引用在模板中如何实现?

把 render 做为全局变量放到模板中去,然后 $:render.header() 这样。同样本示例源码中也使用了该方式,而没有使用 layout 方式,该方式看官方文档。

$news.content 纯文本输出了啊?

这样 $:news.content

关于 web.input()

i = web.input() # get,post 提交的数据通收。

title = i.get('title', None) 这是什么意思?

从 i 中取 title,如果没有取到则将 title 赋值 None。不然,你直接 title = i.title 如果前面的表单中没有这一项会报错。

关于 db.select 返回的是列表

a = db.select(tb, where='id=$id', vars=locals())  # id 为自增的那个主键

select 返回的是一个列表,因此要 a[0] 取到第 1 条。不过你有经验的话,接下去仍然要判断下:

if not a:
    return '没有找到结果…'
return a[0]

QA 得差不多了,请阅读源代码,web.py 中文教程

读代码最实际,对吧?项目主页:

Google Code: http://code.google.com/p/simple-todo/

Bitbucket.org https://bitbucket.org/qichangxing/simple-todo

数据文件在 /static/sql 下面,请自行导入,默认使用了 mysql,需要可以修改成其他数据库,在/config/settings.py 中修改配置。

请放心,源码是可以直接工作的,可以直接在目录下 code.py 即可。其中用到了你经常用的常识,期望有了这个之后你可以轻松地开始 web.py 学习和应用之旅。那么马上开始吧:

E:\web\test\todo>code.py
http://0.0.0.0:8080/

使用 http://127.0.0.1:8080 访问。

如果想使用 80 端口访问,则可以直接加 80 端口号:

E:\web\test\todo>code.py 80

更新:

  • 2011.6.26:功能升级,对于当条 todo 增加完成功能,且把完成的放到最后。
  • 2013.4.3:使用 Nginx + uwsgi 运行本程序
  • 2013.7.16:增加关于 static 文件目录的说明,增加80端口的使用说明
原文链接:http://simple-is-better.com/news/309

Simple-TODO: 一个简易的 todo 程序 - web.py 中文教程相关推荐

  1. 仿照Windows的计算器,编写一个简易的计算器程序,实现加、减、乘、除等运算。

    仿照Windows的计算器,编写一个简易的计算器程序,实现加.减.乘.除等运算. 偷懒了很多,将就着用吧: import java.awt.FlowLayout; import java.awt.ev ...

  2. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  3. 使用python编写一个简易的打折程序

    使用python编写一个简易的打折程序

  4. 用Python做一个简易健身运动程序

    最近在做一些运动,昨天晚上在抖音上看见了一套燃脂的视频. 视频的内容讲述的内容是每组动作做多少个. 现在网上也是各种的减肥动作 那么问题来了,在运动时可能会因为太累而不会自己去数自己做了多少个动作 那 ...

  5. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  6. python测试抽奖脚本_使用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  7. 怎么用python制作简单的程序-如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  8. Python小型web服务 web.py 简单教程

    最近有个项目需要通过Java调用Python的服务,有考虑过gRPC,那是一个很好的框架,通信效率高.但是基于够用就好的原则,决定选择使用简单的HTTP通信方式,Python建立服务器,公开JSON ...

  9. 如何用excel制作xy曲线图_用Excel制作一个简易抽奖小程序,可一次抽取多人

    抽奖程序在很多场合都能派上用场,比如商场开业促销.课堂点名.抽取幸运观众等.我们今天就用Excel来制作一个简单的抽奖小程序,仅做参考. 抽奖小程序是下图这个样子的.我们按一下键盘上的F9键,即可完成 ...

最新文章

  1. php广告插入代码,[教程]如何在phpcms中添加html代码广告
  2. 权限表管理之删除权限表数据
  3. python代码判断两棵二叉树是否相同
  4. ADO.NET Entity Data Model入门实例
  5. php soap自动wsdl,在使用PHP的本机SOAP类时生成WSDL?
  6. ASP.NET页面的CheckBoxList组件
  7. python考试报名官网安徽_今年优选:芜湖python
  8. [Offer收割]编程练习赛15 A.偶像的条件[贪心]
  9. pad_sequences序列填充(转载)
  10. mysql学生选课系统的关系模型_使用PowerDesigner搭建学生选课管理系统(学生老师管理员一体系结构)由基础设计至数据库生成(SQL语句源代码的生成)全过程实例操作...
  11. Linux ls命令:查看目录下文件
  12. 云计算中的Iaas,Paas和Saas
  13. python float转化为int_python – 将矩阵的某些列从float转换为int
  14. 土地利用转移矩阵--更新中
  15. 华为云计算hcip证书有效期_华为云计算HCIP V4.0认证要发布了!
  16. 最最最简单从官方获取最新行政区划代码、区划拼音
  17. java功能模块_系统功能模块详解 java应该学习什么?
  18. CSP-201609-3-炉石传说
  19. packetfence 7.2网络准入部署2
  20. Spring Bean 配置相关的注意事项

热门文章

  1. RPC-BDY(4)-nacos注册中心
  2. TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法
  3. Mac Carthage
  4. windbg - 调试栈溢出及一个崩溃示例
  5. 摸清股市规则,交易更安心
  6. finale 关键字的作用
  7. 「数商云案例」打造工业紧固件行业SRM采购业务协同平台,实现高效协同采购
  8. C#类似仪表盘数据显示的制作
  9. CSS中去掉li前面的圆点方法
  10. java冻结账号功能代码_java-JFrame在连续运行代码时冻结