在前幾個章節(jié)我們已經(jīng)詳細地說了創(chuàng)建視圖及url的方式,也熟悉了基本的增刪改查方法,那么我們就可以利用之前所學的知識來實現(xiàn)用戶相關應用,并構(gòu)造好基本的登錄注冊功能視圖!
最開始我們創(chuàng)建目錄的時候就在app文件夾下預留了一個auth的文件夾,相關登錄注冊以及用戶相關的數(shù)據(jù)及視圖模板都放到這個文件夾下邊
創(chuàng)建用戶相關應用
在app/auth/目錄下參照blog目錄創(chuàng)建相關文件,這次我們將models和views放到文件夾中,使其成為一個塊
1、創(chuàng)建一個models的文件夾并在其內(nèi)部創(chuàng)建一個__init__.py的文件及auth.py的文件
2、創(chuàng)建一個views的文件夾并在其內(nèi)部創(chuàng)建一個__init__.py的文件及auth.py的文件
3、創(chuàng)建一個templates的文件夾并在其內(nèi)部創(chuàng)建一個login.html的文件及register.html的文件
目錄結(jié)構(gòu)如下
app/ auth/ __init__.py models/ __init__.py auth.py views/ __init__.py auth.py templates/ login.html register.html static/ blog/ __init__.pyRealProject/
創(chuàng)建用戶模型User
在models/auth.py文件中創(chuàng)建用戶模型如下:
from datetime import datetimefrom RealProject import dbclass BaseModel(db.Model): “””基類模型 “”” __abstract__ = True add_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, ) # 創(chuàng)建時間 pub_date = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) # 更新時間class User(BaseModel): “””用戶模型 “”” id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(128), unique=True, nullable=False) password = db.Column(db.String(320), nullable=False) avatar = db.Column(db.String(200), nullable=True) is_super_user = db.Column(db.Boolean, nullable=True, default=False) # 超級管理員標識 is_active = db.Column(db.Boolean, nullable=True, default=True) # 是否為活躍用戶 is_staff = db.Column(db.Boolean, nullable=True, default=False) # 是否允許登錄后臺 def __repr__(self): return ” % self.username
在models/__init__.py中引入用戶模型
from .auth import User
在RealProject/__init__.py工廠函數(shù)中注冊模型models
def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) if test_config is None: CONFIG_PATH = BASE_DIR / ‘RealProject/settings.py’ app.config.from_pyfile(CONFIG_PATH, silent=True) else: # test_config為一個字典 app.config.from_mapping(test_config) db.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) # 注冊視圖 register_bp(app) # 注冊模型 from app.blog import models from app.auth import models return app
同步數(shù)據(jù)庫
flask db migrateflask db upgrade
備注:在同步之前記住一定要導出環(huán)境變量
創(chuàng)建登錄注冊視圖
在app/auth/views/auth.py文件中創(chuàng)建登錄注冊視圖
from flask import render_template, Blueprint, redirect, url_forfrom ..models import authbp = Blueprint(‘auth’, __name__, url_prefix=’/auth’, template_folder=’../templates’, static_folder=’../static’)@bp.route(‘/login’, methods=[‘GET’, ‘POST’])def login(): if request.method == ‘POST’: # 登錄相關邏輯代碼 return render_template(‘login.html’)@bp.route(‘/register’, methods=[‘GET’, ‘POST’])def register(): if request.method == ‘POST’: # 注冊相關邏輯代碼 # 注冊成功跳轉(zhuǎn)到登錄頁 return redirect(url_for(‘auth.login’)) return render_template(‘register.html’)
這兩個視圖我們完全采用了藍圖方式綁定url和視圖函數(shù),其中template_folder和static_folder的路徑一定要設置正確,否則找不到位于該目錄下的templates文件夾,就無法正確加載!
在app/auth/views/__init__.py文件中引入藍圖
from .auth import bp
在RealProject/__init__.py中的register_bp()函數(shù)中注冊藍圖
def register_bp(app:Flask): # 注冊視圖方法 from app.blog import views as blog from app.auth import views as auth app.register_blueprint(blog.bp) # 注冊藍圖 app.register_blueprint(auth.bp) app.add_url_rule(rule=’/’, endpoint=’index’, view_func=blog.index)
到這里我們的用戶模型及登錄注冊視圖的基本框架就已經(jīng)做好了,下一章節(jié)我們將實現(xiàn)博客的登錄注冊功能!