学习flask框架之简单项目教程

  最近在回看之前做的2个flask框架写的项目代码,因为自己主要负责业务逻辑的API那一块,没有整个框架从头到尾实践一遍,借这次回看,写一个很简单的小项目并记录下来,作为自己对flask框架理解思路的梳理和笔记的归纳。

  1.前期准备

  下载安装python(我个人的习惯是用python3)和mysql数据库。

  2.目录结构的制定

  首先flask框架是没有固定的项目目录组织结构的,所以我们自己制定出自己风格习惯的目录结构。根据需要存放的文件类型,先简单的定为以下几个目录:

  3.代码编写

  3.1从apps\__init__.py里入手,创建一个flask实例,并对其进行属性参数的设置:

# -*-coding:utf8-*-
from flask import Flask
import os
from datetime import timedelta
from .app_login.views import login_blue
from .app_manager.views import manager_blue


def create_app():
    app = Flask(__name__)  # 创建flask实例

    app.register_blueprint(login_blue)  # 注册蓝图(路由)
    app.register_blueprint(manager_blue)

    app.config.update(SECRET_KEY=os.urandom(24))  # 设置密钥
    app.permanent_session_lifetime = timedelta(minutes=24*60)
    return app  # 返回设置完参数的flask实例

  3.2运行入口:run.py,运行flask实例。

# -*-coding:utf8-*-
from apps import create_app
from conf import conf

app = create_app()  # 获取flask实例

if __name__ == '__main__':
    # 启动服务;是否开启调试模式、监听IP和端口在conf.py里设置
    app.run(debug=conf.DEBUG, port=conf.PORT, host=conf.HOST)

  3.3配置参数:conf.py。根据生产、测试、开发三种环境设置不同参数,具体的参数值根据自己安装mysql时设定的来填写。

# -*-coding:utf8-*-
import os


class Config(object):
    DEBUG = True  # flask是否开启debug模式
    DB_NAME = 'danni'  # 数据库名称
    DB_HOST = '127.0.0.1'  # 数据库IP

    DB_PORT = 3306  # 数据库端口(mysql默认为:3306)
    DB_UN = ''  # 数据库账号名
    DB_PW = ''  # 数据库密码


class ProductionConfig(Config):
    """
    生产环境
    """
    DEBUG = False  # flask是否开启debug模式


class TestingConfig(Config):
    """
    测试环境
    """
    DB_HOST = '127.0.0.1'  # 数据库IP地址
    R_HOST = '127.0.0.1'   # Redis IP地址


class DevelopConfig(Config):
    """
    开发环境
    """
    PORT = 8082  # flask端口;flask默认监听本地127.0.0.1:5000
    HOST = '0.0.0.0'  # flask绑定ip;0.0.0.0表示监听所有地址


# 自动判断环境生产config
if os.path.exists('production.conf'):
    conf = ProductionConfig()
    conf_ver = 'conf.ProductionConfig'
    conf_env = u'生产环境'
elif os.path.exists('test.conf'):
    conf = TestingConfig()
    conf_ver = 'conf.TestingConfig'
    conf_env = u'测试环境'
else:
    conf = DevelopConfig()
    conf_ver = 'conf.DevelopConfig'
    conf_env = u'开发环境' 

  3.4数据库连接的参数设置:libs\db.py

扫描二维码关注公众号,回复: 7962912 查看本文章
# -*-coding:utf8-*-
import pymysql
from conf import conf


# 连接数据库
db = pymysql.connect(host=conf.DB_HOST, port=conf.DB_PORT, user=conf.DB_UN, passwd=conf.DB_PW, db=conf.DB_NAME)

# 建立游标
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)  # 返回{}或[{}, {}, ...]
# cursor = db.cursor()  # 返回()或((), (), ...)

  3.5设置完这些参数后,进入业务逻辑代码:apps\app_manager;分为3部分:__init__.py负责初始化变量等,model.py负责数据库数据处理等,views.py负责不同api接口的逻辑;业务场景:现有一个girls表,控制台端要获取表内所有用户的信息。

danni数据库下girls表的信息(name字段值不能重复):

 model.py:数据库的数据操作

# -*-coding:utf8-*-
from libs.db import db
import datetime
import pymysql


# 根据用户名user获取对应的用户信息;如果user为空,则获取所有用户信息
def get_users(user):
    sql = 'select * from girls where status != 1001'
    if user:
        sql += ' and name = %a' % user
    # 数据库的连接参数在libs/db.py设置
    cursor = db.cursor(cursor=pymysql.cursors.DictCursor)  # 返回{}或[{}, {}, ...]
    cursor.execute(sql)
    users = cursor.fetchall()
    cursor.close()  # 记得要关闭
    return users

views.py里获取前端传来的数据,根据查询参数和业务逻辑调用model.py里函数

# -*-coding:utf8-*-
from flask import Blueprint, render_template, request, jsonify
from .model import get_users, insert_user

# 声明一个蓝图;设置了蓝图名称、静态文件和模板文件存放的路径及url前缀
manager_blue = Blueprint('manager', __name__, template_folder='../../template', static_folder='../../static', url_prefix='/manager')


# 将url和视图函数绑定
# 获取所有会员信息
@manager_blue.route('/getuser', methods=['post'])  # 定义url和请求方法:post
def get_user():
    data = request.form  # 获取前端数据
    user = data['user']
    users = get_users(user)  # 调用model.py里get_users()
    return jsonify({"code": 200, "msg": "success", "data": users})

  4.启动服务:即运行run.py:python3 run.py;

  根据提示的ip和端口加上自己定义路由访问该地址:http://139.224.10.202:8082/manager/getuser

  返回的结果:

  5.结尾

  到这里就是一个完整的框架流程了,但是还有前端模板渲染、get访问、sql语句遇到的坑等在这里没有提到,可以参考完整的项目代码(也是很简单的,比较好理解)。

猜你喜欢

转载自www.cnblogs.com/hongdanni/p/11922575.html