《Flask Web开发》重点笔记

《Flask Web开发》中实现例程中遇到的问题及解决方法记录。

1、python3.5虚拟环境:

1)从Git上克隆源代码:

E:\python3.5>git clone http://github.com/miguelgrinberg/flasky.git    **克隆源代码到flasky
E:\python3.5>cd flasky               **进入文件夹flasky
E:\python3.5>git checkout 1a         **签出1a版本

2)在flasky文件夹中创建虚拟环境:

E:\python3.5\flasky>python –m venv venv       ** venv是虚拟环境的名字

3)激活虚拟环境:

E:\python3.5\flasky>venv\Scripts\activate

如果出现表明虚拟环境已激活
4)退出虚拟环境:

<venv>E:\python3.5\flasky>deactivate

2、安装flask:

1)安装flask:

<venv> E:\python3.5\flasky>pip install flask

2)测试是否安装成功:

<venv> E:\python3.5\flasky>python
>>>import flask
>>>exit()              **退出python命令行

如果没看到错误提示则成功安装flask。

3、发送邮件的修改:

app.config['MAIL_SERVER'] = 'smtp.163.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')

设置环境变量:

<venv> E:\python3.5\flasky>set MAIL_USERNAME=*******
<venv> E:\python3.5\flasky>set MAIL_PASSWORD=*******
<venv> E:\python3.5\flasky>set FLASKY_ADMIN=*******@163.com

4、数据库迁移:

1)首先要安装Flask-Migrate:

<venv> E:\python3.5\flasky>pip install flask-migrate

2)将MigrateCommand类使用db命令附加:
修改hello.py:

from flask_migrate import Migrate, MigrateCommand
…
migrate = Migrate(app, db)
manager.add_command(‘db’, MigrateCommand)

3)在迁移数据库之前要用init子命令创建迁移仓库:

<venv> E:\python3.5\flasky>python hello.py db init

4)migrate子命令来自动创建迁移脚本:

<venv> E:\python3.5\flasky>python hello.py db migrate –m “initial migration”

5)更新数据库:

<venv> E:\python3.5\flasky>python hello.py db upgrade

如果第一次执行第4、5两步,其作用和调用db.create_all()方法一样。
6)如果在某个场景中要在User表中增加phone字段,过程如下:
1>修改hello.py中的User表模型,增加phone字段:

Class User(db.Model):
…
id = …
username = …
role_id = …
phone = db.Column(db.String(64))   #这是新增的字段

2>创建迁移脚本:

<venv> E:\python3.5\flasky>python hello.py db migrate –m “add column phone”

可以进migrations/version/XXXXXadd column phone.py这个文件,看到upgrade函数里有了增加字段的sql语句,说明迁移脚本创建成功。
3>更新数据库:

<venv> E:\python3.5\flasky>python hello.py db upgrade

4>查看User表结构,字段是否被增加进去了:
进入shell:

<venv> E:\python3.5\flasky>python hello.py shell
>>>User.phone

如果没有报错说明迁移成功。

5、将Role写入数据库:

在运行第11章的程序之前,至少要在命令行将Role写如数据库一次,否则数据库中的角色表单为空,就不能根据角色得到不同的权限。
使用shell会话将角色写入数据库:

<venv> E:\python3.5\flasky>python hello.py shell
>>>Role.insert_roles()
>>>Role.query.all()
[<Role uAdministrator’>, <Role uUser’>, <Role uModerator’>]

写入之后就可以正常执行11章的程序了。还要注意设置环境变量:

MAIL_USERNAME、MAIL_PASSWORD、FLASKY_ADMIN

6、区分开发环境与生产环境的依赖包:

ForgeryPy是一个可以自动生成虚拟信息的Python包,可以用pip进行安装:

<venv> E:\python3.5\flasky>pip install forgerypy

ForgeryPy在这里只是为了在开发过程中进行调试,所以并不是这个程序的依赖,为了区分生产环境的依赖与开发环境的依赖,可以把文件requirements.txt换成requirements文件夹,他们分别保存不同环境中的依赖,在这个文件夹中我们可以创建一个dev.txt文件,列出开发过程中所需的依赖,再创建一个prod.txt 文件,列出生产环境所需的依赖。由于两个环境所需的依赖大部分是相同的,因此可以创建一个common.txt 文件,在dev.txt和prod.txt 中使用-r 参数导入。如dev.txt中的内容如下:

-r common.txt
ForgeryPy==0.1

7、生成虚拟用户和博客文章:

在安装了ForgeryPy包之后,就可以生成虚拟用户和虚拟博客文章了。
首先,需要在User模型和Post模型中增加类方法,用来产生虚拟用户和文章:
在app/models.py文件中增加如下代码:

class User(UserMixin, db.Model):
    #...
    @staticmethod
    Def generate_fake(count=100)
        from sqlalchemy.exc import IntegrityErro
        from random import seed
        import forgery_py

        seed()
        for i in range(count):
            u=User(email=forgery_py.internet.email_address(),
                    username= forgery_py.internet.user_name(True),
                    password= forgery_py.lorem_ipsum.word(),
                    confirmed=True,
                    name= forgery_py.name.full_name(),
                    location= forgery_py.lorem_ipsum.sentence(),
                    member_since= forgery_py.date.date(True))
            db.session.add(u)
            try:
                db.session.commit()
            except IntegrityError:
                db.session.rollback()

class Post(db.Model):
    #...
    @staticmethod
    def generate_fake(count=100):
        from random import seed, randint
        import forgery_py

        seed()
        user_count=User.query.count()
        for i in range(count):
            u=User.query.offset(randint(0, user_count - 1)).first()
            p=Post(body=forgery_py.lorem_ipsum.sentences(randint(1, 3)),
                timestamp=forgery_py.date.date(True),
                author=u)
            db.session.add(p)
            db.session.commit()

在python shell中利用新添加的方法可以轻易生成大量虚拟用户和文章:

<venv> E:\python3.5\flasky>python manage.py shell
>>>User.generate_fake(100)
>>>Post.generate_fake(100)

8、支持富文本文章:

PageDown:使用JavaScript实现的客户端Markdown到HTML的转换。
Flask-PageDown:为Flask包装的PageDown,把PageDown集成到Flask-WTF表单中。
Markdown:使用Python实现的服务器端Markdown到HTML的转换程序。
Bleach:使用Python实现的HTML清理器。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴普蒂斯塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值