书签不够用了
例子1:https://gist.github.com/bkdinoop/6698956
def safe_clean(text):
from flask import Markup
from bleach import clean
tags = ['b','i','font','br']
attrs = {
'*':['style'],
'font':['color']
}
styles = ['color']
return Markup(clean(text,tags = tags,
attributes = attrs,
styles = styles))
自定义filter过滤器
:confuse: signature from "Thorsten Töpper atsutane@freethoughts.de" is unknown trust
解决:
$ sudo pacman-key --refresh-keys
arch错误:无法准备事务处理 (无法满足依赖关系) :: package-query: 要求 pacman<4.3
解决:
$ sudo pacman -R package-query yaourt
更新python2-pip出现问题
$ sudo pacman -Syu
错误:无法提交处理 (有冲突的文件)
python2-pip: 文件系统中已存在 /usr/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/socks.py
python2-pip: 文件系统中已存在 /usr/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib …
简单使用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 …
虽然算不上是实时预览
实时预览功能等有时间在把它加上
还是把实时预览加上,不过实时预览可能会对网站有所影响,读者看着加上
前端
<script type="text/javascript">
function previewTopicContent(){
$.getJSON("{{ url_for('blog.preview') }}", {
content: $("#content").val(),
}, function(data) {
$("#showPreview").html(data.result);
});
/*setTimeout('previewTopicContent()',300);*/
};
</script>
或者
function previewTopicContent(){
$.get("{{ url_for('blog.preview') }}", {
content: $("#content").val(),
}, function(data) {
$("#showPreview").html(data);
});
};
服务端
@site.route('/pages/preview')
def preview():
from misaka import Markdown, HtmlRenderer
from flask import jsonify
content = request.args.get …
以前都是"吃快餐",利用别人的例子进行修改,弄得自己不明不白的,这次放假,静下心来好好的看看官方文档, 才发现写的代码有很多不必要的东西,可以进行很多优化
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 …
必须得记下来,否则等那天看到又要浪费时间了,主要记录访问时间这里
'''记录访问的时间'''
now_time = int(time()) #首先得到当前时间戳
'''查询上次访问的时间和最近访问的时间'''
query_last_time = redis_data.zscore(visited_users,'last_time')
query_now_time = redis_data.zscore(visited_users,'time')
'''判断查询是否为空,一般是第一次访问还未记录的IP'''
if query_last_time is None:
query_last_time = now_time
pipe.zadd(visited_users,query_last_time,'last_time')
if query_now_time is None:
query_now_time = now_time
'''将当前时间与last_time进行对比,十分钟之内不记录'''
if now_time - query_last_time >= 600:
'''这里类似交换更新数据,把query_now_time变成last_time,把now_time更新'''
pipe.zadd(visited_users,query_now_time,'last_time')
pipe.zadd(visited_users,now_time,'time')
else:
pipe.zadd(visited_users,now_time,'time')
虽然以前安装过但是没有记录,这次重新安装,趁机记录下来,省得满世界地找
环境: centos7
安装nginx
参考资料
使用yum list nginx
会发现nginx是1.6的版本,但现在nginx已经到了1.9,虽然不必那么新,
但是过旧的版本说不定会出现安全问题
# vim /etc/yum.repos.d/nginx.repo
输入
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
然后
# yum list nginx #你会发现nginx已经是1.8的版本
# yum install nginx
# systemctl start nginx #启动nginx
安装python3
centos7默认安装了python2.7的版本,但我习惯用python3,但是centos无法通过yum install python3安装, 只好自己编译了
安装必要的文件 …
supervisor安装请参考flask应用部署——安装环境
生成配置文件
# cd /etc
# mkdir -p supervisord/conf.d
# echo_supervisord_conf > /etc/supervisord/supervisord.conf
修改supervisord.conf
# vim supervisord.conf # G直接跳到最后一行
取消下面注释并修改
[include]
files = /etc/supervisord/conf.d/*.ini
ok,现在可以在/etc/supervisord/conf.d/目录下创建配置文件了
# vim honmaple.com.ini
输入以下内容
# 进程的名字
[program:website]
# 命令
command=/home/www/honmaple.com/venv/bin/gunicorn run:app -c /home/www/honmaple.com/gunicorn.conf
# 网站目录 …
参考资料
准备
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 …