zoukankan      html  css  js  c++  java
  • #flask学习笔记-08:留言板(一)

    Step 1: 目录结构

    /flaskr
        /static
        /templates
    

    Step 2: 创建配置文件

    创建flaskr/config.py文件,配置相关的参数。

    # configuration
    DATABASE = '/tmp/flaskr.db'
    DEBUG = True
    SECRET_KEY = 'development key'
    USERNAME = 'admin'
    PASSWORD = '123456'
    

    配置依次是:
    1.数据库文件位置
    2.是否开启debug模式
    3.session安全连接
    4.用户名
    5.密码

    调用config.py配置文件,创建flaskr.py,添入以下代码。

    import sqlite3
    from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
    
    app = Flask(__name__)
    app.config.from_object('config')
    

    Step 3: 创建数据库文件

    flaskr/ 目录下编辑 schema.sql

    drop table if exists entries;
    create table entries (
      id integer primary key autoincrement,
      title string not null,
      text string not null
    );
    

    创建一个叫 entries 的单表,在这个表中每行包含一个 id ,一个 title 和一个 textid 是一个自增的整数而且是主键,其余两个为非空的字符串。

    这里创建数据库有两种方法,一种是直接通过sqlite3命令来创建。

    sqlite3 /tmp/flaskr.db < schema.sql
    

    如果没有sqlite3这个命令,可以直接添加一个函数来初始化数据库。

    from contextlib import closing
    
    def connect_db():                                                                           
        return sqlite3.connect(app.config['DATABASE'])
    
    def init_db():
        with closing(connect_db()) as db:        
            with app.open_resource('schema.sql') as f:          
                db.cursor().executescript(f.read())
            db.commit()
    

    进入python shell

    $python
    Python 2.7.9 (default, Feb 11 2015, 15:08:29) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from flaskr import init_db
    >>> init_db()
    >>> 
    

    验证数据库是否创建成功

    $ll /tmp/flaskr.db 
    -rw-r--r--. 1 root root 3072 Apr 26 02:02 /tmp/flaskr.db
    

    Step 4: 请求数据库连接

    init_db() 函数下加入以下代码

    @app.before_request
    def before_request():
        g.db = connect_db()
    
    @app.teardown_request
    def teardown_request(exception):
        g.db.close()
    

    before_request 在请求收到之前绑定一个函数做一些事情。
    after_request 每一个请求之后绑定一个函数,如果请求没有异常。
    teardown_request 每一个请求之后绑定一个函数,即使遇到了异常。
    before_request 的时候创建一个 db 连接,然后 teardown_request 的时候断开这个连接。

    我们把数据库连接保存在 Flask 提供的特殊的 g 对象中。这个对象与 每一个请求是一一对应的,并且只在函数内部有效。不要在其它对象中储存类似信息, 因为在多线程环境下无效。这个特殊的 g 对象会在后台神奇的工作,保证系统正常运行。

    以上完整的代码:

    #!/root/.pyenv/versions/app/bin/python
    import sqlite3
    from contextlib import closing
    from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
    
    app = Flask(__name__)
    app.config.from_object('config')
    
    
    def connect_db():
        return sqlite3.connect(app.config['DATABASE'])
    
    def init_db():
        with closing(connect_db()) as db:
            with app.open_resource('schema.sql') as f:
                db.cursor().executescript(f.read())
            db.commit()
    
    
    @app.before_request
    def before_request():
        g.db = connect_db()
    
    
    @app.teardown_request
    def teardown_request(exception):
        g.db.close()
    

    现在还不能运行噢~!

  • 相关阅读:
    MySQL锁
    mysql服务性能优化—my.cnf配置说明详解
    springmvc请求参数获取的几种方法
    Linux mysql 添加远程连接
    Linux 操作 mysql
    Linux 安装 mysql 转 http://www.cnblogs.com/fnlingnzb-learner/p/5830622.html
    linux 下 安装nginx
    dubbo 实战总结
    分布式事务的几种方式
    精巧好用的DelayQueue 转
  • 原文地址:https://www.cnblogs.com/itflycat/p/4476062.html
Copyright © 2011-2022 走看看