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.txthtml

│  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只是項目開發測試階段使用的sql

 

#__init__.py(原Sample.py)flask

# 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 bootstrap

# 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 app

 

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.pydom

 

# 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()
相關文章
相關標籤/搜索