参考博客:http://xficc.blog.51cto.com/1189288/1676591/
之前通过学习极客学院的视频入门Flask的,它里面教授连接MySQL的方法的是不使用ORM,而是通过Flask的MySQLdb模块直接连接MySQL数据库。
它的结构是
- 数据库操作:mydb.py
- 视图逻辑:views.py
model.py
# excute database operation
# -*- coding:UTF-8 -*-
#该文件是作为数据库操作的“驱动”程序
import MySQLdb
conn = MySQLdb.connect("localhost", "root", "123456", "test")
cur = conn.cursor()
def addUser(username, password):#注册新用户
sql = "insert into user (username,password) values ('%s','%s')" % (username, password)
cur.execute(sql)
conn.commit()
conn.close()
def isExisted(username, password):#检查用户是否存在
sql = "select * from user where username ='%s' and password ='%s'" % (username, password)
cur.execute(sql)
result = cur.fetchall()
if (len(result) == 0):
return False
else:
return True
views.py
# -*- coding:UTF-8 -*-
from flask import Flask
from flask import request
from flask import render_template
from flask import Response
from mydb import* # 引入数据库操作
app = Flask(__name__)
@app.route('/')
@app.route('/home')
def home():
return render_template('home.html')
@app.route("/updown/<value>", methods=['GET', 'POST'])
def updown(value):
temple = int(value)
addValue(value,1)
return 'ok'
if __name__ == '__main__':
app.run()
这个种方法,有一个缺点大约每过8个小时,它就无法访问数据库,即出现500内部服务器错误。
解决办法
Flask 中 @app.before_request、@app.after_request 和 @app.teardown_request ,flask中又两种 context(上下文),分别是 application context 和 request context。其中 request 就是 request context。当 HTTP 请求过来的时候,进入这个上下文。题主的那些方法都是一些 flaks 的 hooks。用于针对 request 做一些操作,比如
- before_request :在请求收到之前绑定一个函数做一些事情。
- after_request: 每一个请求之后绑定一个函数,如果请求没有异常。
- teardown_request: 每一个请求之后绑定一个函数,即使遇到了异常。
至于用来干嘛?可以做很多关于request pre的事情,和request after 的事情。比如,before_request 的时候创建一个 db 连接,然后 teardown_request 的时候断开这个连接.
import MySQLdb
from app import app
conn = None
cur = None
# 连接数据库连接
@app.before_request
def create_db():
global conn
global cur
conn = MySQLdb.connect("101.200.46.138", "admin", "987654", "db_ShoolBus")
cur = conn.cursor()