关于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()
# 或者
question = Questions.query.filter(Questions.name=='hello',Questions.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.Column(db.DateTime, nullable=False)

    __mapper_args__ = {
        "order_by": time.desc()
    }

如代码所示,使用__mapper_args__就可,__mapper_args__可以做很多事,具体看 …

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]
# 省略-1
a[-2:]
# 每两个取一个
a[::2]

迭代

判断是否可迭代

isinstance(x, Iterable)

下标循环

>>> for i, value in …

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 
                {
                    $("#showerror").show();
                    $("#error").text(result.error);
                }
            }
        });
    });
});
</script>

ajax使用CSRF

参考文档

首先注册CSRF

from flask_wtf.csrf import CsrfProtect
csrf …

关于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('用户名:',
                   [Required()])

限制name长度

from wtforms.validators import Length
name = StringField('用户名:',
                    [Length(min=4,
                           max=20 …

使用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=init_chars,
                        img_type="PNG",
                        mode="RGB",
                        bg_color=(255, 255, 255),
                        fg_color=(0, 0, 255),
                        font_size=18,
                        font_type …

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 the following questions so this script can generate the files
needed by Pelican.


> Where do you …