引言:想使用python的flask框架搭建一個日料網站,主要包含web架構,靜態頁面,后台系統,交互。
本節知識:搭建web目錄,目前正在copy網站。
python環境:python2.7,flask,以及flask相關的庫(沒有列完,如果運行manage.py時提示未安裝的庫安裝就ok了。)
先來看看大致構成,如下圖:

然后按照如圖新建一個目錄,我一個個截圖方便大家看。
主目錄:

app:編寫主要程序的目錄
migrations:數據庫相關目錄
tests:測試目錄
venu:擴展庫或其他庫環境
config.py:配置文件(重要)
manage.py:網站運行文件
requirements.txt:依賴庫清單(這個好像自動生成)
貼上該目錄兩個腳本的代碼:
config.py
# -*- coding: utf-8 -*- import os basedir = os.path.abspath(os.path.dirname(__file__)) # 基類 class Config: SECRET_KEY = 'hard to guess string' SQLALCHEMY_COMMIT_ON_TEARDOWN = True FLASKY_MAIL_SUBJECT_PREFIX = '[Flask]' FLASKY_MAIL_SENDER = 'Flask Admin' FLASKY_ADMIN = 'dimples' @staticmethod def init_app(app): pass # 開發環境 class DevelopmentConfig(Config): DEBUG = True SQLALCHEMY_DATABASE_URI = 'mysql://root@localhost:3306/f_luntan?charset=utf8' # 測試環境 class TestingConfig(Config): TESTING = True SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-test.sqlite') # 生產環境 class ProductionConfig(Config): SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data.sqlite') # 設置一個config 字典中,注冊了不同的配置環境 config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig }
manage.py
# -*- coding: utf-8 -*- from app import create_app, db from flask_script import Manager from flask_migrate import Migrate, MigrateCommand app = create_app('default') manager = Manager(app) migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run()
--------------這是分割線--------------
其它目錄暫時都可以放在一邊
進入app目錄 cd app

該目錄有點類似mvc模式
main:視圖文件,錯誤導向,表單文件等
models:模型文件跟數據庫掛鈎(下面的models.py也是模型文件。可以放在外面,也可以放在這個文件夾里面看着標准些,位置不同只是導入的路徑不一樣)
static:靜態文件js,img,css
templates:模板文件
然后接下來打開剩余的2個py文件
__init__.py
# -*- coding: utf-8 -*- from flask import Flask from flask_bootstrap import Bootstrap from flask_mail import Mail from flask_sqlalchemy import SQLAlchemy from config import config bootstrap = Bootstrap() mail = Mail() db = SQLAlchemy() # 工廠函數 def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) bootstrap.init_app(app) mail.init_app(app) db.init_app(app) #注冊藍本 from .main import main as main_blueprint app.register_blueprint(main_blueprint) return app
很多需要安裝的庫安上去
models.py 模型文件,我沒放在models文件夾里面,也可以放在里面,改變下導入的路徑即可
from app import db class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) UserCode = db.Column(db.String(64), unique=True, index=True) Password = db.Column(db.String(128)) def __init__(self, UserCode=None, Password=None): self.UserCode = UserCode self.Password = Password def __repr__(self): return '<User %r>' % self.UserName
建了個測試表
------------------------這是分割線----------------------
進入main文件夾 cd main

__init__.py
# -*- coding: utf-8 -*- from flask import Blueprint main = Blueprint('main', __name__) from . import views, errors
errors.py
# -*- coding: utf-8 -*- from flask import render_template from . import main @main.app_errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @main.app_errorhandler(500) def internal_server_error(e): return render_template('500.html'), 500
設置錯誤配置,引入的文件是templates文件夾的404.html
form.py null 還沒有添加內容
views.py 視圖文件
# -*- coding: utf-8 -*- from flask import render_template, session, redirect, url_for, current_app from .. import db from ..models import User from . import main @main.route('/', methods=['GET', 'POST']) def index(): return render_template('index.html')
新建了一個index路由,模板為視圖文件的index.html,如果剛剛的models.py放在models文件夾里面,from ..models import User 就需要修改,你懂得。
----------------------這是分割線-------------
退出main文件 cd .. 進入static文件 cd static

如圖,這個就不要解釋了,做網站如果對這些不了解就很尷尬了。
----------------------這是分割線-------------
退出static文件 cd .. 進入templates文件 cd templates
如圖,全是html

---------------------------------這就是大致目錄-------------------------------
--------開始測試可不可以運行,這樣才能開始搞啊
---------cmd執行下 進入manage.py 目錄 運行 python manage.py runserver


看吧很多庫沒安裝好,很傷啊,pip下。
把所有庫都完畢后再運行

打開127.0.0.1:5000

有點亂了,html問題,總之測試ok了。。。我也要開始搞了,先把靜態頁面搞定,下次繼續說相關的功能。
