學習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

# -*-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語句遇到的坑等在這里沒有提到,可以參考完整的項目代碼(也是很簡單的,比較好理解)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM