为了账号安全,请及时绑定邮箱和手机立即绑定

Presto 数据查询项目之初识Flask框架

标签:
Python 大数据

Django、Flask、Tornado是Python主流的三大Web框架,三者各有优劣。本文就来聊一聊Flask。

Flask是一个基于Python开发并且依赖jinja2模板和WSGI服务的一个微型框架,“微型”到什么程度呢?微型到不到十行代码就能开发一个Web接口服务。代码如下:

# 引入flask模块
from flask import Flask
app = Flask(__name__)
# 路由
@app.route('/')
def hello_world():
    return 'Hello World!'
    
if __name__ == '__main__':
    app.run()

需要注意的是,“微框架”并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。

默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

对于Flask框架的教程,大家可以观看其官方教程,里面有很详细的示例。而我们后面要结合多个第三方扩展模块实现我们的Presto数据查询项目。

比如我们接下来会用到的:

  • 登录认证模块:flask_login
  • 数据库管理模块:flask_sqlalchemy和flask_migrate
  • Flask表单模块:flask_wtf
  • Flask命令模块:flask_script
  • bootstrap前端模块:flask_bootstrap

Flask 数据库管理模块

  1. 开发配置类
class Config:
    SECRET_KEY='asdnjasd'
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root123@localhost:3306/test'
    DEBUG=True
    SQLALCHEMY_COMMIT_ON_TEARDOWN=True
    SQLALCHEMY_TRACK_MODIFICATIONS=False
  1. 实例化sqlalchemy模块
from flask_sqlalchemy import SQLALchemy
from flask_migrate import Migrate
db=SQLALchemy()
migrate=Migrate(db=db)
 
def extension_init(app):
    db.init_app(app)
    migrate.init_app(app)
  1. 开发数据model
class User(db.Model,UserMixin):
    __tablename__='user'
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(10),unique=True)
    password=db.Column(db.String(128))
    sex=db.Column(db.Boolean,default=1)
    email=db.Column(db.String(100),unique=True)

  1. 添加数据库迁移命令
from flask_migrate import MigrateCommand
manage.add_command('db',MigrateCommand)
  1. 开发过程中进行数据迁移
# 初始化
python manage.py db init
# 生成数据库更新相关的脚本
python manage.py db migrate
# 执行数据库迁移
python manage.py db upgrade

Flask Login模块

  1. 使用之前我们需要对login模块进行初始化操作,需要传入的参数就是我们前面代码中的Flask实例 app。
from flask_login import LoginManager
login_manage=LoginManager()
# 初始化
login_manage.init_app(app)
  1. 然后需要在User Model中编写认证方法
from flask_login import UserMixin
from App.extensions import login_manage
 
#如果不继承UserMixin是无法满足使用flask_login的条件的
class User(db.Model,UserMixin):
    __tablename__='user'
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(10),unique=True)
    password=db.Column(db.String(128))
    sex=db.Column(db.Boolean,default=1)
    email=db.Column(db.String(100),unique=True)
 
#这个回调是用来接收一个用户id的时候返回一个用户对象
@login_manage.user_loader
def load_user(uid):
    return User.query.get(int(uid))
  1. 使用起来非常的简单,只需要在相关的view中添加login_require装饰器即可
# 路由
@app.route('/')
@login_required
def hello_world():
    return 'Hello World!'

Flask 表单生成模块

  1. 我们通过继承FlaskForm来完成表单的创建,会在界面上生产对应的字段信息
#创建表单类
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,Length
 
class Login(FlaskForm):
    #参数1 为label中的内容显示
    username = StringField('用户名',validators=[DataRequired(message='用户名不能为空'),Length(min=6,max=12,message='用户名在6-12位之间...')])
    userpass = PasswordField('密码',validators=[DataRequired(message='密码不能为空'),Length(min=6,max=10,message='密码长度为6-10位')])
    submit = SubmitField('登录')
  1. 开发view相关的方法,实现表单验证
@app.route('/login/',methods=['GET','POST'])
def login():
    form = Login() #实例化登录的表单类
    # if request.method=='POST':
    if form.validate_on_submit(): #当前表单的csrf验证通过 和数据正确 则为真
        print(form.username.data) #使用表单对象获取数据
        print(form.userpass.data)
        return {'msg':'ok'}
    return render_template('login.html',form=form)

Flask Bootstrap模块

base页面模板

{% extends 'bootstrap/base.html'  %}
 
{% block title %}
    主题
{% endblock %}
 
{% block navbar %}
    这里粘贴bootstrap代码
{% endblock%}

登录页面模板

{% import'bootstrap/wtf.html' as wtf%}
{% block page_content %}
        <div class="row">
        <div class="col-md-8">.col-md-8</div>
        <div class="col-md-4">{{ wtf.quick_form(form) }}</div>
    </div>
{% endblock %}

好了,我们对于Flask框架及其第三方扩展模块的介绍就到这了。 后面我们会一步一步的通过代码实现我们基于Presto的数据查询项目。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.1万
获赞与收藏
512

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消