python一些加密解密


import hashlib
import base64

data = '123456'
data = data.encode('utf-8')
md5 = hashlib.md5()
md5.update(data)
print ("md5加密 :%s"%md5.hexdigest())
sha1 = hashlib.sha1()
sha1.update(data)
print ("sha1加密: %s"%sha1.hexdigest())
sha224 = hashlib.sha224()
sha224.update(data)
print ("sha224加密: %s"%sha224.hexdigest())
sha256 = hashlib.sha256()
sha256.update …

python时间转换


>>> import datetime

string转datetime

>>> import datetime
>>> str = "2016-04-03"
>>> date_time = datetime.datetime.strptime(str,'%Y-%m-%d')
>>> date_time
datetime.datetime(2016, 4, 3, 0, 0)

datetime转string

>>> date_time.strftime('%Y-%m-%d')
'2016-04-03'

datetime转时间戳

>>> time_time = time.mktime(date_time.timetuple())
>>> time_time
1459612800.0

时间戳转string

>>> time.strftime('%Y-%m-%d',time.localtime(time_time …

母羊生羊问题解决


问题是这样的: 1只母羊,在第2年和第4年生下小母羊,在第5年死去,问N年后有多少母羊?

想了很久,终于有了一个思路,不过目前效率不高

给出代码:

a = [1]
def sheep(N):
    N = int(N)
    if N == 1:
        return a
    for n,k in enumerate(a):
        a[n] += 1
    for n,k in enumerate(a):
        if k == 2:
            a.append(1)
        if k == 4:
            a.append …

python复习(二)


map

map()函数接收两个参数,一个是函数,一个是Iterable, map将传入的函数依次作用到序列的每个元素, 并把结果作为新的Iterator返回。

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

或者

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8 …

flask-sqlalchemy使用


简单的例子这里已经有了
中文 这里记录一下平时我遇到的一些问题

一对多

需求:一个问题对应多个回复
下面给出代码(字段不完整)

class Questions(db.Model):
    __tablename__ = 'questions'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.Text, nullable=False)

    def __init__(self,title,content):
        self.title = title
        self.content …

关于sqlalchemy的filter_by与filter


都可看做是where但用法不一样

filter_by

question = Questions.query.filter_by(id=1).first()

filter

question = Questions.query.filter(Questions.id==1).first()

其实就是===还有是否带类名的区别
如果要select * from questions where id < 5
这时只能使用filter

questions = Questions.query.filter(Questions.id < 5).all()

多个条件

question = Questions.query.filter_by(name='hello',id=5).first …

关于sqlalchemy的desc


也就是降序排序

简单使用

questions = Questions.query.order_by(Questions.time.desc()).all()

设置默认排序

如果几乎所有的questions都是按照时间降序排序,总不能每一条语句都加上order_by(Questions.time.desc())
所以设置默认排序是有效的

class Questions(db.Model):
    __tablename__ = 'questions'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.Text, nullable=False)
    time = db …

python复习(一)


·参考

循环

ranger(100)表示0到99这一百个数
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数

不可变对象

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

列表(list)

# 向列表追加元素  
a = ['hello','h','a','b']
a.append('world')
# 删除列表最后一个元素
a.pop()

切片

# 从a[0]开始到a[2]
a[0:3]
# 或者,省略0
a[:3 …

flask使用ajax


简单使用ajax

参考文档

<script type=text/javascript>
$(document).ready(function(){
    $('button#ajax').click(function() {
        $.ajax ({
            type : "POST",
            url : "{{ url_for('index.login') }}",
            data:JSON.stringify({
                name: $('input[name="name"]').val(),
                passwd: $('input[name="passwd"]').val()
            }),
            contentType: 'application/json;charset=UTF-8',
            success: function(result) {
                if (result.judge == true)
                {
                    window.location = '/';
                }
                else …

关于flask-wtf中的validators


以前都是"吃快餐",利用别人的例子进行修改,弄得自己不明不白的,这次放假,静下心来好好的看看官方文档, 才发现写的代码有很多不必要的东西,可以进行很多优化

flask-wtforms是一个优秀的flask扩展,可惜官方文档说的不明不白,只是简单的说了大概的 功能,如果想要更好的利用这个扩展,请google wtforms,或者看这里

这里记录一下wtforms的validators
参考文档

class RegisterForm(Form):
    name = StringField('用户名:')
    email = StringField('邮箱:')
    passwd = PasswordField('密码:')
    repasswd = PasswordField('重复密码:')
    register = SubmitField('注册')

这只是一个最简单注册表单

慢慢地加上一些要求:

输入不能为空

from wtforms.validators import Required
name = StringField …

使用python的Pillow模块生成验证码


参考资料
准备

from PIL import Image, ImageDraw, ImageFont, ImageFilter

_letter_cases = "abcdefghjkmnpqrstuvwxy" # 去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))
fontType="/usr/share/fonts/TTF/DejaVuSans.ttf"

1.创建图像

def create_validate_code(self,size=(120, 30),
                        chars …

flask学习笔记——3


好久没有写东西的,主要是最近在用flask写一个网站,由于写前端界面时为了让UI好看一点,搞得自己晕头转向,方向都错了,在此期间也遇到很多问题,虽然绝大部分已经解决了,但是还有很多没有解决。其实,做一个项目是最能检验能力的。

中文网站链接编码

如果访问一个含中文字符的网站,很大可能会提示错误

import urllib
urllib.parse.quote(url)

使用pelican搭建个人博客


pelican介绍

Pelican是一个用Python语言编写的静态网站生成器,支持使用restructuredText和Markdown写文章,配置灵活,扩展性强

pelican安装

$ sudo pip install pelican

安装markdown

$ sudo pip install markdown

pelican使用

工具准备好了,接下来就开始使用

$ cd git
$ mkdir pelican  #建立一个文件夹(位置和名称随意,自己记得就行)
$ cd pelican
$ pelican-quickstart

显示 (也可以直接回车默认)

Welcome to pelican-quickstart v3.4.0.

This script will help you create a new Pelican-based website.

Please answer …

flask学习--jinja模板


janja2是flask的默认模板,使用模板能够很大程度的将前端与后端分离
下面内容主要参考

jinja介绍

Jinja是flask的默认模板引擎。

jinja设置

  • 在扩展名为 .html 、 .htm 、 .xml 和 .xhtml 的模板中开启自动 转义。
  • 在模板中可以使用 {% autoescape %} 来手动设置是否转义。
  • Flask 在 Jinja2 环境中加入一些全局函数和辅助对象,以增强模板的功能。

flask学习笔记--2


今天被flask的项目结构或者说是蓝图搞得晕头转脑,各种文档也没说清,从github搜索并clone了几个用flask做成的网站,无奈水平太低,看不懂

记录一下今天学到的

蓝图

|-app/
|-|init.py |-|views.py
|-|init.py
|-|templates/
|-|static/
|-config.py
|-run.py
|-tmp/

run.py

输入python run.py就可以运行程序

from app import app #从app包中调用app模块
app.run() #运行程序

config.py

一些基本的配置

DEBUG = True #打开调试模式

app/init.py

from flask import …

flask学习笔记--1


基本知识

python html/css javascript http等

flask安装

Flask 依赖两个外部库: Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI 套件。 WSGI 是 Web 应用与 多种服务器之间的标准 Python 接口,即用于开发,也用于部署。 Jinja2 是用于渲染 模板的。

virtualenv

关于virtualenv

安装 virtualenv

$ sudo pip install virtualenv

安装完virtualenv后创建自己的文件夹

$ mkdir flask
$ cd flask
$ virtualenv venv
New python executable in env …

flask学习——数据库操作


flask 作为后端数据库操作是必要的,现在记录一下一些flask数据库的相关操作, 我将使用三种方法操作数据库
暂时使用较简单的sqlite作为例子

相关环境的安装

建议使用ve虚拟环境

sudo pacman -S sqlite # archlinux
sudo pip install virtualenv 
# 在vertualenv环境下执行
pip install Flask-SQLAlchemy Jinja2 SQLAlchemy

最好是多看文档

1.使用sqlite3模块API

参考资料
这是最简单的方法,不仅适用于flask,python的其他方面也一样适用,如爬虫之类

连接数据库

#!/usr/bin/env python
# -*- coding=UTF-8 -*-
import sqlite3
database = /path/test.db  #数据库文件路径
test = sqlite.connect('database' …