web应用框架——Flask实践项目(一)

一、创建新的项目

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

(此文章仅作为个人学习笔记使用,如有错误欢迎指正~)

你可能感兴趣的:(web应用框架——Flask实践项目(一))