通过七牛云存储缓存加速Gravatar头像

2014年11月14日 没有评论 13 人阅读  

最近访问博客有点慢,查了下原因貌似是Gravatar官网被qiang了,是在很无语啊,除了呵呵以外我又能怎样呢?不过我还是要解决这个问题。
如果你使用七牛云存储的话,可以通过七牛云存储缓存加速Gravatar头像以解决因某qiang导致的官方头像加载不了,速度慢的问题。对于WordPress博客速度上的提升绝对是非常可观的。

一、申请七牛账号。
下面的操作需要你有七牛账号,如果没有可以先去注册一个,很简单的。不然不想注册也可以直接进行第三步“修改WordPress的get_avatar函数”,本人可以免费为您提供改该域下的七牛云存储缓存加速Gravatar头像服务。话说回来,还是建议你注册一个账号,用自己的才是最放心的。

二、源站加速。
你申请七牛账号后应该会有个空间的,比如我的空间名叫yidaoblog。进入空间后,选择“空间设置”->“基本设置”->“镜像存储”,输入多说所在的gravatar.duoshuo.com
镜像存储新增 阅读全文…

分类: 朝花夕拾 标签:

Python正则表达式详解

2014年11月12日 没有评论 15 人阅读  

先介绍下最常见的元字符metacharacter:

符号 含义 示例
literal 匹配字符串的值 foo
re1|re2 匹配正则式re1或re2 foo|bar
. 匹配一个任何字符(换行符除外) b.b
^ 匹配字符串开始 ^Dear
$ 匹配字符串结束 /bin/*sh$
* 匹配前面出现的零次或多次 [A-Za-z0-9]*
+ 匹配前面出现的一次或多次 [a-z]+\.com
? 匹配前面出现的零次或一次 goo?
{N} 匹配前面出现的正则式N次 [0-9]{3}
{M,N} 匹配前面出现的M次到N次 [0-9]{5,9}
[…] 匹配字符组里出现任意一个字符 [aeiou]
[x-y] 匹配从字符x到y中的任意一个字符 [A-Za-z]
[^…] 匹配不在字符集中的任意一个字符 [^A-Za-z]
(*|+|?|{})? 用于上面出现的任何“非贪婪”版本重复匹配次数 .*?[a-z]
(…) 匹配封闭括号中的正则式并保存为子组 ([0-9]{3})?

接下来再介绍几个特殊字符: 阅读全文…

分类: Python 标签: ,

搭建个人WordPress博客笔记

2014年11月11日 没有评论 30 人阅读  

最近花了几个晚上时间搭建了一个WordPress博客,这是我搭建的第一个独立博客,相比以前用过的一些博客托管网站,现在终于有了点家的感觉。
博客搭建并不复杂,只是过程有点繁琐,适合喜欢折腾的人,主要有下面几个步骤:
1. 购买域名(Domain Name)
2. 注册一个主机空间(Web Host)
3. 域名解析(DNSPod)
4. 安装WordPress
5. 安装WordPress主题
6. 设置固定链接
7. 安装插件
8. 图片存储
9. 添加网站图标
完成这几个步骤之后,博客基本上就可以正常使用了,当然后面还要做一些优化,这方面这里不予讨论,下面针对每一项操作做具体的介绍。

购买域名
域名当然要去最有名的去他爹网站(goDaddy)购买了,作为全球最大的域名注册商,且支持支付宝付款,是我们购买域名的不二选择。
godaddy
域名后缀推荐买一级域名“.com”,虽然“.com”域名比其他的贵些,但是goDaddy会定期做优惠活动,Google上搜索“goDaddy优惠券”会出现很多相关链接,我的域名就是在做活动的时候买的,只花了1美元。如果选中了喜欢的域名,而暂时没有活动时,不妨加入购物车后等几天,相信你会收到打折邮件的。另外购买特价域名时只能用信用卡,所以一张双币信用卡也是必不可少的。 阅读全文…

分类: 朝花夕拾 标签:

Django1.7开发博客(9)- 用户认证

2014年11月11日 没有评论 77 人阅读  

安全问题
你应该注意到了一点,当你去新建、修改和删除文章的时候并不需要登录,这样的话任何浏览网站的用户都能随时修改和删除我的文章。这个可不是我想要的!

编辑和删除的认证
我们需要保护post_new, post_edit和post_publish这三个视图,只有登录用户才有权去执行。django为我们提供了很好的帮助类,其实就是利用了python中的decorators技术。django中认证的装饰器位于模块django.contrib.auth.decorators中,名称叫login_required。
编辑blog/views.py文件,在import部分添加如下的导入语句:

from django.contrib.auth.decorators import login_required

然后在post_new, post_edit和post_publish这三个函数上添加@login_required,类似下面

@login_required
def post_new(request):
    [...]

好的,现在你再去访问下http://localhost:8000/post/new/,看看有啥变化。 阅读全文…

分类: Django 标签:

Django1.7开发博客(8)- 继续完善

2014年11月11日 没有评论 56 人阅读  

到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了。我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现。

草稿箱
之前我们新建文章的时候只是是保存到数据库,也就是仅仅保存了草稿,还没有对外发布,在博客首页上面是看不到的,因为published_date字段为空。这里我们需要添加一个草稿箱的链接。还是四部曲。
第一步添加一个链接:
打开mysite/templates/mysite/base.html文件,在

<h1><a href="/">Django Girls Blog</a></h1>

的上面一行添加如下链接:

<a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a>

第二步就是配置urls,在blog/urls.py中添加:

url(r'^drafts/$', views.post_draft_list, name='post_draft_list'),

第三步在blog/views.py中添加一个view:

def post_draft_list(request):
    posts = Post.objects.filter(published_date__isnull=True).order_by('-created_date')
    return render(request, 'blog/post_draft_list.html', {'posts': posts})

第四步添加一个template,新建blog/templates/blog/post_draft_list.html,内容如下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(7)- 实现功能

2014年11月11日 没有评论 58 人阅读  

到目前为止我们已经完成了一个django应用的所有基础部分。包括url配置、视图、模型和模板。接下来开始继续完善我们的博客系统了。
首先我们需要一个显示每篇文章的详细页面,对不?

文章详情链接
对于首页每一篇文章,我们希望点击标题后可以进入该文章的阅读页面。修改post_list.html中的标题href如下:

<h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1>

我来详细解释下这个{% url ‘blog.views.post_detail’ pk=post.pk %},{% %}表示使用django模板标签而不是普通的HTML文字,这里我们使用了url标签来生成真正的url链接。blog.views.post_detail是视图的全路径。

url配置
我们希望文章详细页面的链接类似这样:http://127.0.0.1:8000/post/1/
修改blog/urls.py为下面的这样:

from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^$', views.post_list),
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail),
)

这个看起来有点复杂,我们来解释下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(6)- 模板继承

2014年11月11日 没有评论 64 人阅读  

什么是模板继承?
就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容。通过这种方式你就需要在每个页面复制粘贴同样的代码了。如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一个模板就行了,这样最大化复用,减少了冗余,也减少了出错的几率,而且你敲的代码也少了。

创建一个base模板
一个base模板就是你全站所有页面都会继承的最基本的网站框架模板。我们在blog/templates/blog/中创建一个base.html模板:

blog
└───templates
    └───blog
            base.html
            post_list.html

打开base.html,然后将post_list.html的所有内容都复制过来,现在它的内容如下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(5)- 页面美化

2014年11月11日 没有评论 85 人阅读  

什么是css?
css是一种用来描述某种标记语言写的web站点的样式语言。这里我们并不想展开讨论,关于CSS我在这里推荐一个很不错的资源: Codeacademy HTML & CSS course
不想从头开始写,因为我们有现成的css框架,没必要重复造轮子。

使用Bootstrap
目前最流行的css框架非bootstrap莫属了,官网地址:http://getbootstrap.com/
只需要在你的html模板页面的开始部分添加下面几句就行了

<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>

你的工程里面不需要引入任何的文件,因为这里直接引用了bootstrap公共的css和js文件。

再次打开模板文件,效果如下: 阅读全文…

分类: Django 标签:

Django1.7开发博客(4)- 三部曲

2014年11月11日 没有评论 95 人阅读  

什么是三部曲?
其实在django中实现一个功能只需要三个步骤即可,这里我姑且叫它三部曲。
这三部曲就是:1.定义urls映射 2.定义views 3.定义templates

什么是URL?
URL就算一个WEB地址,你在浏览器输入这个地址,然后浏览器返回相应的网页给你。
比如http://djangogirls.com是一个URL,而127.0.0.1:8000同样也是个URL,默认就是http协议的。

Django中的URL工作原理
我们打开mysite/urls.py文件,会发现类似下面这样:

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
)

上面的两行注释先不要管,这个以后再用到。
django默认已经为我们添加了admin的URL配置。当django碰到以admin/开头的URL的时候会去admin.site.urls里面去寻找对应的匹配。所有和admin相关的urls配置都写在一个文件中,这样就便于管理了。 阅读全文…

分类: Django 标签:

Django1.7开发博客(3)- 部署

2014年11月11日 3 条评论 132 人阅读  

到目前为止,你的网站只能在你自己的电脑上访问到。你需要将它发布到公网上去让地球上的人都能看到,那么要怎么做呢?

Heroku简介
Heroku是一个主机托管平台,对于访问量不是很大的小应用是免费的,正好适用于我们的这个例子。
Heroku官网上有一篇django的教程:https://devcenter.heroku.com/articles/getting-started-with-django
这里我把它复制到这里来详细讲解一下。

requirements.txt文件
我们需要创建一个requirements.txt文件来告知Heroku需要在服务器上创建哪些python包。
不过首先,Heroku需要我们在本地按照一些包。在python虚拟环境virtualenv下面执行:

(myvenv) [mango@centos mysite]$ pip install dj-database-url gunicorn whitenoise

然后,在mysite目录,也就是manage.py所在目录执行:

(myvenv) [mango@centos00 mysite]$ pip freeze > requirements.txt

这条命令会新建一个requirements.txt文件,里面包含了工程的所有依赖包。
打开这个文件,添加下面这句话:

psycopg2==2.5.4

要想在Heroku上面运行,必须加上这句。 阅读全文…

分类: Django 标签: