一、創(chuàng)建新的項(xiàng)目
1.GitHub新建項(xiàng)目
-
登陸GitHub
-
我們在pycharm中打開這個項(xiàng)目
-
打開GitHub Desktop看看是否更新
2.配置環(huán)境

3.創(chuàng)建文件
- 新建一個manage.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
-
運(yùn)行一下程序
-
提交一下git
二、項(xiàng)目編寫
1.代碼編寫
-
新建數(shù)據(jù)庫
- 安裝redis
pip install redis

- 安裝flask_session
pip install flask_session

- 打開manage.py文件寫入代碼:
from flask import Flask
import redis
from flask_wtf import CSRFProtect
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
app = Flask(__name__)
class Config(object):
#工程信息配置
DEBUG = True
# 導(dǎo)入數(shù)據(jù)庫配置
# 設(shè)置數(shù)據(jù)庫連接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1:3306/information'
# 動態(tài)追蹤設(shè)置
app.config['SQLALCHEMY_TRACK_MODUFICATIONS'] = True
# 顯示原始sql
app.config['SQLALCHEMY_ECHO'] = True
RDIES_HOST = "127.0.0.1"
RDIES_PORT = 6379
app.config.from_object(Config)
db = SQLAlchemy(app)
#初始化redis配置
redis.StrictRedis(host=Config.RDIES_HOST,port=Config.RDIES_PORT)
#開啟CSRF保護(hù),只用于服務(wù)器驗(yàn)證功能
CSRFProtect(app)
#設(shè)置session保存指定位置
Session(app)
app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
2.下載redis數(shù)據(jù)庫
redis數(shù)據(jù)庫網(wǎng)盤鏈接:https://pan.baidu.com/s/12dN__yr1ow9AmlQ4UrVsHg
提取碼:72my
-
安裝這個軟件
就一直next就可以
http://www.itdecent.cn/p/9307d4c16791
這個鏈接里面講解的redis數(shù)據(jù)庫較為全面,可供參考
-
安裝這個軟件
檢測是否安裝
redis-cli

連接上了
keys *








3.鏈接數(shù)據(jù)庫
- 打開manage.py文件
from flask import Flask, session
import redis
from flask_wtf import CSRFProtect
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
app = Flask(__name__)
class Config(object):
#工程信息配置
SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
DEBUG = True
# 導(dǎo)入數(shù)據(jù)庫配置
# 設(shè)置數(shù)據(jù)庫連接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1:3306/information'
# 動態(tài)追蹤設(shè)置
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 顯示原始sql
app.config['SQLALCHEMY_ECHO'] = True
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
#flask_session配置信息
SESSION_TYPE = "redis" #指定session保存到redis中
SESSION_USE_SIGNER = True #讓cookie中的sessionid 被加密處理
#使用redis實(shí)例
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_PERMANENT = False
PERMANENT_SESSION_LIFETIME = 86400 #session有效期/秒
app.config.from_object(Config)
# 初始化數(shù)據(jù)庫
db = SQLAlchemy(app)
# 初始化redis 對象
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
# 開啟csrf保護(hù),只做服務(wù)器驗(yàn)證功能,
CSRFProtect(app)
# 設(shè)置session保存指定位置
Session(app)
@app.route('/')
def index():
session['name'] = 'lucy'
return 'index'
if __name__ == '__main__':
app.run()
-
運(yùn)行程序
-
刷新數(shù)據(jù)庫
- 安裝 flask_migrate
pip install flask_migrate

4.設(shè)置運(yùn)行


5.整理代碼
- 新創(chuàng)建一個config.py文件
import logging
import redis
class Config(object):
#工程信息配置
SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
DEBUG = True
# 導(dǎo)入數(shù)據(jù)庫配置
# 設(shè)置數(shù)據(jù)庫連接
SQLALCHEMY_DATABASE_URI = 'mysql://root:root@127.0.0.1:3306/information'
# 動態(tài)追蹤設(shè)置
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 顯示原始sql
SQLALCHEMY_ECHO = True
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
#flask_session配置信息
SESSION_TYPE = "redis" #指定session保存到redis中
SESSION_USE_SIGNER = True #讓cookie中的sessionid 被加密處理
#使用redis實(shí)例
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_PERMANENT = False
PERMANENT_SESSION_LIFETIME = 86400 #session有效期/秒
#日志級別
LEVEL = logging.DEBUG
# 開發(fā)環(huán)境
class DevelopConfig(Config):
pass
# 生產(chǎn)環(huán)境
class ProductConfig(Config):
DEBUG = False
LEVEL = logging.ERROR
# 測試環(huán)境
class TestingConfig(Config):
TESTING = True
# 通過統(tǒng)一的字典進(jìn)行配置類的訪問
config_dict = {
"develop":DevelopConfig,
"product":ProductConfig,
"testing":TestingConfig,
}
- 設(shè)置manage.py代碼
from flask_session import sessions
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from info import create_app, db
from flask_session import Session
# flask_script
app = create_app('develop')
manager = Manager(app)
# 數(shù)據(jù)庫遷移
Migrate(app, db)
manager.add_command('db', MigrateCommand)
@app.route('/')
def index():
#sessions['name'] = 'lucy'
return "index"
if __name__ == '__main__':
manager.run()
-
新建一個info文件
import logging
from logging.handlers import RotatingFileHandler
from flask import Flask, session
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import CSRFProtect
from config import Config,config_dict
db = SQLAlchemy()
def create_app(config_name):
# 通過不同的配置名,切換不同的環(huán)境
config = config_dict.get(config_name)
#設(shè)置日志級別
log_file(config.LEVEL)
#TODO
app = Flask(__name__)
app.config.from_object(Config)
# 初始化redis配置
# redis.StrictRedis(host=Config.RDIES_HOST, port=Config.RDIES_PORT)
# 開啟csrf 保護(hù), 只用于服務(wù)器驗(yàn)證功能
CSRFProtect(app)
# 設(shè)置session保存指定位置
Session(app)
return app
#記錄日志
def log_file(level):
# 設(shè)置日志的記錄等級,常見等級有: DEBUG<INFO<WARING<ERROR
logging.basicConfig(level=level) # 調(diào)試debug級
# 創(chuàng)建日志記錄器,指明日志保存的路徑、每個日志文件的最大大小、保存的日志文件個數(shù)上限
file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)
# 創(chuàng)建日志記錄的格式 日志等級 輸入日志信息的文件名 行數(shù) 日志信息
formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
# 為剛創(chuàng)建的日志記錄器設(shè)置日志記錄格式
file_log_handler.setFormatter(formatter)
# 為全局的日志工具對象(flask app使用的)添加日志記錄器
logging.getLogger().addHandler(file_log_handler)
-
新建一個logs文件夾
-
運(yùn)行程序
-
查看剛剛的logs文件夾
就生成了日志文件
-
在.gitugnore文件內(nèi)寫下面代碼這樣日志文件不會被傳到git上
三、藍(lán)圖
我們打開之前練習(xí)的時候所用的工程文件來演示藍(lán)圖例子
- 新建一個test.py文件
#藍(lán)圖
from flask import Flask
from user import users
from login import logins
from admin import admins
app = Flask(__name__)
app.register_blueprint(users)
app.register_blueprint(logins)
app.register_blueprint(admins,url_prefix='/admin')
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
- 新建一個user.py文件
from flask import Blueprint, render_template
#藍(lán)圖
#1.創(chuàng)建藍(lán)圖
users = Blueprint('user',__name__)
#2.注冊藍(lán)圖路由
@users.route('/users')
def user():
return render_template('user.html')
#3.注冊藍(lán)圖到程序?qū)嵗?
- 新建一個login.py文件
from flask import Blueprint, render_template
#藍(lán)圖
#1.創(chuàng)建藍(lán)圖
logins = Blueprint('login',__name__)
#2.注冊藍(lán)圖路由
@logins.route('/login')
def user():
return render_template('login4.html')
#3.注冊藍(lán)圖到程序?qū)嵗?
- 新建一個admin.py文件
from flask import Blueprint, render_template
#藍(lán)圖
#1.創(chuàng)建藍(lán)圖
admins = Blueprint('admin',__name__)
#2.注冊藍(lán)圖路由
@admins.route('/admin')
def user():
return render_template('admin.html')
#3.注冊藍(lán)圖到程序?qū)嵗?
-
新建一個user.html文件
-
新建一個login4.html文件
-
新建一個admin.html文件
-
運(yùn)行程序


有關(guān)藍(lán)圖的更多詳解請看下面鏈接:
四、將藍(lán)圖應(yīng)用到項(xiàng)目中
-
我們在info建一個叫modules的python文件夾,在modules文件夾下創(chuàng)建一個叫index的python文件夾,在在index里面創(chuàng)建一個views.py文件
-
我們將manage.py中部分的代碼刪除
打開index/init.py文件
#創(chuàng)建藍(lán)圖
from flask import Blueprint
index_blu = Blueprint('index', __name__)
from . import views
- 打開views.py文件
from . import index_blu
@index_blu.route('/')
def index():
return "index"
- 打開info/init.py文件
#注冊藍(lán)圖時,導(dǎo)入和注冊寫在一起
from info.modules.index import index_blu
app.register_blueprint(index_blu)

-
運(yùn)行程序
static文件夾壓縮包鏈接:https://pan.baidu.com/s/1Cd8ycGhvJZuQ_eW8887-ww
提取碼:vrgy
-
在info文件夾下建立一個static文件夾
五、展示頁面
-
在info文件夾下建立一個templates文件夾
-
我們在templates文件夾下建立一個news文件夾用來放前臺界面,我們將index.html文件拖拽到news文件夾下
- 打開views.py文件
from flask import render_template
from . import index_blu
@index_blu.route('/')
def index():
#return "index"
return render_template('news/index.html')
-
運(yùn)行程序
以上項(xiàng)目可在我的GitHub上面查看:
(此文章僅作為個人學(xué)習(xí)筆記使用,如有錯誤歡迎指正~)







































