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 ...
随机推荐
- Spring获取bean的步骤
1 处理&问题 2 去chache里找 3 处理对象A依赖对象B的问题 4 生成bean 4.1 处理方法注入 ------lookup-method 4.2 如果类实现了Instan ...
- RB-tree (红黑树)相关问题
今天被问到了红黑树的规则,简述总结一下: 1.每个节点不是红色就是黑色. 2.根节点为黑色. 3.如果节点为红,其子节点必须为黑. 4.任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同. ...
- 【翻译】使用Sencha Touch开发Google Glass应用程序
原文:Developing for Google Glass with Sencha Touch 作者:Ross Gerbasi Ross Gerbasi is a Senior Engineer a ...
- 《java入门第一季》之面向对象(方法重写问题)
方法重载的引入:根据一个案例: /* 继承中成员方法的关系: A:子类中的方法和父类中的方法声明不一样,这个太简单. B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢? 通过子类对象调用方法: ...
- CentOS删除自带的java,安装新java
[root@localhost ~]# java -version java version "1.4.2″ gij (GNU libgcj) version 4.1.2 20071124 ...
- 图像边缘检测--OpenCV之cvCanny函数
图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...
- Hibernate与Mybatis的比较
Hibernate与Mybatis的比较: Hibernate: 标准的.重量级.全自动化的ORM框架 可以写sql(SQLQuery,sql )也可以不写sql(Query,hql) ORM映射主要 ...
- MySQL 表名区分大小写设置
1.关闭MySQL服务: 控制面板主页-管理工具-服务-MySQL服务 2.在服务器运行目录找到my.ini 或者my.cnf文件: 在[mysqld]下面增加一行添加 :lower_ ...
- Ajax+jquery+jaso传输数据
所谓的Ajax.这里我们讲二种方法 方法一:(微软有自带Ajax框架) 在Asp.net里微软有自己的Ajax框架.就是在页面后台.cs文件里引入 using System.Web.Service ...
- pt-align
pt-align的功能很简单,将其它工具的输出按列对其. 用法: pt-align [FILES] 如果没有指定文件,则默认读取标准输入的内容. 如,常用的vmstat的输出,阅读体验就不够人性化. ...