189 8069 5689

flask整合nosql,flask框架

在python3下怎样用flask-sqlalchemy对mysql数据库操作

这个问题经常难道新手一下,因为大部分教程里(包括经典的《Flask

成都创新互联专注于田林企业网站建设,响应式网站,商城开发。田林网站建设公司,为田林等地区提供建站服务。全流程按需网站策划,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

Web开发》一书),告诉了我们如何使用flask-sqlalchemy操作sqlite,但在生产环境(线上网站)上,我们肯定是使用MySQL或其

他,而大部分的教程里,又告诉我们flask-sqlalchemy使用MySQL的方式是:

mysql://username:password@server/db

结果我们照葫芦画瓢的来一下,发现压根不行,写好的网站一跟数据库沾边就报错。

Python和MySQL是「两个国家的人」,他们互不相通,因而需要一个中间代理,让双方互通有无,跟翻译一样(这比喻不准确,但足够你明白意思就行)。翻译又有很多选择,不同的翻译各有特色。

主解决问题选择的翻译是「flask-mysqldb」,其背后的主子是「MySQL-python」。恩,说到这里你应该知道,「flask-xxx」

这样的包都是对背后主子进行了适合Flask封装的插件,跟包子皮一样,里面的馅才是重点,「flask-mysqldb」的馅是「MySQL-

python」。

而我要推荐的是另一个翻译:PyMySQL,这玩意的好处是可以做异步(「MySQL-python」也可以,个人口味罢了),简而言之,网站访问量大了就需要考虑异步,现在别管这是啥子。这玩意的安装方式是:

pip install PyMySQL

之后,数据库连接由:

mysql://username:password@server/db

改为

mysql+pymysql://username:password@server/db

就可以了。

如何用flask实现一个web应用来显示在mysql数据库中查询到的内容

用 Flask-SQLAlchemy(SQLAlchemy ORM 模块的 Flask 定制版)。这个在定义 schema、连接数据库、增删改查方面都给你提供极大的便利。

这个对象就包含 sqlalchemy 和 sqlalchemy.orm 中的所有函数和助手。此外它还提供一个名为 Model 的类,用于作为声明模型时的 delarative 基类:

from flask import Flask

from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'

db = SQLAlchemy(app)

class User(db.Model):

id = db.Column(db.Integer, primary_key=True)

username = db.Column(db.String(80), unique=True)

email = db.Column(db.String(120), unique=True)

def __init__(self, username, email):

self.username = username

self.email = email

def __repr__(self):

return 'User %r' % self.username

Flask构建数据库时出错:

python3下用flask-sqlalchemy对mysql数据库操作案例:

from flask import Flask

from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'

db = SQLAlchemy(app)

class User(db.Model):

id = db.Column(db.Integer, primary_key=True)

username = db.Column(db.String(80), unique=True)

email = db.Column(db.String(120), unique=True)

def __init__(self, username, email):

self.username = username

self.email = email

def __repr__(self):

return 'User %r' % self.username

admin = User('admin', 'admin@example.com')

db.create_all() # In case user table doesn't exists already. Else remove it.

db.session.add(admin)

db.session.commit() # This is needed to write the changes to database

User.query.all()

User.query.filter_by(username='admin').first()

怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面

用flask+mysql实现用户的注册和登录:

一个简单的用户注册和登录的页面,就两个部分。

涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。

网站程序,前端如何发送表单,后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)。

举例如下:

from functools import wrapsdef authorize(fn):

@wraps(fn)

def wrapper(*args, **kwds):

user = session.get('logged_in', None)

if user:

return fn(user=user)

else:

return redirect(url_for('signin',next=request.path))

return wrapper@app.route('/home')@authorizedef home(**kwds):

username = kwds['user']

return render_template('index.html' ,username=username)#加密存储密码import osimport hashlibdef encrypt_password(password, salt=None):

if not salt:

salt = os.urandom(16).encode('hex') # length 32

result = password

for i in range(3):

result = hashlib.sha256(password + salt).hexdigest()[::2] #length 32

return result, salt#简单的错误处理class loginError(Exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)# 注册登录(下面的代码没有实际运行过)# 连接数据库我是使用的是 mysql.connector #  写法和常用的MySQL-python稍有所不同# 下面没有连接数据库的代码@app.route('/register/', methods=['GET','POST'])def request():

if request.method == 'GET':

return render_template("register.html")

if request.method == 'POST':

# 这里最好需要验证用户输入,我就不写了

u = request.form['username']

p,s = encrypt_password(request.form['password'])

g.db.cursor.execute('INSERT INTO users (name,password,salt) VALUES (%s,%s,%s)',(u,p,s,)

g.db.commit()

return redirect(url_for('signin'))@app.route('/signin/', methods=['GET','POST'])def signin():

if request.method == 'GET':

referrer = request.args.get('next','/')

return render_template("login.html",next=referrer)

if request.method == 'POST':

u = request.form['username']

p = request.form['password']

n = request.form['next']

try:

g.db.cursor.execute('SELECT `name` FROM users WHERE name = %s',(u,))

if not g.db.cursor.fetchone():

raise loginError(u'错误的用户名或者密码!')

g.db.cursor.execute('SELECT `salt`,`password` FROM users WHERE name = %s',(u,))

salt,password = g.db.cursor.fetchone()

if encrypt_password(p,salt)[0] == password:

session['logged_in'] = u

return redirect(next)

else:

raise loginError(u'错误的用户名或者密码!')

except loginError as e:

return render_template('login.html', next=next,error=e.value)@app.route('/signout/', methods=['POST'])def signout():

session.pop('logged_in', None)

return redirect(url_for('home'))


分享名称:flask整合nosql,flask框架
文章链接:http://cdxtjz.cn/article/dsijodc.html

其他资讯