白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 -- 唐·王之涣

英语每日一句API封装

利用Python实现有道词典和扇贝单词两个系统的api接口数据抓取,结合定时任务可以每天给自己推送两句英语,学习英语走起来... ...
阅读更多

Python 颜色控制colorama

之前在Linux下shell编程的时候,为了控制报错和告警等信息显示不同的颜色示警,使用终端颜色控制,发现Python有现成的模块(colorama)可以实现类似shell的,尝试之后给大家做个分享
阅读更多

django 发布应用

Django deploy application

当Django 的application开发完成之后,我们希望能将其作为模块分发出去供别人共享使用

How to write application

安装好Django之后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## create project
django-admin.py startproject mypro

## create app named `todo` (todo list)
cd mypro
python manage.py startapp todo

## configure app(todo) connect with project `mypro`
vim mypro/settings.py

INSTALLED_APPS = [
'django.contrib.admin',
...,
'todo',
]

vim mypro/urls.py
from django.conf.urls import url, include

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^todo/', include('todo.urls', namespace='todo')),
]

How to write setup.py

  • 创建一个父目录

    mkdir -pv /opt/django-todo

  • copy 刚才新增的 application todo 到 该目录下

    cp -r todo /opt/django-todo/

    一般开发完成application之后,在todo 下面会生成__pycache__migrations, 一般会保留migrations 作为应用的初始化; 或者删除不打包到Python package中,安装应用之后可以使用python manage.py makemigrations todo
    python manage.py migrate todo 来初始化;
    __pycache__ 可以删除不做打包

  • 新增README.MD 和 setup.py

    README.MD 作为项目的详细说明,这里省略,详细可以参考:todo README
    setup.py 是打包安装脚本,详细脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os
from setuptools import find_packages, setup

with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
README = readme.read()

# 使 setup.py 能在任何地方运行
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))

setup(
name='colinws-todo',
version='0.3',
# packages=find_packages(),
packages=['todo'],
include_package_data=True,
license='MIT License',
description='A simple Django Todo List application',
long_description=README,
url='https://blog.colinspace.com/',
author='Colin.Liu',
author_email='colinservice@126.com',
platforms = 'Linux,Unix',
keywords = 'Colin,colinws,todo, todo list, django',
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: 1.11',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)
  • 编译打包、安装、注册、上传

    python setup.py sdist
    python setup.py register
    python setup.py upload

Python发布package到pypi配置

新增~/.pypirc 而不是 ~/.pypi

刚才报错Server response (410): Project pre-registration is no longer required or supported, so continue dire 就是配置文件命名成了 ~/.pypi

1
2
3
4
5
6
7
[distutils]
index-servers = pypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: colin5063
password: xxxxxx

第三方安装

you can install via pip

pip install colinws-todo

or you can git clone this repository and use setup.py

git clone https://github.com/opscolin/Django-todo.git
cd Django-todo
python setup.py install

Quick start

  • Add "todo" to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [ ... 'todo',]
    
  • Include the todo URLconf in your project urls.pylike this:

    url(r'^todo/', include('todo.urls')),
    
  • Run below command to create todo models migrations.:

    python manage.py makemigrations todo
    
  • Run below command to create todo real models.:

    python manage.py migrate todo
    
  • Start the development server and visit http://127.0.0.1:8000/admin/ to create a todo (you’ll need the Admin app enabled).

  • Visit http://127.0.0.1:8000/todo/ to participate in the todo list.


Refer

Flask-mail测试和遇到的问题

导语

今天在尝试 Flask-Mail 发送邮件的过程中,遇到一个小问题导致发送邮件失败,查到了半天问题,真是被自己蠢到了。
这里针对这个问题的前因后果做一个整理分享给大家,避免大家踩同样的坑。

安装 Flask-Mail

这里建议利用 virtualenv 来创建隔离的环境来测试发送邮件,关于 virtualenv相关的介绍和使用可以参考如下连接

Centos下pyenv安装python多版本-增强版

Centos下python纯净虚拟环境

阅读更多

Python emumerate Usage

enumerate()说明

  • enumerate()是python的内置函数
  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  • enumerate多用于在for循环中得到计数

实例

>>> goods = [['appple',70999],['banaba',2000],['orange',10000]]
>>> type(goods)
<type 'list'>
>>> for index,item in enumerate(goods):
...     print index,item
... 
0 ['appple', 70999]
1 ['banaba', 2000]
2 ['orange', 10000]
>>> for index,item in enumerate(goods):
...     print index,item[0],item[1]
... 
0 appple 70999
1 banaba 2000
2 orange 10000
>>> 

## enumerate可以有第二个参数
>>> for index,item in enumerate(goods,2):
...     print index,item[0],item[1]
... 
2 appple 70999
3 banaba 2000
4 orange 10000
>>> 

特殊说明

文件大小为83M,用python计算文件行数

实际脚本

#!/usr/bin/env python
#-*- coding:utf8 -*-

file = '/usr/local/tomcat/logs/appLog/appLog.2016-11-08.log'


## 方式一,对于文件很大的时候比较慢
#count = len(open(file,'r').readlines())
#print count


## 方式二,相对比较高效
count = 0
for index, line in enumerate(open(file,'r')):
    count += 1

print count
阅读更多

Flask的config使用总结

针对项目的不同, flask 可以采用不同配置方式来快速开发

直接配置

app.config['HOST'] = 'www.baidu.com'
app.config.update(
    'HOST' = 'www.baidu.com',
    'PORT' = 3306
)

查看具体的配置 print app.config.get('HOST')

通过环境变量加载

export MyAppConfig='/etc/flask-setting.cfg'

app.config.from_envvar('MyAppConfig')
阅读更多