为什么要写这个教程呢?非常多的新手问同样的问题,很烦恼。我并不打算写得大而全,我只想写一个简单的入门级的,解决新手的烦恼,其他知识你需要看官方文档。我写了一个简单的 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. 概要设计阶段--组装测试计划
  2. 转:IE iframe不刷新的问题之完美解决
  3. 基于ISO的本地yum源配置
  4. android短信安全,[原创]分析了一款android短信木马
  5. pctfree pctused详解
  6. 《移动应用开发》实验报告——仿饿了么商家页面
  7. 数据库-优化-Limit查询的优化
  8. 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)
  9. c 语言 结构体 编程,C语言:结构体的编程问题(很简单)
  10. C# ASP.NET MVC 配置允许跨域访问
  11. ALV的颜色分为行的颜色、列的颜色和CELL的颜色
  12. JavaWeb 之 HttpServletResponse
  13. GCD使用经验与技巧浅谈
  14. java 合并两个音频_如何利用音乐合成软件将多段音频合并为一段?快速合并音频的方法...
  15. 微信公众平台、微信开放平台、微信商户平台的区别
  16. WEB标准的学习和理解(一)何为WEB标准
  17. Bluetooth技术学习笔记 ——RFCOMM(2)
  18. Win10显示无网络(无Internet连接)但能上网的解决办法
  19. android倒影效果,Android实现图片的倒影效果案例分析
  20. 编写一个类的方法,其输入参数为一个整数,输出为该整数各个位上的最大数字

热门文章

  1. 计算机发展史的pdf文档,计算机的发展历程.pdf
  2. 【状语从句练习题】since 的时态问题
  3. PLSQL Oracle存储过程(实例分析)
  4. 定义一个名为Circle的类,其中含有double型的成员变量centerX 和centerY表示圆心坐标,radius表示圆的半径。
  5. 1.10、Java面经 内容太杂不详细 没用
  6. 智慧消防压力表可实现远程监控
  7. facebook海外社交媒体广告平台的几种广告形式和类型
  8. 单相桥式有源逆变电路,单相半波可控整流电路,单相桥式半控整流电路,单相桥式全控整流电路
  9. html下拉菜单自动收回,jquery使用hover触发下拉菜单如果为什么有空隙就自动收回?...
  10. element 下拉框中树节点选中之后不收回下拉框