一、项目架构:

研习了多天flask,今天终于按照标准流程写了一个实验demo,并实现了ORM调用,一起喜欢自己写原生SQL。废话不多说,来看项目文件结构

  1. mysite/
  2. ./config/
  3. default.py#默认上线的配置文件
  4. development.py#开放过程的配置文件
  5. debug.py#调试过程的配置文件
  6. ./instance/
  7. config.py#特殊的复写的配置文件
  8. ./utils/#自定义的lib
  9. tools1.py
  10. tools2.py
  11. ./main/#app所在库
  12. __init__.py#app定义
  13. modles.py#ORM数据库代码文件
  14. ./views/#视图(路由)代码文件
  15. user.py#模块一的蓝图文件,定义视图路由函数
  16. ./static/#静态文件所在文件夹
  17. ./templates/#模板文件所在文件夹
  18. ./docs/#文档文件文件夹
  19. ./libs/#css/js/ca等类型文件文件夹
  20. requestment.py#以来库要求文件夹
  21. manage.py#启动脚本

二、多层文件架构需要注意的坑

1、引入本文件夹下的__init__.py下的对象from . import xxx

2、引入文件寻址路径添加方式:

  1. import sys
  2. sys.path.append(filepath)

3、注意互相引用时候的定义以来,比如A引用B的m,B引用的A的n,m需要n去定义,那么A中引入m一定要在n定义之后。

三、default.py的内容:

  1. DEBUG = True
  2. SECRET_KEY = 'xxxx'
  3. SQLALCHEMY_DATABASE_URI ="mysql://root:root@127.0.0.1:3306/webuser"#mysql连接的定义mysql://user:pass@host:port/databasename
  4. SQLALCHEMY_TRACK_MODIFICATIONS = True

四、__init__.py app定义、数据库对象创建、蓝图函数注册:

  1. # -*- encoding:utf-8 -*-
  2. import sys
  3. sys.path.append("./")
  4. from flask import Flask
  5. from flask_sqlalchemy import SQLAlchemy
  6.  
  7. myapp = Flask(__name__)
  8. myapp.config.from_pyfile("../config/default.py")#读取配置文件
  9. userdb = SQLAlchemy(myapp)#创建数据库连接对象
  10. from views.user import User#引入模块User
  11. myapp.register_blueprint(User)#蓝图注册函数

五、ORM定义数据库的方式modles.py

  1. # -*- encoding:utf-8 -*-
  2.  
  3. #import lib files
  4. from . import userdb#从__init__.py引入userdb对象
  5.  
  6. class UserTable(userdb.Model):
  7. id = userdb.Column(userdb.Integer,primary_key=True,autoincrement=True)
  8. name = userdb.Column(userdb.String(20))
  9. def __init__(self,name):
  10. self.name = name
  11. def __repr__(self):
  12. return '<UserTable %r>'%self.name
  13. def show(self):
  14. return self.name
  15.  
  16. #创建表(一个类一个表):
  17. """
  18. #类的属性就是表的列字段 创建函数就是数据库连接对象.Column(约束)
  19. id = userdb.Column(userdb.Integer,primary_key=True,autoincrement=True)
  20. name = userdb.Column(userdb.String(20))
  21. """

六、user.py模块 定义视图路由函数的文件

  1. # -*- encoding:utf-8 -*-
  2. import sys
  3. sys.path.append("../")
  4. sys.path.append("../../")
  5. from . import userdb#引入数据库连接对象
  6. from models import UserTable#引入数据表对象
  7. from flask import Blueprint,request,jsonify
  8.  
  9. User = Blueprint("user",__name__)#创建蓝图
  10.  
  11. @User.route("/register",methods=["GET","POST"])#蓝图路由
  12. def register():
  13. if request.method == "GET":
  14. user = request.args.get("username")
  15. else:
  16. user = request.forms.get("username")
  17. try:
  18. userdb.create_all()
  19. except Exception,ex:
  20. pass
  21. retlist = UserTable.query.filter_by(name=user).all()
  22. if len(retlist) > 0:
  23. return jsonify({"message":"failed","reason":"username repeat!"})
  24. else:
  25. userobj = UserTable(user)
  26. userdb.session.add(userobj)
  27. userdb.session.commit()
  28. return jsonify({"message":"success","reason":"Hello %s"%user})

七、启动脚本manage.py

  1. from mainapp.app import myapp
  2.  
  3. if __name__ == "__main__":
  4. myapp.run("127.0.0.1",port=5443)
  5. #另外一种方式:
  6. """
  7. from flask_script import Manager
  8. manager = Manager(app)
  9. #...
  10. if __name__ == '__main__':
  11. manager.run()"
  12. (venv) $ python hello.py runserver --host 0.0.0.0 -p 5443
  13. * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
  14. """

八、requestments.txt

  1. pip freeze > requestments.txt

flask框架实战项目架构的更多相关文章

  1. WinForm企业级框架实战项目演练

    一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就 ...

  2. flask框架搭建项目的具体步骤

    flask是一个使用python编写的轻量级Web应用框架.与django不同,Django创建工程时,会直接构架好工程目录.而flask工程几乎是自己创建结构. 1.导入相关模块以及需要使用的模块: ...

  3. Flask框架的学习与实战(二):实战小项目

    昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然而麻雀虽小五脏俱全.这里目的不是为了做项目而做项目,这篇文章本意是通过这次练习传达 ...

  4. .NET开源作业调度框架(Quartz.NET和FluentScheduler)实战项目演练

    一.课程介绍 明人不说暗话,跟着阿笨一起玩NET .本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享 ...

  5. Flask框架2

    Flask框架的学习与实战(二):实战小项目   昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全.这里目的不是 ...

  6. 应用程序框架实战二十二 : DDD分层架构之仓储(层超类型基础篇)

    前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能. 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合.仓储中有很多操作都是可以通用的,可以把这部分操作抽取到 ...

  7. 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)

    在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...

  8. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  9. Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

随机推荐

  1. Linux服务器同步时间

    进行Linux服务器的时间同步是一件需要注意的事情,不然,集群中的服务器时间不同将导致许多奇怪问题发生, 如果没有安装crontab,那么,使用yum install crontabs进行安装和启动, ...

  2. 修改Linux内核参数,减少TCP连接中的TIME-WAIT

    一台服务器CPU和内存资源额定有限的情况下,如何提高服务器的性能是作为系统运维的重要工作.要提高Linux系统下的负载能力,当网站发展起来之后,web连接数过多的问题就会日益明显.在节省成本的情况下, ...

  3. iOS边练边学--九宫格布局

    一.介绍一下ViewController中的结构 二.九宫格设计思路 三.代码实现 // 点击增加按钮 - (void)add:(UIButton *)btn { // 定义一行中的列数(个数) NS ...

  4. 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看

        一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...

  5. html2canvas如何在元素隐藏的情况下生成截图

    html2canvas官网地址:http://html2canvas.hertzen.com/ github地址:https://github.com/niklasvh/html2canvas/ 从官 ...

  6. JetBrains PyCharm 4.0.4 key

    用户名 yueting3527 注册码 ===== LICENSE BEGIN ===== 93347-12042010 00001FMHemWIs"6wozMZnat3IgXKXJ 2!n ...

  7. Jquery仿IGoogle实现可拖动窗口(源码)

    google可谓是ajax的特效用的淋漓尽致,google suggest, google map,igoogle 可拖动窗口等等...今天仿照iGoogle做了一个简单的小demo. 这个的demo ...

  8. oop-Inheritance & Polymorphism

    本文主要作为java学习笔记,方便以后查看,大部分内容都源于以下网站: http://www.ntu.edu.sg/home/ehchua/programming/index.html#Game 本文 ...

  9. CString常用函数

    转自:http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391190.html CString( );例:CString csStr; CSt ...

  10. 编译 & 执行 C++ 程序

    编译 & 执行 C++ 程序接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它.下面是简单的步骤: 打开一个文本编辑器,添加上述代码.保存文件为 hello.cpp.打开命令提 ...