用到的一些知識點:Flask-SQLAlchemy、Flask-Login、Flask-WTF、PyMySQL
這里通過一個完整的登錄實例來介紹,程序已經(jīng)成功運行,在未登錄時攔截了success.html頁面跳轉(zhuǎn)到登錄頁面,登錄成功后才能訪問success。
以下是項目的整體結(jié)構(gòu)圖:
首先是配置信息,配置了數(shù)據(jù)庫連接等基本的信息,config.py
DEBUG = True SQLALCHEMY_ECHO = False SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:1011@localhost/rl_project?charset=utf8' SECRET_KEY = '*/xff/x93/xc8w/x13/x0e@3/xd6/x82/x0f/x84/x18/xe7/xd9//|/x04e/xb9(/xfd/xc3'common/_init_.py# config=utf-8 from flask_sqlalchemy import SQLAlchemy __all__ = ['db'] db = SQLAlchemy()
數(shù)據(jù)庫配置類,common/data.py
# config=utf-8 from sqlalchemy import create_engine from sqlalchemy.sql import text from config import SQLALCHEMY_DATABASE_URI, SQLALCHEMY_ECHO def db_query(sql, settings=None, echo=None): if settings is None: settings = SQLALCHEMY_DATABASE_URI if echo is None: echo = SQLALCHEMY_ECHO return create_engine(settings, echo=echo).connect().execute(text(sql)).fetchall() def db_execute(sql, settings=None, echo=None): if settings is None: settings = SQLALCHEMY_DATABASE_URI if echo is None: echo = SQLALCHEMY_ECHO return create_engine(settings, echo=echo).connect().execute(text(sql)).rowcount
SQLALCHEMY_DATABASE_URI用于連接數(shù)據(jù)的數(shù)據(jù)庫。
SQLALCHEMY_ECHO如果設(shè)置成 True,SQLAlchemy 將會記錄所有 發(fā)到標(biāo)準(zhǔn)輸出(stderr)的語句,這對調(diào)試很有幫助。
當(dāng)然,我們在setting中設(shè)置了基本的連接數(shù)據(jù)庫信息,啟動時加載app = create_app('../config.py'),所以這個類刪掉也不會報錯。
form/login_form.py
# config=utf-8 from flask_wtf import FlaskForm as Form from wtforms import StringField, PasswordField from wtforms.validators import DataRequired class LoginForm(Form): accountNumber = StringField('accountNumber', validators=[DataRequired('accountNumber is null')]) password = PasswordField('password', validators=[DataRequired('password is null')])使用Flask-WTF做登錄的表單驗證,這里簡單做了賬號密碼不為空
如,當(dāng)我們不填寫密碼時,點擊登錄:
model/_init_.py
# config=utf-8 from flask import Flask from flask_login import LoginManager from common import db login_manager = LoginManager() login_manager.login_view = "user.login" def create_app(config_filename=None): app = Flask(__name__) login_manager.init_app(app) if config_filename is not None: app.config.from_pyfile(config_filename) configure_database(app) return app def configure_database(app): db.init_app(app)
新聞熱點
疑難解答
圖片精選