zoukankan      html  css  js  c++  java
  • web.py simpletodo 例子

    一个很好的例子:

    许多新手,特别是从 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 est odo>code.py
    http://0.0.0.0:8080/

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

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

    E:web est odo>code.py 80

    更新:

      • 2011.6.26:功能升级,对于当条 todo 增加完成功能,且把完成的放到最后。
      • 2013.4.3:使用 Nginx + uwsgi 运行本程序
      • 2013.7.16:增加关于 static 文件目录的说明,增加80端口的使用说明

    转自:

    http://chenxiaoyu.org/2010/03/19/webpy-database-tutorial.html

  • 相关阅读:
    Android不规则瀑布流照片墙的实现+LruCache算法
    嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
    Oracle backgroup processes
    Android中数据库的操作流程详解
    Dreamweaver PHP代码护眼配色方案
    Twitter 新一代流处理利器——Heron 论文笔记之Heron架构
    Docker简单介绍
    C#下使用GDAL
    Android:实现仿 美团/淘宝 多级分类菜单效果
    KVC在定义Model类中的妙用
  • 原文地址:https://www.cnblogs.com/youxin/p/3646276.html
Copyright © 2011-2022 走看看