Flask入门之结构重组(瘦身)-第13讲笔记
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讲笔记的更多相关文章
- Flask入门之SQLAlchemy数据库连接操作(第15讲)
一.库安装 Flask-SQLAlchemy 2 SQLAlchemy 1.0.8 二.进入venv 三.切换到项目Sample\ 文件夹,进入manager.py 的shell python man ...
- Flask入门 flask结构 url_for 重定向(一)
Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ubuntu系统 sudo apt-get install python-virt ...
- Memento:客户端瘦身
说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中.其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展. ...
- 如何给你的Android 安装文件(APK)瘦身
如何给你的Android 安装文件(APK)瘦身 本文翻译自:Putting Your APKs on Diet 原作者:Cyril Mottier Android的apk文件越来 ...
- 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 ...
- Android 瘦身之道 ---- so文件
Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...
- ShellCode瘦身的艺术0_HASH
写在前面的话: 前面几篇文章,我们介绍了如何获取kernerl32.dll导出函数地址的方法: 并在此基础上,编写了ShellCode,实现了动态加载DLL以及解析API地址: 但是,似乎还称不上Pe ...
- 性能优化7--App瘦身
1. 前言 如果你对App优化比较敏感,那么Apk安装包的大小就一定不会忽视.关于瘦身的原因,大概有以下几个方面: 对于用户来说,在功能差别不大的前提下,更小的Apk大小意味更少的流量消耗,也意味着更 ...
- iOS安装包瘦身的那些事儿
在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100 ...
随机推荐
- 推荐一个优秀的c++源代码,TinyXml2
项目主页:http://grinninglizard.com/tinyxml2docs/index.html tinyxml2.h /* Original code by Lee Thomason ( ...
- Linux 学习笔记_12_文件共享服务_3_NFS网络文件服务
NFS网络文件服务 NFS---- Network File System 用于UNIX/Linux[UNIX类操作系统]系统间通过网络进行文件共享,用户可以把网络中NFS服务器提供的共享目录挂载到本 ...
- Ext.Net 1.X_读写配置文件
[摘要] 有N个ERP数据库帐套,需要从XML文件中读取. 加载指定路径的XML /// <summary> /// 取得帐套列表 /// </summary> private ...
- Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现
鲁棒局部加权回归 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 算法参考文献: (1) Robust L ...
- Weka 算法大全
关联规则挖掘 (一) Apriori (二) FilteredAssociator (三) FPGrowth (四) GeneralizedSequentislPatterns (五) Pr ...
- 客户信息全SQL
SELECT hp.party_name "客户名称", --客户名称 hca.account_number "客户编号", --客户编号 hca.cust_a ...
- OSB开发常用资料
成功搭建OSB环境并运行HelloWorld项目 http://www.beansoft.biz/?p=2066 Oracle Service Bus 11gR1开发环境安装文档 http://www ...
- Struts2中的缓存----以Injector为例
题外话,文章中有大量的标识1 标识2,大家可以用ctrl+f来查找. 构成缓存的类 主要就是以下两个: com.opensymphony.xwork2.inject.util.ReferenceCac ...
- "《算法导论》之‘队列’":队列的三种实现(静态数组、动态数组及指针)
本文有关栈的介绍部分参考自网站数据结构. 1. 队列 1.1 队列的定义 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front) ...
- 使用Material Design Tint和视图详解
视图 首先来讲Material Design 视图的概念,在新的api中,新添加了z轴的概念,z轴垂直于屏幕,用来表现元素的层叠关系,z值(海拔高度)越高,元素离界面底层(水平面)越远,投影越重,这里 ...