一:目標css
1.要求:html
1. 熟悉Flask的目錄結構。python
2. 瞭解應用,裝上新的組件往裏面放,改怎麼弄?mysql
2.做業: sql
1.基於flask實現權限管理數據庫
2.筆記:flask
- flask的請求週期瀏覽器
二:目錄結構內容安全
知識點:架構
1. 從全局上了解flask項目的目錄結構
2. flask項目的運行機制
3.flask框架實現MVC架構
4.flask-sqlalchemy 操做mysql數據庫
流程步驟:
1.新建項目:blog系統
完成後的目錄結構是這樣的:很是簡單,一個static文件夾,一個templates文件夾,一個py文件,以下:
2.目錄結構重構,引入包管理
1.針對上面的結構,在最上層blog2目錄下,作以下操做:
1.新建一個runserver.py 文件, 做爲「項目統一入口文件」
2. 新建blog2文件夾,把已經存在的 static,templates, blog2.py 移到blog2文件夾下,
3. 而後分別建立 controller , model 包(右擊blog2, 選擇 python packge )。 把blog2.py 更名爲 __init__.py ,
4.新建setting.py 文件。
如今目錄結構以下:
這樣就至關於一個大工程的結構了:
分析:
1. 最上層的 blog2 目錄是項目名稱,一個項目下能夠包括多個模塊,也就是應用,每一個應用下有本身的配置文件,初始化文件,MVC架構。
2. runserver.py : 與應用模塊評級,做爲項目啓動爲文件。
3.第二級blog2目錄: 模塊名稱
controller : MVC 中的 C, 主要存放 視圖函數。
model : MVC 中的 M , 主要存放 實體類文件,映射數據庫表
templates : MVC 中的V, 主要存放 html 文件
static : 靜態文件, 主要存放 css, js 等文件
__init__.py : 模塊初始化文件, Flask 程序對象的建立必須在 __init__.py 文件裏完成, 而後就能夠安全的導入引用每一個包。
setting.py : 配置文件,數據庫用戶名密碼等等
三, 開發代碼
1. 先把項目運行起來:
1. 編寫__init__.py文件, 建立項目對象,代碼以下:
from flask import Flask #建立項目對象 app = Flask(__name__)
2. 在 runserver.py , 添加以下代碼
from blog2 import app @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(debug=True)
3. 運行runserver.py 文件:
而後在瀏覽器中輸入:http://127.0.0.1:5000/,會顯示helloworld字樣
到這裏爲止,項目的雛形就能夠正常運行了,下面的事情就簡單了,添加內容,讓項目有血有肉。
2.修改配置文件。
1. 修改setting.py 文件,添加配置數據庫鏈接信息,以下:
2.讓項目讀取配置文件
修改_init__,py : 添加以下內容(紅色部分):
# -*- coding: utf-8 -*- from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #import os #print os.environ.keys() #print os.environ.get('FLASKR_SETTINGS') #加載配置文件內容 app.config.from_object('blog2.setting') #模塊下的setting文件名,不用加py後綴 app.config.from_envvar('FLASKR_SETTINGS') #環境變量,指向配置文件setting的路徑 #建立數據庫對象 db = SQLAlchemy(app)
3.設計數據庫
1.本次練習比較簡單,就兩個表,一個user表,一個文章表。咱們採用python的orm框架flask-sqlalchemy實現表的建立、增刪改查功能。
在model文件夾中添加User.py和Category.py文件,內容以下:
1.user.py
from blog2 import db class User(db.Model): __tablename__ = 'b_user' id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(10),unique=True) password = db.Column(db.String(16)) def __init__(self,username,password): self.username = username self.password = password def __repr__(self): return '<User %r>' % self.username
2.category.py
from blog2 import db class Category(db.Model): __tablename__ = 'b_category' id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(20),unique=True) content = db.Column(db.String(100)) def __init__(self,title,content): self.title = title self.content = content def __repr__(self): return '<Category %r>' % self.title 複製代碼
3.建立數據庫和表