说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85613780

目录

一丶创建项目

二丶创建工程目录(拆分manage.py)

三丶以开发环境进行项目测试


一丶创建项目

1 新建ihome_python项目文件夹

2 在Pycharm中打开此文件 ,并配置项目解释器(python2环境)

3 在工程目录下创建manage.py作为项目启动文件

  • step1 实现flask中最基本的工作
# coding:utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/index')
def index():
    return "index page"

if __name__ == '__main__':
    app.run()
  • step2 配置mysql数据库用于存储用户数据
class Config(object):
    """配置信息"""
    DEBUG = True
    SECRET_KEY = "cdtaogang**CSDN@uhduqw82981h"

    # 连接mysql数据库
    SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/ihome_python"
    SQLALCHEMY_TRACK_MODIFICATIONS = True

app.config.from_object(Config)

db = SQLAlchemy(app)
  • step3 在本地mysql中创建ihome_python数据库
create database ihome_python charset=utf8;
  • step4 配置redis数据库用于保存session信息以及缓存数据(因为flask框架默认将session数据存到cookie中),所以这里需要利用flask_session这个工具包帮助我们将flask存储的session数据交给我们管理,这样就可以将session数据存到redis数据库中了
class Config(object):
    """配置信息"""
    DEBUG = True
    SECRET_KEY = "cdtaogang**CSDN@uhduqw82981h"

    # 连接mysql数据库
    SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/ihome_python"
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    # redis数据库配置
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379

app.config.from_object(Config)

db = SQLAlchemy(app)

#创建redis数据库连接对象
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
  • step5 配置flask_session用于我们操作session到redis数据库(说明在Config类中再次创建redis数据库连接,是因为在实际线上环境中,可能需要将session数据存到不同的服务器上)
    # flask_session配置
    SESSION_TYPE = "redis"
    SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
    SESSION_USE_SIGNER = True  # 对cookie中session_id进行隐藏处理
    PERMANENT_SESSION_LIFETIME = 86400  # session数据的有效期,单位秒

# 利用flask_session, 将session数据保存到redis中
Session(app)
  • step6 开启csrf防护机制(导入flask_WTF中的CSRFProtect类)
# 为flask补充csrf防护
CSRFProtect(app)

二丶创建工程目录(拆分manage.py)

1 拆分配置文件

  • step1 在项目根目录下创建一个config.py文件,将manage.py中的Config配置类放到该文件中

  • step2 工程实现后,有两种运行环境,开发测试环境以及生成环境(线上环境),所以flask程序在运行时,就需要配置两个配置类,一个是用于开发环境,另一个用于生成环境
class DevelopmentConfig(Config):
    """开发环境配置信息"""
    DEBUG = True

class ProductConfig(Config):
    """生成环境配置信息"""
    pass
  • step3 将app对象设计为工厂模式

  • step4 在config.py中创建配置映射
#构建配置映射关系
config_map = {
    "develop": DevelopmentConfig,
    "product": ProductConfig
}
  • step5 导入config中的config_map,通过调用create_app方法,创建app对象,将我们需要的配置环境通过传参的方式来决定是用开发环境还是生产环境,在create_app方法中就按照指明的环境进行配置即可

  • step6 因最初创建的manage.py作为项目启动文件,所以我们在manage文件中只保留启动代码即可,需将其余代码抽离出去,保证manage文件中没有其他的代码,项目根目录下只需要保留启动文件manage以及config配置文件,即在项目根目录下创建一个ihome的python包,将create_app代码放到这个ihome包的init文件中即可,随后在ihome包下创建一个static目录用于存放静态文件,再创建一个models.py文件用于做数据库的迁移

  • step7 在manage中创建并绑定app对象的代码,放到init中,会导致无法绑定create_app方法里面的app,所以使用SQLAlchemy对象db提供的init_app方法,在create_app方法里面对db进行初始化,这样就解决了

  • step8 在models.py文件中导入数据库对象db
from ihome import db
  • step9 将manage文件中创建的redis数据库连接对象放到init文件中,需要思考是否放在create_app方法中,因为最初在manage文件中创建的redis数据库连接需要从config文件中拿去host以及port配置,所以我们在全局声明redis_store变量为None,然后在方法中通过config_map获取的环境配置类config_class,说白了也就是config中的开发类DevelopmentConfig,直接拿去类中我们配置好的r连接redis数据库的port和host

  • step10 对于Session(app)和CSRFProtect(app),不会用到这两个对象来进行进一步操作,只是刚开始使用这两个对象来初始化app,一个是为了我们将session数据存到redis数据库,另一个是为了开启CSRF防护机制,所以直接放到create_app类即可
    # 利用flask_session, 将session数据保存到redis中
    Session(app)

    # 为flask补充csrf防护
    CSRFProtect(app)
  • step11 创建蓝图,用于管理不同版本的视图,在ihome核心目录下创建一个api_1_0python包,代表1.0版本的蓝图,在这个蓝图下就可以创建各种各样的视图了,在api_1_0蓝图下创建一个demo.py文件,将启动文件manage中的视图函数放到里面
@app.route('/index')
def index():
    return "index page"
  • step12 在api_1_0包下的init文件中创建蓝图

  • step13 在flask项目应用文件init中注册蓝图 ,首先在init文件中通过绝对路径导入api_1_0包,再通过app应用对象中的register_blueprint方法,注册api_1_0包中的api蓝图名字,并定义url前缀地址为/api/v1.0表示1.0版本
    # 注册蓝图
    app.register_blueprint(api_1_0.api, url_prefix="/api/v1.0")
  • step14 在创建工程时,可能会用到数据库models文件,那么就需要使用迁移插件,从flask_script中引入脚本命令管理对象,再从flask_migrate中导入迁移执行者Migrate,迁移命令解析人员Migratecommand

三丶以开发环境进行项目测试

  • step1 在Pycharm终端中,执行python manage.py runserver 默认端口,运行项目

在浏览器中成功渲染出index视图函数返回的字符串,如下图

  • step3 回到Pycharm终端查看程序日志,请求方式和地址以及状态码都是完全正确,代表项目设计成功

Flask项目之手机端租房网站的实战开发(二)的更多相关文章

  1. Flask项目之手机端租房网站的实战开发(三)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  2. Flask项目之手机端租房网站的实战开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶项目介绍 产品:关于手机移动端的租房网站 角色:在这个产品中用户包括房东与房客 功能:房东可以在这个平台发布自己的房屋,房客可 ...

  3. Flask项目之手机端租房网站的实战开发(十四)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  4. Flask项目之手机端租房网站的实战开发(六)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  5. Flask项目之手机端租房网站的实战开发(十一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  6. Flask项目之手机端租房网站的实战开发(十)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  7. Flask项目之手机端租房网站的实战开发(九)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  8. Flask项目之手机端租房网站的实战开发(八)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  9. Flask项目之手机端租房网站的实战开发(四)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

随机推荐

  1. 【Henu ACM Round#16 A】 Bear and Game

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 看看什么时候t[i]-t[i-1]>15. 输出t[i-1]+15就好. 不存在这样的i就输出min(t[n]+15,90) ...

  2. 使用Spring Mvc 转发 带着模板 父页面 之解决方法 decorators.xml

    周末了,周一布置的任务还没完毕,卡在了页面跳转上,接手了一个半截的项目要进行开发,之前没有人给培训.全靠自己爬代码,所以进度比較慢.并且加上之前没实用过 Spring Mvc 开发项目.所以有点吃力, ...

  3. iOS Core Animation具体解释(四)AutoLayout中的动画

    原创blog.转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn.net/column/details/huang ...

  4. windows下gopath设置

    下载了go语言的安装包, 然后安装, 装完了需要设置三个地方: 1. 在windows的PATH变量中添加go的可执行文件所在的目录: PATH=C:\Go\bin;其他设置; 2. 设置 GOROO ...

  5. HDU 1576 A/B 数论水题

    http://acm.hdu.edu.cn/showproblem.php?pid=1576 写了个ex_gcd的模板...太蠢导致推了很久的公式 这里推导一下: 因为 1 = BX + 9973Y ...

  6. 窗体是不出现在Alt+Tab中(窗体不出现在任务管理器中的应用程序列中)

    窗体是不出现在Alt+Tab中和不出现在任务管理器中的应用程序中 重写 CreateParams即可: public class MyForm : Form{ protected override C ...

  7. C#引用c++DLL结构体数组注意事项(数据发送与接收时)

    本文转载自:http://blog.csdn.net/lhs198541/article/details/7593045 最近做的项目,需要在C# 中调用C++ 写的DLL,因为C# 默认的编码方式是 ...

  8. 如何优雅的写UI——(5)选项卡功能实现

    先在我们的选项卡可以说能用了,每个标签页都能点进去,但是这还远远没到能用的地步,比如说你把窗口最大化后. 立马就露出马脚了,所以这篇我们要先讲讲tabctrl的最基本的功能实现 改变选项卡大小 上图的 ...

  9. 暴力破解FTP服务器技术探讨与防范措施

    暴力破解FTP服务器技术探讨与防范措施 随着Internet的发展出现了由于大量傻瓜化黑客工具任何一种黑客攻击手段的门槛都降低了很多但是暴力破解法的工具制作都已经非常容易大家通常会认为暴力破解攻击只是 ...

  10. 看好腾讯,鄙视百度(腾讯的核心竞争力,不是超过10亿的QQ的注册用户,也不是某一项产品、技术方面优势,而是“耐心”:懂得在合适的时间推出合适的产品。”)

    百度,自始至终只是一个低劣的模仿者,且一切向前看,完全违背了一个搜索引擎所应该遵循的基本原则.谁给的钱多就能搜着谁,这跟贩毒有什么区别? 腾讯也在模仿别人,但是,它是模仿然后超越.在中国互联网发展历史 ...