Bottle 源码阅读(六) -- Python Web 服务基础



1. Python socket 模块使用

Python Socket 编程详细介绍 这篇文章讲解的非常好.

先看下面一段代码:

阅读全文 »


Bottle 源码阅读(五)-- WSGI 服务封装, 热部署原理



1. WSGI 服务

Python 内置了一个 WSGI 服务 wsgiref, 借用 simple_server.py 中的例子, 看下简单的使用, :

from wsgiref.simple_server import make_server


def demo_app(environ, start_response):
    from io import StringIO
    stdout = StringIO()
    print("Hello world!", file=stdout)
    print(file=stdout)
    h = sorted(environ.items())
    for k, v in h:
        print(k, '=', repr(v), file=stdout)
    start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
    return [stdout.getvalue().encode("utf-8")]


def start_wsgi():
    httpd = make_server('', 8000, demo_app)
    sa = httpd.socket.getsockname()
    print("Serving HTTP on", sa[0], "port", sa[1], "...")
    httpd.serve_forever()

demo_app() 函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

environ:一个包含所有HTTP请求信息的dict对象, 从截图可以看出来包含的信息非常多
start_response:一个发送HTTP响应的函数

阅读全文 »


Bottle 源码阅读(四) -- 注解, functools, yield, inspect



1. Python 注解使用

高阶函数, 指的是能将函数当成入参来操作, Python 注解也是这么做的, 使用 @ 符号, 让代码更简洁.

示例

def logger(fn):
    def wrapper():
        print('%s starts to executing' % fn.__name__)
        fn()
        print('%s finished executing' % fn.__name__)
    return wrapper


@logger
def hello():
    print('Hello world!')
##
hello starts to executing
Hello world!
hello finished executing

阅读全文 »


Bottle 源码阅读(三) -- ArgumentParser, __slots__, __call__, templefile, @property 使用



1. Python 命令行解析工具

(pycharm_env) ➜  six_web git:(six_20171018) ✗ ifconfig --help
ifconfig: illegal option -- -
usage: ifconfig [-C] [-L] interface address_family [address [dest_address]]
                [parameters]
       ifconfig interface create
       ifconfig -a [-C] [-L] [-d] [-m] [-u] [-v] [address_family]
       ifconfig -l [-d] [-u] [address_family]
       ifconfig [-C] [-L] [-d] [-m] [-u] [-v]

类似在 Linux 系统上执行 command -help 命令, C 语言使用的 getopt() 进行命令行交互. Python 标准库中自带的 argparse 的用法几乎一样.

阅读全文 »


Bottle 源码阅读(二) -- Python 项目的开源到 Pypi 服务器



Pypi 服务, 类似 Java 的 maven 仓库, 用来托管开源的 Python 模块. 发布 Python 模块, 必须要配置好 setup.py 等配置文件.

一般待发布的项目目录, 大概有下面文件

.
|-- LICENSE.txt
|-- MANIFEST.in
|-- README.rst
|-- data
|   `-- data_file
|-- sample
|   |-- __init__.py
|   `-- package_data.dat
|-- sample.egg-info
|   |-- PKG-INFO
|   |-- SOURCES.txt
|   |-- dependency_links.txt
|   |-- entry_points.txt
|   |-- requires.txt
|   `-- top_level.txt
|-- setup.cfg
|-- setup.py
|-- tests
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- __pycache__
|   |   `-- test_simple.cpython-27-PYTEST.pyc
|   `-- test_simple.py
`-- tox.ini

阅读全文 »