forecho 的独立博客

把生命浪费在美好的事物上

Django初使用

2013年04月26日

Python的项目可以放在你电脑的任何一个文件夹中。 转到你创建的目录,运行命令django-admin.py startproject mysite。这样会在你的当前目录下创建一个目录。(名为mysite的项目) 文件如下: init.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。 manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。 settings.py :该 Django 项目的设置或配置。 查看并理解这个文件中可用的设置类型及其默认值。 urls.py:Django项目的URL设置。 可视其为你的django网站的目录。 目前,它是空的。   启动服务器 切换到项目目录里 (cd mysite ),运行下面的命令: python manage.py runserver 于是就会返回一个项目的浏览地址(默认一般是:http://127.0.0.1:8000)。 退出这个状态可以使用:CTRL+C。 默认情况下, runserver 命令在 8000 端口启动开发服务器,且仅监听本地连接。 要想要更改服务器端口的话,可将端口作为命令行参数传入: python manage.py runserver 8080 通过指定一个 IP 地址,你可以告诉服务器–允许非本地连接访问。 如果你想和其他开发人员共享同一开发站点的话,该功能特别有用。 0.0.0.0 这个 IP 地址,告诉服务器去侦听任意的网络接口。(这个IP必须是本机的IP地址) python manage.py runserver 0.0.0.0:8000 注:三引号,是python换行字符串的格式。

Comments

baocaixiong: 这个主题。。我想要。。。

Mac OS 上安装MySQLdb一系列问题

2013年04月24日

话说装这个插件非常麻烦。 首先你得先装MySQL。先去下载64 位的MySQL,然后安装。步骤你可以参照这篇文章~ 其实他写的已经很详细了,但是我安装的过程中遇到的很多问题。 声明一下:我是下载MySQLdb然后手动安装的,没有用 easy_install去安装。 1、报错:

sh: mysql_config: command not found
......
......
EnvironmentError: mysql_config not found

解决办法是:在MySQLdb源码里面找到site.cfg 修改为:

mysql_config = /usr/local/mysql/bin/mysql_config

然后python setup.py install 2、报错:

......
import _mysql
......
Reason: image not found

解决方法是:需要解决动态引入的问题了(重新做一遍,并且设置环境变量):

$ python setup.py clean
$ python setup.py build
$ python setup.py install
$ export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

或者运行下面两行命令:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

参考资料:http://stackoverflow.com/questions/4730787/python-import-mysqldb-error-mac-10-6  3、报错: error: command ‘clang’ failed with exit status 1报错的时候 解决方法是:去Xcode的Preference的Download下的Components下载command line tool 4、在$ python manage.py syncdb 的时候报错:

ImportError: cannot import name smart_unicode

解决办法是:在「/Library/Python/2.7/site-packages/tinymce/widgets.py」文件里找到下面代码:

from django.forms.util import smart_unicode

替换为:

from django.utils.encoding import smart_unicode

读孟非的《随遇而安》

2013年04月18日

前一阵子发现亚马逊中国上面开始卖正版的电子书了,刚开始没有关注的。在中国看电子书向来都是免费的,人们是不会花钱去买的。 但是过几天发现上面有¥1.00的电子书,于是心里有痒痒了。这个对我诱惑很大啊,特别是在网上找了很久所找到的电子书都是不全的之后,那个心情很是沮丧。犹豫了几天之后,果断的一次性在亚马逊中国上买了三本电子书。是正版的,大多数都有目录,有图片,排版好,心情大好。我目前只能接受¥5.00以下的电子书。并且买书之前我会去看豆瓣等网上查一下资料然后才考虑是否值得去买。亚马逊中国有一个活动是『Kindel今日特价书』,每天换一本书,价格都很便宜,还有一个活动是『Kindle每周精选好书』,都是很吸引流量的活动。这两个活动使我都快养成一个每天都登录亚马逊中国的习惯了。这点国内的其他电商真应该向他们学习。 对比『多看书城』、『豆瓣阅读』、『kindle商店』,还是亚马逊的Kindle上卖的书比较便宜、实在。其他京东电子书、当当电子书我就不多说了。唯一遗憾的是目前Kindle没有进入中国市场,这导致你在亚马逊中国上买的书不能发送到Kindle设备上去读,这点有点坑爹了,所以当听到Kindle四月底要进入中国,还是很期待的。在iPhone上用Kindle APP看书还算勉强吧,至少做笔记还算方便。 以上都是些废话,下面我们开始进入本篇文章的主题,我们来谈谈这本书。 我相信大多数人听过孟非这个名字就因为前几年大红大紫的『非诚勿扰』相亲节目了。那时候的这个节目真是火,很少看综艺节目的我都看了几集,记得后来『非诚勿扰』的一次停播大调整之后我就很少关注了,后来就慢慢淡了。 在Kindle商店淘书的时候,无意中看到这本书,然后简单的看了一下简介以及评价之后就果断的买了下来。 这本书基本上就是孟非写的自传吧,从他的小时候在重庆如何调皮到后来去了南京再到后来父母离异,从他没上大学然后出来第一份工作是在印刷厂当工人到如何步入到电视台这行中。我本人对重庆那段比较感兴趣,对他后来去新疆去拍纪录片那段也非常的感兴趣。那时候的新疆有很多是未经过开发的自然美,跟着他我也算是了解了很多关于新疆的事。后面他也淡到了关于狗还有一些关于他在国外做采访的一些见闻,有介绍一些国家以及那些国民的一些特点,其实还挺长见识的。 给我记忆犹新的有重庆的小面,以后有机会定会去尝尝。还有新疆的美食,他们喝酒的习俗,还有那段过大桥爬斜坡去拍公主堡的惊险经历。还有就是德国人的办事性格以及希腊的民主。以色列工会的强大,以及他们很有规矩的罢工,并且知道了以色列还有一个很强大的『人民公社』- 『基布兹』。 总之这还算是一本的不错的书,这书不能说太细了,自己看吧。 对了,最后孟非也是一个严重偏文科的学生。

Comments

baocaixiong: 这本数我也看了。其实孟非不错的。

PHP最高效的去判断数组最后一个或第一个元素

2013年04月09日

首页这个方法我是无意中在知乎上看到的,确实很实用,原文地址~

思路:先把数组中的第一个元素或最后一个元素用PHP自带的函数删掉,然后单独使用的时候可以单独调用。

删掉数组最后一个元素用array_pop()这个函数。 示例:

1
2
3
4
5
6
<?php
    $a=array("Dog","Cat","Horse");
    print_r(array_pop($a));
    echo '</br>';
    print_r($a);
?>

输出结果:

1
2
Horse
Array ( [0] => Dog [1] => Cat )

删掉数组第一个元素用array_shift()这个函数。方法跟上面类似,我就不写示例来。 这个方法效率很高,很实用。非常感谢原作者。  

值得注意的地方:

下面我们来说说使用这个array_shift()函数,值得注意的地方,在下面这个网址输入以下代码:

1
2
3
4
5
$a=array('3' => "Dog", 'a' => "Cat", '0' => "Pig", '4' => "Horse");
// print_r(array_pop($a));
print_r(array_shift($a));
echo '</br>';
print_r($a);

那么输出的结果会是这个:

1
2
Dog
Array ( [a] => Cat [0] => Pig [1] => Horse )

是不是与想象中不一样,数组中的最后一个值的键位由4变成了1,所以使用的时候要注意。但是array_pop()这个函数没有出现这种情况。

Yii调试错误以及一些技巧(持续更新)

2013年04月02日

Yii添加不了数据:

$admin = new Admin;        
$admin->username = $username; 
$admin->password = $password; 
if($admin->save()>0){ 
   echo "添加成功";  
}else{  
   echo "添加失败";  
}

上面是一条最简单的Yii添加数据方法,按着这个来写,能读出数据,但是还是无法写入数据库,利用下面的这段代码我们可以找出错误的原因。

$admin->save();
var_dump($admin->errors);
exit;

最后一般能找出原因。 Yii的findAll打印输出问题:

$project=Project::model()->findAll();
foreach($project as $v){
    echo $v->attributes['title'];
}

findAll条件查询简写:

$criteria = new CDbCriteria(array(
    'condition' => '(id=35 OR id=36) AND commend=2 AND status=2',//多个条件查询
    'limit' => '1',
    'order'=>'id DESC',
    //'order'=>'RAND()',  //随机筛选
 ));
 $video = News::model()->findAll($criteria);

或者可以这样写:

$video = News::model()->findAll(array(
    'condition'=>'(id=35 OR id=36) AND commend=2 AND status=2', 
    'order'=>'id DESC', 
    'limit'=>1,
));

Yii页面包含其它页面方法:

<?php $this->renderPartial('/comment/_form',array(
 'model'=>$comment,
 )); ?>

清空缓存

Setting::model()->destructCache();

更新数据

//第一个是根据条件更新多行数据
//第二个是根据主键更新单条数据
Posts::model()->updateAll(array('title'=>'Hello World'), array('condition'=>'user='.Yii::app()->user->getId()));
$count = User::model()->updateByPk($_POST['userid'], array('name'=>'forecho'));
if($count>0)
{
echo "更新成功";
}

关于分页联表查找时,字段重复的问题

$dataProvider=new CActiveDataProvider('Post', array(
    'criteria'=>array(
        'condition'=>'status=1',
        'order'=>'create_time DESC',
        'with'=>array('author'),//调用relations
    ),
    'pagination'=>array(
        'pageSize'=>20,
    ),
));

主表用的是主表名,关联表是关系名. 读取数据的时候,比如说两个表ID字段重复了。要读取第二个ID的话,可以这样读取:

$data->author->id//根据文章userid关联user表读取id

添加JS和CSS

Yii::app()->clientScript->registerCoreScript(Yii::app()->homeUrl.'/js/jquery.js');
Yii::app()->clientScript->registerCssFile(Yii::app()->homeUrl.'/css/style.css');

验证规则添加情景(页面) Yii的验证规则要写在Model的rules里面,例如下面的这行代码:

array('psword, email, old_psword, re_psword, captchal', 'required', 'on'=>'forgot'),

解释一下,有时候不止一个页面会使用同一个Model里面的验证规则,这个时候为了不冲突,我们需要设置情景,上面的'on'=>'forgot'就是自定义的情景。如果要使用的话,还需要要在相应的控制器的action里面添加情景,代码如下:

$model->scenario = 'forgot'; //设置当前情况下的验证场景

Yii里设置SESSION过期时间 在app config里,设置:

'components'=>array(
    'session'=>array(
        'timeout'=>3600,
    ),
)

查询个数

$count = Notification::model()->countByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));

Yii 数据save后得到插入id

$model->save();
//得到上次插入的Insert id
$id = $model->attributes['id'];

添加手机号码验证 在Model里面的rules添加代码:

array('phone', 'match', 'pattern'=>'^13[0-9]{9}|15[012356789][0-9]{8}|18[0256789][0-9]{8}|147[0-9]{8}$','message'=>'请输入正确的手机号码'),

整理一下常用的MySQL语句

2013年03月07日

INNER JOIN … ON用法 查询数据库多个表

1
select * from table1 inner join table2 on table1.id=table2.id

概括为: FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表X ON Member.字段号=表X.字段号

连接两个数据表的用法:

1
FROM Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort

语法格式可以概括为:

FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号

连接三个数据表的用法:

语法格式可以概括为:

FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号  

DISTINCT

使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录。 用法:

1
SELECT DISTINCT(column) FROM tb_name

语法格式可以概括为:

SELECT DISTINCT(字段号) FROM 表  

GROUP BY 语句

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 用法:

1
SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name

PHP知识点笔记

2013年02月19日

  1. ->字符链接对象变量和属性名来访问属性变量。
  2. _(在类中)_属性可以让对象存储数据,类方法则可以让对象执行任务。
  3. 当使用new操作符创建对象时,__construct()_(构造方法)_方法会被调用。
  4. PHP是一种弱类型语言,即变量不需要声明为特定的数据类型。
  5. 要创建一个子类,必须在类声明中使用extends关键词。
  6. 调用父类方法,需要使用parent关键字。
  7. 要引用一个类而不是对象的方法,可以使用::而不是->
  8. 类是生成对象的模板。
  9. 静态方法必须用static关键词来声明。
  10. 访问静态元素时使用::来链接类名和属性或类名和方法。有self::parent::static:: 以及 forward_static_call()详情
  11. 常量属性用const关键字来声明,并且只能用大写字母来命名常量,只能通过类而不能通过类的实例访问常量属性。(即::
  12. 使用abstract关键字来定义一个抽象类。
  13. PDO(PHP Data Object)类为不同的数据库应用程序提供了统一的接口。
  14. empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。
  15. getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
  16. PHP的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。
  17. MySQL的事务处理就是关闭自动提交,插入的数据暂不写进数据库,保留到临时区域,然后在提交

面向对象编程思想(二)

2013年02月17日

示例:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
//声明一个笔记本的类
class NoteBook{
    //成员属性
    private $name;
    private $type;
    private $os;
    private $work;
   
    //构造函数:创建和初始化对象成员属性
    function __construct($name,$type,$os,$work){
        $this->name = $name;
        $this->type = $type;
        $this->os = $os;
        $this->work = $work;
    }
   
    function __get($proName){
        return "======>".$this->$proName."<======<br/>";
    }
   
    function __set($proName,$proValue){
        echo "======>".$this->$proName = $proValue."<======<br/>";
    }
   
    function __isset($proName){
        return isset($this->$proName);
    }
   
    function __unset($proName){
        unset($this->$proName);
    }
   
    //成员方法
    function say(){
        return "<p>应用于".$this->work." - ".
               $this->name." - ".
               $this->type." - ".
               $this->os."</p>";
    }
}
   
$macbook = new NoteBook("MacBook Pro","MC374","Mac OS X Snow Leopard","设计");
echo $macbook->say();
echo $macbook->name;
echo $macbook->type;
echo $macbook->os;
echo $macbook->work;
   
echo "<hr/>";
   
$macbook->name = "SONY";
$macbook->type = "ZT288";
$macbook->os = "Windows 7";
$macbook->work = "娱乐";
   
unset($macbook->name);
   
echo "<hr/>";
   
if(isset($macbook->name)){
    echo "成员属性name存在于NoteBook类中";
}else{
    echo "成员属性name不存在于NoteBook类中";
}
   
?>

面向对象编程思想(一)

2013年02月17日

1
2
3
4
5
6
7
8
<?php
类{
成员属性(申明变量)
成员方法(函数)
}

实例化类的过程,我们会产生一个对象
?>

例如:

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
38
39
40
<?php
//声明一个笔记本的类
class NoteBook{
    //成员属性
    public $name;
    public $type;
    public $os;
    public $work;
    //构造函数:创建和初始化对象成员属性
    function __construct($name,$type,$os,$work){
        $this->name = $name;
        $this->type = $type;
        $this->os = $os;
        $this->work = $work;
    }
    //析造函数:回收内存种的垃圾变量
    function __destruct(){
        echo "销毁内存种使用过的垃圾变量".$this->name."<br/>";
    }
    //成员方法
    function say(){
        return "<p>应用于".$this->work." - ".
               $this->name." - ".
               $this->type." - ".
               $this->os."</p>";
    }
}

$macbook = new NoteBook("MacBook Pro","MC374","Mac OS X Snow Leopard","设计");
echo $macbook->say();
$macbook = null;

$sony = new NoteBook("SONY","ZT288","Windows 7","娱乐");
echo $sony->say();
$sony = null;

$samsung = new NoteBook("SAMSUNG","B002","Ubuntu Linux 10.04","编程");
echo $samsung->say();

?>

读《拆掉思维里的墙》

2013年02月06日

终于赶在年前把这本书看完了。陆陆续续的这本书算是看了有一个月了吧,不禁再次感叹自己看书真是很慢,不过这确实是一本值得一看的书,推荐看到此篇文章的你有时间去看一下。 刚开始我是在网上找的电子书看的,但是当看到60%,换了一款软件重新下载之后发现之前看得不过才20%,这才发现之前的那个版本真是坑爹的不全,后来又去体验了一下iPhone版的Kindle软件,发现亚马逊有Kindle版的这本书卖,但是那时候标价是7元左右,一直在纠结有没有必要去话这个钱去买网上可以免费找到的电子书看,到了那天晚上发现降价了,变成3元了,于是果断买了下来,随之一起买了另外两本1块钱的电子书,话说这可是我头一次花钱支持电子书。好了,吐糟完毕,下面进入正题。  

看完这本书我收获很多,古典老师帮我拆掉了很多思维里的墙,让我走出了墙外。

第一章就是讨论要不要买房子的问题?什么时候买房子的问题?古典老师引用了股神巴菲特的故事以及一个小的案例给我们讲述的很明白。让我进一步认识到了房子不能早买,买完了你就成房奴了,成为房奴你就有很多限制了,因为你必须要每个月还贷款,所以即使你想换一份工作你都不敢,因为你怕没工资发。如果你把前期买房子的钱花在投资自己身上那就不一样了,这样我们就有更大的发展空间。所以不要过早的成为房奴,听说欧美国家大多数人买房子的时候都是40岁左右,我们现在20几岁年纪轻轻的凭什么就要买房子。

买房子能带来安全感吗?其实不然,安全感不是拿回来的,而是给回来的。

第二章就是讲一些兴趣方面的事,就是让我们发现自己的兴趣,做个有趣的人。很多人都不知道自己对什么感兴趣,但是又不去找自己的兴趣,最终成为一个无趣之人。我们应该要去寻找自己的兴趣,不要害怕去尝试,即使你失败了,其实也没什么大不了,至少你获取了经验,你知道了这件事我不感兴趣,然后你可以继续去找另外一件事去尝试,知道你发现你的兴趣了。

第三章是讲心智模式的事,用星座真实性的故事来讲述确实很有意思。

人们会因为对自己「星座性格」的相信,就慢慢发展出那样的性格。星座-性格的心智模式不仅让他们看到那样的世界,也让他们相信那就是自己的性格,然后按照那样的性格来生活,最后真正变成为星座描述的人。

我以前就认为星座就是一件不科学的事情,以星座来划分人更是一件不科学的事情,所以我是不相信什么星座的。高中的时候看那些杂志上讲述星座的性格,你会发现不管你去看哪个星座的描述其实和自己都有点像,哈哈,是不是很坑爹。

其实很多时候我们是受到了我们的心智模式的限制,限制了我们的思维。古典老师在这篇又引用了一些故事给我们讲述了这些道理。为什么有钱的人不快乐呢?因为在我们没钱的时候,就一直想着如果有钱了就一点的快乐的,于是就产生了「有钱就能快乐」的心智模式,于是我们为了快乐就拼命的去赚钱,但是真的是这样的吗?当我们赚够了一定钱的时候发现我还是不快乐,于是我们就质疑自己,是不是因为我们的钱没用赚够,于是我们就更加努力的去赚钱,更多的熬夜,更多的加班,很少回家。直到把自己累垮了。其实我们的快乐跟钱并没有多大的关系,钱只是让我们变得快乐的手段之一。

第四章讲的是关于成功学的,古典老师跟我们讲述了很多有名成功学故事背后的故事,其实大多数成功学都是被夸大了的,不然怎么叫成功学呢?大多数成功学都是不可复制的,他们之所以成功必定有原因的。半年前看过老罗的「我的奋斗」大学演讲视频,其实他就说过「成功学都是骗人的却是最好的精神鸦片」。但是话又说回来,什么才算真正的成功呢?是变成有钱人,变成名人,还是最终达到一件事钱。其实都不是,成功的本义应该是:越走越近。找到你人生的真正目标


那些你不会随着外界环境改变而改变的目标,比方说成为一个有承担责任的人。那么成功就是让你离你的目标越走越近。

第五章让自己找到热衷一生的事业,如果你现在还没找到的话,那么你可以好好看一下这一章,并且可以尝试一下古典老师的方法。

大学生为什么找工作难?其实找工作不算难,难的是很多人非要找对口的。最常见的理由就是「不要浪费了自己学了4年的专业」这些学生们从来都没有思考过:什么才是真正意义上的浪费?

已经投入并且损失的价值,会造成我们对未来投入的判断。这就是沉没成本模式。由于害怕损失,所以继续投入,到后面损失却更大。这就是我们常犯的错误,沉没成本模式。

第六章讲的就是另外一张活法。其实在大多数情况下掌控我们心情的都是我们自己,同样一件事情,有的人把心态放好,获得的是开心。我们不应该把开心不开心这两种心情,让别人去决定。我们不应该让自己变成「受害者」应该让自己变成「掌控者」,由自己去掌控自己。

刚刚毕业的大学生,最容易讲的一句话就是:这不公平!

你有没有发现,随着年纪的越来越大,将这句话的人越来越少?而且每次听到的时候你还在心里暗暗好笑,你句话就如同你妈是女人这样的简单明了。那是因为,慢慢地你开始了解,这个世界本来就是不公平的!

有人说社会就是一棵大树,树上爬满了猴子。每一只猴子都笑脸向上,屁股向下。如果你向上看,看到的全是屁股;如果你向下看看到的全是笑脸。如果你今天爬在树的中间,你会作何感想?你会不会想说,NND,我踩着你们的头,上到顶就好办了!但是当你有一天到树顶,你才发现,你爬上去的是森林里面最矮的一棵树,其他数上还有无数在你头顶拉屎的猴子!也许你还有一口志气,于是你继续向上爬,等到你爬到森林最高的一棵树的树顶,突然「蹦」的一声撞得眼冒金星,你才发现,这森林上空的蓝天其实是贴上去的,那只手一层无法打破的玻璃钢。

即使是世界哪都不公平,但是我们还是可以找到那个我们能改变的不公平。

第七章是关于幸福的事。其实还是有很多人活在父母的剧本里面,父母帮你写好了剧本,你什么时候干什么事,他们都帮你安排好了,你要做的事就是好好当一个演员他们的戏,但是我只想说这样的人生是可悲的。

父母为孩子苦心写好一场生命的剧本,仔细打磨,多方求证,打理好所有的演出成功所需的明暗规则,只等待孩子戴着面具,上场表演他们写好的剧本,等待他们在看台下的掌声。

孩子带着怨气表演,最后无法掩饰内心的难过,摔掉面具罢演。

那么遇到这样的事情我们该怎么处理呢?其实你要做的就是努力争取自己的人生,做自己想做的事。

因为只有坚持做你喜欢的事情,你才会真正地幸福起来。而父母亲会慢慢发现,他们坚持的只是让你幸福的方式,如果你真的用自己的方式找到幸福,他们也会真正地快乐。

Comments

蓝眼夏娜: 写的真多啊,我觉得我得收回那句“你真懒”的话了