文档章节

python web

memristor
 memristor
发布于 2017/07/06 14:29
字数 1661
阅读 13
收藏 0

库与工具

开源项目

https://github.com/Jahaja/psdash/blob/master/tests/test_log.py https://github.com/giampaolo/psutil/blob/master/psutil/_pslinux.py

environment

setup

  • easy_install,easy_install package,easy_install "package=version",easy_install -U "package>=version"

  • pip,pip install package,pip install package=version,pip install --upgrade package,pip uninstall package

    pip是easy_install的改进版,提供更友好的信息,删除package功能 pip可以通过 easy_install进行安装

    # pip freeze
    click==6.7
    Flask==0.12.1
    itsdangerous==0.24
    Jinja2==2.9.6
    MarkupSafe==1.0
    Werkzeug==0.12.1
    
    #pip install -r requirement.txt
    

virtualenv

B000000098926:~ wangweiwei11$ mkdir python
B000000098926:~ wangweiwei11$ cd python/
#安装virtual env
B000000098926:python wangweiwei11$ virtualenv venv
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/wangweiwei11/python/venv/bin/python3.6
Also creating executable in /Users/wangweiwei11/python/venv/bin/python
Installing setuptools, pip, wheel...
Installing setuptools, pip, wheel...done.
#进入virtual env
B000000098926:python wangweiwei11$ source venv/bin/activate
(venv) B000000098926:python wangweiwei11$

virtualenv --no-site-packages venv创建一个独立的Python运行环境,我们还加上了参数--no-site-packages

baas grant_tmp_permission --baas_user=wangweiwei11 --bils_accounts=work --bils_users=chenlei20 --grant_reason=route --duration_hours=24

Flask

(venv) B000000098926:python wangweiwei11$ pip install Flask
Collecting Flask
  Downloading Flask-0.12.1-py2.py3-none-any.whl (82kB)
    100% |████████████████████████████████| 92kB 443kB/s
Collecting Jinja2>=2.4 (from Flask)
  Downloading Jinja2-2.9.6-py2.py3-none-any.whl (340kB)
    100% |████████████████████████████████| 348kB 505kB/s
Collecting itsdangerous>=0.21 (from Flask)
  Using cached itsdangerous-0.24.tar.gz
Collecting click>=2.0 (from Flask)
  Using cached click-6.7-py2.py3-none-any.whl
Collecting Werkzeug>=0.7 (from Flask)
  Downloading Werkzeug-0.12.1-py2.py3-none-any.whl (312kB)
    100% |████████████████████████████████| 317kB 581kB/s
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->Flask)
  Downloading MarkupSafe-1.0.tar.gz
Building wheels for collected packages: itsdangerous, MarkupSafe
  Running setup.py bdist_wheel for itsdangerous ... done
  Stored in directory: /Users/wangweiwei11/Library/Caches/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
  Running setup.py bdist_wheel for MarkupSafe ... done
  Stored in directory: /Users/wangweiwei11/Library/Caches/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
Successfully built itsdangerous MarkupSafe
Installing collected packages: MarkupSafe, Jinja2, itsdangerous, click, Werkzeug, Flask
Successfully installed Flask-0.12.1 Jinja2-2.9.6 MarkupSafe-1.0 Werkzeug-0.12.1 click-6.7 itsdangerous-0.24
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    app.logger.warning('A warning occurred (%d apples)', 42)
    return 'Hello World!'

@app.route('/user/<username>')
def show_user(username):
    return "username is %s" % username

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

if __name__ == '__main__':
    app.run(debug=True)

gunicorn

#pip install gunicorn
#supervisor配置
[program:gunicorn]
command=/Users/wangweiwei11/python/venv/bin/gunicorn hello:app -c /Users/wangweiwei11/python/venv/gunicorn.conf
directory=/Users/wangweiwei11/python/venv
user=wangweiwei11
autostart=true
autorestart=true
redirect_stderr=true
[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = leon          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log

; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

supervisor

sudo pip install supervisor
pip show supervisor
supervisord -c /etc/supervisord.conf

nginx

upstream app_server {
   # fail_timeout=0 means we always retry an upstream even if it failed
   # to return a good HTTP response

   # for UNIX domain socket setups
  # server unix:/tmp/gunicorn.sock fail_timeout=0;

   # for a TCP configuration
   server 127.0.0.1:5000 fail_timeout=0;
 }

 server {
  # use 'listen 80 deferred;' for Linux
  # use 'listen 80 accept_filter=httpready;' for FreeBSD
  listen 9999;
  client_max_body_size 4G;

  # set the correct host(s) for your site
  server_name example.com www.example.com;

  keepalive_timeout 5;

  # path for static files

  location / {
    # checks for static file, if not found proxy to app
    try_files $uri @proxy_to_app;
  }

  location @proxy_to_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # enable this if and only if you use HTTPS
    # proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $http_host;
    # we don't want nginx trying to do something clever with
    # redirects, we set the Host: header above already.
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root html;
  }
}

mysql

(venv) B000000098926:venv wangweiwei11$ pip install flask-sqlalchemy
#注意导入方式不能按照官方实例,以下是正确的导入方法
from flask_sqlalchemy import SQLAlchemy
(venv) B000000098926:venv wangweiwei11$ pip install pymysql
#注意版本的问题,在python3以上,mysql-python被抛弃,不能正常安装,需要使用pymysql,且需要引入以下转换,在站点的 __init__.py 文件中添加
import pymysql
pymysql.install_as_MySQLdb()

常用包

  • ConfigParser 配置解析

    read(filename):读取ini文件中的内容
    sections():得到所有section,返回列表形式
    options(section):得到给定section的所有option
    items(section):得到指定section的所有key-value
    get(section,option):得到section中的option值,返回str类型
    getint(section,option):得到section中的option值,返回int类型
    add_section(sectionname):添加一个名为sectionname的新section
    set(sectionname,option,value):设置sectionname的option和value的值
    

python import

  • module 文件,import .py,.pyc,.so,.dll,import直接将文件导入,创建模块名字空间的引用对象。from import不创建引用模块的名字空间,直接导入模块中的对象

  • package 目录,import 或者 from import,包包含模块与子目录,子目录也可以是一个包

  • PYTHONPATH 可以将项目目录添加到环境变量PYTHONPATH中,指定包路径

  • 运行方式:

python 数据类型

  • 参数传递

    • strings, tuples, 和numbers 不可更改对象,值传递,list、dict可变对象,引用传递。类变量也类似,对象更改不可变变量,对类无影响;对象更改可变变量,类变量也会改变<br/>
  • python 单下划线,双下划线

    • __foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突
    • _foo:一种约定,用来指定变量私有
    • __foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名

other

  • 快速启动一个服务器共享文件(如果是python2,python -m SimpleHTTPServer,如果是python3,python -m http.server)

    B000000098926:python wangweiwei11$ python -m http.server
    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    127.0.0.1 - - [03/May/2017 10:53:51] "GET / HTTP/1.1" 200 -
    127.0.0.1 - - [03/May/2017 10:53:51] code 404, message File not found
    127.0.0.1 - - [03/May/2017 10:53:51] "GET /favicon.ico HTTP/1.1" 404 -
    127.0.0.1 - - [03/May/2017 10:53:53] "GET /log/ HTTP/1.1" 200 -
    127.0.0.1 - - [03/May/2017 10:53:54] "GET /log/log2.py HTTP/1.1" 200 -
    
  • python 调试

    B000000098926:db wangweiwei11$ python -m profile db1.py
           439 function calls (434 primitive calls) in 0.003 seconds
    
     Ordered by: standard name
    
     ncalls  tottime  percall  cumtime  percall filename:lineno(function)
          1    0.000    0.000    0.001    0.001 :0(__import__)
          2    0.000    0.000    0.000    0.000 :0(_fix_co_filename)
          6    0.000    0.000    0.000    0.000 :0(acquire_lock)
          4    0.000    0.000    0.000    0.000 :0(allocate_lock)
          2    0.000    0.000    0.000    0.000 :0(any)
          2    0.000    0.000    0.000    0.000 :0(endswith)
        3/1    0.000    0.000    0.002    0.002 :0(exec)
    
  • 对象自检查 dir

    >>> dict={"name":"wangweiwei"}
    >>> dir(dict)
    ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'itemsimport sys
    ', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
    
  • list str

    str1 = "12345"  
    list1 = list(str1)  
    print list1
    str2 = "123 sjhid dhi"  
    list2 = str2.split(' ')  
    print list2  
    str = ".".join(list2)
    
  • peewee

python -m pwiz -e mysql -H localhost -p 3306 -u root -P nuomi123456  hestia > db.py

© 著作权归作者所有

共有 人打赏支持
memristor
粉丝 45
博文 203
码字总数 176319
作品 0
长沙
程序员
私信 提问
学好 Python 的 11 个优秀资源

Python是目前最流行、最易学最强大的编程语言之一(学习Python的五大理由),无论你是新手还是老鸟,无论是用于机器学习还是web开发(Pinterest就是案例),Python都是一件利器。此外,Pytho...

oschina
2015/12/01
13.8K
15
王者程序员整理的Python网络爬虫和web的系统学习路线图

最近很多小伙伴找小编咨询,如何系统的学习Python?相信这个论题应该困扰了许多想学习Python的人,今天小编给大家讲一下一个零根底的小白,应该如何体系化的学习Python编程语言,在学习的道路...

dcpeng
2018/09/06
0
0
开始使用 Python 开发 Web 应用

Python是一个通用编程语言,并很快成为每个自重程序员宝库中的一个必需品。 Python中有数不清的Web框架,从基本的微小架构到完整的架构,它们自有各自的优点。那么你准备使用它来做一些web开...

oschina
2013/11/24
12.1K
3
涨!涨!涨!2018年Python 工程师薪资再次刷出新高度

闻名的TIOBE排行榜刚刚发布最新的2018年2月编程言语排名榜。TIOBE编程社区索引是编程言语评价的一个指标,该指数每月更新一次。小伙伴们赶忙看看下面的排名情况吧! TIOBE编程社区指数是流行...

python进阶者
2018/03/01
0
0
万民Python,爬取某机构 python收费教材,公布给大家学习!

Python Python 是一种计算机程序设计语言。大多数不懂编程的人也听过一些编程语言,例如晦涩难懂的C语言,近些年风靡的Java语言,号称世上最好的编程语言PHP,还未上市的易语言...... 编程 ...

Python新世界
2018/07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Httpd 整合 Tomcat 步骤

环境:Tomcat8 + Httpd2.4 工作原理:借助于Tomcat的AJP连接器实现Apache与Tomcat的通信 配置步骤: 1. 配置httpd.conf 新增: Include conf/extra/mod_jk.conf 修改:添加 index.jsp <IfM...

ZeroneLove
昨天
1
0
Docker笔记3——容器命令(未写完,明天整理接着写)

未写完,明天整理接着写 新建并启动容器 docker run docker run [OPTIONS] IMAGE [COMMEND] [ARG...] OPTIONS: --name=[容器新名字] :为容器指定一个名称 -d:后台运行容器,并返回容器ID,...

HappyBKs
昨天
1
0
2018个人年终总结

感谢领导的信任和指导,新的一年获得了很多成长和提高,改掉了很多不好的习惯。 在这一年里,我在领导的帮助下,主要完成了以下功能: 1、完成上海银行版本投资营销相关功能的开发。 2、完成车...

万山红遍
昨天
10
0
保密工作与linux系统的发展

保密工作从性质上可以分成商业方面的保密和国家安全方面的保密。由于自己从事的是IT方面的工作,工作中必然会接触涉及到计算机信息方面的相关文件。加上单位已近通过武器装备科研生产单位二级...

linux-tao
昨天
3
0
Spark共享变量

概述 Spark程序的大部分操作都是RDD操作,通过传入函数给RDD操作函数来计算。这些函数在不同的节点上并发执行,但每个内部的变量有不同的作用域,不能相互访问,所以有时会不太方便,Spark提...

仟昭
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部