基于Flask的微博系统开发

起因

个人认为学习一门技术最好是能够做一些项目,『这儿』是一个基于Flask搭建的轻博客,用户可以发帖关注等基本功能。从开发到基本上能用花了大概三个星期时间,我学习这个是跟随这《Flask Web开发》这本书开始做起来的。全书共205页,薄薄的一本,这本书是去年和公司同事凑单买下来的。一只放在书桌上没看,十一月份正好没有什么其他事情,就像做这个项目练练手。
网址:
http://zheer.me
github:
https://github.com/hsiunien/Phantom
主机:阿里云

域名邮箱:

以前注册了几个域名一直空置在那里没有用,这次正好可以用上,系统注册后会发一份邮件给用户,用自己的域名配上一个noreply@xxx.com 是不是很高大上?,没想到还非常简单,其实很多邮箱服务商提供域名邮箱的,如果自己有域名,只需把域名mx解析到域名服务提供商提供的地址,经过简单的验证就OK啦。

我之前选择的是网易免费域名邮箱,但是发现阿里云封了25端口,只能用其自己的服务,我花了1快钱买了他们的企业邮箱推送服务(贱但是还算良心)。

nignx配置:

因为我只有阿里云一台国内主机,因此很多域名都是解析到阿里云上的,而阿里云尽然没有备案的域名是不让解析到阿里云的服务器上的,但是发现通过https可以绕过这一环。
之前我用 proxy_pass http://127.0.0.1:5000转发到我的flask程序上,但是会弹出备案提示,应该也是内部通过http转发还是会被阿里云拦截的。换成uwsgi 就可以了,而且之前如果是发送邮件的话绝对地址会变成127.0.0.1,很坑爹,下面是我的配置参考:

server{
    server_name www.zheer.me zheer.me;
    root /var/www/{path};
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/{path}/ca_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/{path}/private.key;
    ssl on;
    location /{
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5001;
    }
}
server{
    listen 80;
    server_name www.zheer.me zheer.me;
    add_header Strict-Transport-Security max-age=15768000;
    return 301 https://$server_name$request_uri;
}

数据迁移:

最开始参照的是书本中的做法用的sqlite3 由于是轻量级的数据库,操作简单方便,但是上线后感觉这样不是很安全,为了以后拓展,改用mysql(MariaDb,由于mysql已经被orical收了,所以用MariaDb,目前因为没有用太多功能,没有发现有多大不兼容),连接头需要改成如下格式并且安装mysql的适配器(轮子,我喜欢这个词)PyMySQL

mysql+pymysql://username:pwd@localhost/database_name

迁移发现最大的坑是不同数据库数据的迁移,虽然说数据量不多但是我想从sqlite3中把数据导出来到mysql却不是那么容易,
1.首先mysql的数据库表结构可以通过 sqlalchemy 重新构建
2. sqlite3 data.sqlite .dump >> back.sql
3. 连接mysql 并use相应数据库, 运行source back.sql

什么?报错了是吧?

因为sqlite生成的sql语句是不适用于mysql的,比如会把insert table 加上字符串单引号,但是,mysql中是只能用反单引号的。因此特地写了一个py脚本去转换 参考这里 https://github.com/hsiunien/Phantom/blob/master/migratedata.py
并顺带学习了一下正则的知识。
生成出来后,要人工核对一下,可能(一定)有bug的。我只把其中的insert抽出来,到一个文件然后运行source changed.sql 即将老数据导入到了mysql。

Leave a Reply

Your email address will not be published. Required fields are marked *