1. pip list

Flask    0.10.1
Flask-Bootstrap 3.3.5.6
Flask-SQLAlchemy 2
Flask-Script 2.0.5
Flask-WTF 0.12
flask-nav 0.4
Jinja2 2.7.3
Markdown 2.6.2
MarkupSafe 0.23
SQLAlchemy 1.0.8
WTForms 2.0.2
Werkzeug 0.10.4
dominate 2.1.12
itsdangerous 0.24
visitor 0.1.2

2. 布局后的文件结构(怎么生成的,cmd进入目录:C:\Users\Administrator\PycharmProjects\Sample>tree /f>list.txt)

│  list.txt
│ manager.py

├─.idea
│ Sample.iml
│ misc.xml
│ modules.xml
│ workspace.xml

├─app
│ │ config
│ │ forms.py
│ │ models.py
│ │ views.py
│ │ __init__.py #原Sample.py
│ │
│ ├─static
│ │ └─uploads
│ │
│ └─templates
│ │ base.html
│ │ home.html
│ │ index.html
│ │ login.html
│ │ upload.html
│ │ _macro.html
│ │
│ └─includes
│ _head.html

└─doc
http_methods.md

  app文件夹下的才是程序本身,外部的manager.py只是项目开发测试阶段使用的

#__init__.py(原Sample.py)

# coding:utf-8
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import *
from os import path
from .views import init_views
from flask_sqlalchemy import SQLAlchemy basedir = path.dirname(__file__)
bootstrap = Bootstrap()
nav = Nav()
db = SQLAlchemy() def create_app():
app = Flask(__name__)
app.config.from_pyfile('config')
app.config['SQLALCHEMY_DATABASE_URI'] = \
'sqlite:///' + path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
nav.register_element('top', Navbar(u'Flask入门',
View(u'主页', 'home'),
View(u'关于', 'about'),
Subgroup(u'项目',
View(u'项目一', 'about'),
Separator(),
View(u'项目二', 'service'),
),
))
bootstrap.init_app(app)
nav.init_app(app)
db.init_app(app)
init_views(app)
return app

#views.py

# coding:utf-8
from flask import render_template, request, url_for, flash def init_views(app):
@app.route('/')
def home():
return render_template('home.html', title_name='welcome') @app.route('/service')
def service():
return 'service' @app.route('/about')
def about():
return 'about' @app.template_test('current_link')
def is_current_link(link):
return link == request.path @app.route('/login', methods=['POST', 'GET'])
def login():
from forms import LoginForm
form = LoginForm()
flash(u'登陆成功')
return render_template('login.html', title=u'登录', form=form)

#forms.py

#coding:utf-8
from flask.ext.wtf import Form
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired
class LoginForm(Form):
username = StringField(label=u'用户名',validators=[DataRequired()])
password = PasswordField(label=u'密码',validators=[DataRequired()])
submit = SubmitField(label=u'提交')

#models.py 

from . import db

class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=True)
users = db.relationship('User', backref='role') class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=True)
password = db.Column(db.String, nullable=True)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))

 #manager.py

# coding:utf-8
from werkzeug.utils import secure_filename
from flask.ext.script import Manager
from app import create_app app = create_app()
manager = Manager(app) @manager.command
def dev():
from livereload import Server
live_server = Server(app.wsgi_app)
live_server.watch('**/*.*')
live_server.serve(open_url=True) # 自己打开浏览器 if __name__ == '__main__':
manager.run()

Flask入门之结构重组(瘦身)-第13讲笔记的更多相关文章

  1. Flask入门之SQLAlchemy数据库连接操作(第15讲)

    一.库安装 Flask-SQLAlchemy 2 SQLAlchemy 1.0.8 二.进入venv 三.切换到项目Sample\ 文件夹,进入manager.py 的shell python man ...

  2. Flask入门 flask结构 url_for 重定向(一)

    Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ​ ubuntu系统 sudo apt-get install python-virt ...

  3. Memento:客户端瘦身

    说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中.其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展. ...

  4. 如何给你的Android 安装文件(APK)瘦身

    如何给你的Android 安装文件(APK)瘦身 本文翻译自:Putting Your APKs on Diet           原作者:Cyril Mottier Android的apk文件越来 ...

  5. Flask入门笔记(一)

    一.程序的基本结构 1.1 最简单的Flask程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #coding=utf-8 # 初始化 from flask import Fla ...

  6. Android 瘦身之道 ---- so文件

    Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...

  7. ShellCode瘦身的艺术0_HASH

    写在前面的话: 前面几篇文章,我们介绍了如何获取kernerl32.dll导出函数地址的方法: 并在此基础上,编写了ShellCode,实现了动态加载DLL以及解析API地址: 但是,似乎还称不上Pe ...

  8. 性能优化7--App瘦身

    1. 前言 如果你对App优化比较敏感,那么Apk安装包的大小就一定不会忽视.关于瘦身的原因,大概有以下几个方面: 对于用户来说,在功能差别不大的前提下,更小的Apk大小意味更少的流量消耗,也意味着更 ...

  9. iOS安装包瘦身的那些事儿

    在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100 ...

随机推荐

  1. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  2. spring揭秘 读书笔记 六 bean的一生

    我们知道,Spring容器具有对象的BeanDefinition来保存该对象实例化时需要的数据. 对象通过container.getBean()方法是才会初始化该对象. BeanFactory 我们知 ...

  3. E-JSON数据传输标准

    简介 E-JSON的设计目标是使业务系统向浏览器端传递的JSON数据保持一致,容易被理解和处理,并兼顾传输的数据量.E-JSON依托于http协议(rfc2616)与JSON数据交换格式(rfc462 ...

  4. mysql进阶(五)数据表中带OR的多条件查询

    MySQL数据表中带OR的多条件查询 OR关键字可以联合多个条件进行查询.使用OR关键字时: 条件 1) 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来. 2) 如果不符合这些查询条件 ...

  5. UE4 动画系统

    1.      准备一套带动作的模型,并导入UE4 2.      新建一个动画蓝图,右键->Animation->AnimationBlueprint,选择继承AnimationInst ...

  6. linux进程的介绍和管理

    概述 -   在linux 中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号 -   每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器 -   每个进程都可 ...

  7. ERP-非财务人员的财务培训教(二)------如何评价公司/部门经营业绩

    一.财务比率分析 第一节  流动性比率 第二节  经营比率 第三节  资本结构比率 第四节  获利能力比率 第五节  现金流量比率 第六节  获现能力比率 二.财务比率金字塔 第二部分   如何评价公 ...

  8. Android开发技巧——实现可复用的ActionSheet菜单

    在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...

  9. C# 设置Word文档背景(纯色/渐变/图片背景)

    Word是我们日常生活.学习和工作中必不可少的文档处理工具.精致美观的文档能给人带来阅读时视觉上的美感.在本篇文章中,将介绍如何使用组件Free Spire.Doc for .NET(社区版)给Wor ...

  10. Jhipster 学习(一)jhipster构建项目

    如何安装jhipster 第一步:下载jdk  自己安装的1.8版本  (安装.环境变量配置略) 第二步:1.下载Eclipse (luna版 eclipse-4.4.1) 第三步:下载maven ( ...