zoukankan      html  css  js  c++  java
  • 学习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数据库连接的参数设置:libsdb.py

    # -*-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设置完这些参数后,进入业务逻辑代码:appsapp_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语句遇到的坑等在这里没有提到,可以参考完整的项目代码(也是很简单的,比较好理解)。

  • 相关阅读:
    6种基本排序(C++实现)
    关于 ^ 异或 及 无中间变量进行交换
    清理C盘旧驱动
    sqlmap基本使用
    http头部注入
    waf绕过注入
    mysql报错注入
    Burp Suite工具使用
    mysql注入
    Linux网络配置
  • 原文地址:https://www.cnblogs.com/hongdanni/p/11922575.html
Copyright © 2011-2022 走看看