一、创建新的项目
1.GitHub新建项目
-
登陆GitHub
-
我们在pycharm中打开这个项目
-
打开GitHub Desktop看看是否更新
2.配置环境
3.创建文件
- 新建一个manage.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
-
运行一下程序
-
提交一下git
二、项目编写
1.代码编写
-
新建数据库
- 安装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
# 导入数据库配置
# 设置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/information'
# 动态追踪设置
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保护,只用于服务器验证功能
CSRFProtect(app)
#设置session保存指定位置
Session(app)
app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run()
2.下载redis数据库
redis数据库网盘链接:https://pan.baidu.com/s/12dN__yr1ow9AmlQ4UrVsHg
提取码:72my
-
安装这个软件
就一直next就可以
https://www.jianshu.com/p/9307d4c16791
这个链接里面讲解的redis数据库较为全面,可供参考
-
安装这个软件
检测是否安装
redis-cli
连接上了
keys *
3.链接数据库
- 打开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
# 导入数据库配置
# 设置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/information'
# 动态追踪设置
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实例
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_PERMANENT = False
PERMANENT_SESSION_LIFETIME = 86400 #session有效期/秒
app.config.from_object(Config)
# 初始化数据库
db = SQLAlchemy(app)
# 初始化redis 对象
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
# 开启csrf保护,只做服务器验证功能,
CSRFProtect(app)
# 设置session保存指定位置
Session(app)
@app.route('/')
def index():
session['name'] = 'lucy'
return 'index'
if __name__ == '__main__':
app.run()
-
运行程序
-
刷新数据库
- 安装 flask_migrate
pip install flask_migrate
4.设置运行
5.整理代码
- 新创建一个config.py文件
import logging
import redis
class Config(object):
#工程信息配置
SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
DEBUG = True
# 导入数据库配置
# 设置数据库连接
SQLALCHEMY_DATABASE_URI = 'mysql://root:[email protected]:3306/information'
# 动态追踪设置
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实例
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
SESSION_PERMANENT = False
PERMANENT_SESSION_LIFETIME = 86400 #session有效期/秒
#日志级别
LEVEL = logging.DEBUG
# 开发环境
class DevelopConfig(Config):
pass
# 生产环境
class ProductConfig(Config):
DEBUG = False
LEVEL = logging.ERROR
# 测试环境
class TestingConfig(Config):
TESTING = True
# 通过统一的字典进行配置类的访问
config_dict = {
"develop":DevelopConfig,
"product":ProductConfig,
"testing":TestingConfig,
}
- 设置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)
# 数据库迁移
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):
# 通过不同的配置名,切换不同的环境
config = config_dict.get(config_name)
#设置日志级别
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 保护, 只用于服务器验证功能
CSRFProtect(app)
# 设置session保存指定位置
Session(app)
return app
#记录日志
def log_file(level):
# 设置日志的记录等级,常见等级有: DEBUG
-
新建一个logs文件夹
-
运行程序
-
查看刚刚的logs文件夹
就生成了日志文件
-
在.gitugnore文件内写下面代码这样日志文件不会被传到git上
三、蓝图
我们打开之前练习的时候所用的工程文件来演示蓝图例子
- 新建一个test.py文件
#蓝图
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
#蓝图
#1.创建蓝图
users = Blueprint('user',__name__)
#2.注册蓝图路由
@users.route('/users')
def user():
return render_template('user.html')
#3.注册蓝图到程序实例中
- 新建一个login.py文件
from flask import Blueprint, render_template
#蓝图
#1.创建蓝图
logins = Blueprint('login',__name__)
#2.注册蓝图路由
@logins.route('/login')
def user():
return render_template('login4.html')
#3.注册蓝图到程序实例中
- 新建一个admin.py文件
from flask import Blueprint, render_template
#蓝图
#1.创建蓝图
admins = Blueprint('admin',__name__)
#2.注册蓝图路由
@admins.route('/admin')
def user():
return render_template('admin.html')
#3.注册蓝图到程序实例中
-
新建一个user.html文件
-
新建一个login4.html文件
-
新建一个admin.html文件
-
运行程序
有关蓝图的更多详解请看下面链接:
https://www.jianshu.com/p/b4ec8383f120
四、将蓝图应用到项目中
-
我们在info建一个叫modules的python文件夹,在modules文件夹下创建一个叫index的python文件夹,在在index里面创建一个views.py文件
-
我们将manage.py中部分的代码删除
打开index/init.py文件
#创建蓝图
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文件
#注册蓝图时,导入和注册写在一起
from info.modules.index import index_blu
app.register_blueprint(index_blu)
-
运行程序
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')
-
运行程序
以上项目可在我的GitHub上面查看:
https://github.com/zhaoXiY/flask_new_info
(此文章仅作为个人学习笔记使用,如有错误欢迎指正~)