在前几个章节我们已经详细地说了创建视图及url的方式,也熟悉了基本的增删改查方法,那么我们就可以利用之前所学的知识来实现用户相关应用,并构造好基本的登录注册功能视图!
最开始我们创建目录的时候就在app文件夹下预留了一个auth的文件夹,相关登录注册以及用户相关的数据及视图模板都放到这个文件夹下边
在app/auth/目录下参照blog目录创建相关文件,这次我们将models和views放到文件夹中,使其成为一个块
1、创建一个models的文件夹并在其内部创建一个__init__.py的文件及auth.py的文件
2、创建一个views的文件夹并在其内部创建一个__init__.py的文件及auth.py的文件
3、创建一个templates的文件夹并在其内部创建一个login.html的文件及register.html的文件
目录结构如下
app/
auth/
__init__.py
models/
__init__.py
auth.py
views/
__init__.py
auth.py
templates/
login.html
register.html
static/
blog/
__init__.py
RealProject/
在models/auth.py文件中创建用户模型如下:
from datetime import datetime
from RealProject import db
class BaseModel(db.Model):
"""基类模型
"""
__abstract__ = True
add_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, ) # 创建时间
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工厂函数中注册模型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
flask db migrate
flask db upgrade
备注:在同步之前记住一定要导出环境变量
在app/auth/views/auth.py文件中创建登录注册视图
from flask import render_template, Blueprint, redirect, url_for
from ..models import auth
bp = 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':
# 注册相关逻辑代码
# 注册成功跳转到登录页
return redirect(url_for('auth.login'))
return render_template('register.html')
这两个视图我们完全采用了蓝图方式绑定url和视图函数,其中template_folder和static_folder的路径一定要设置正确,否则找不到位于该目录下的templates文件夹,就无法正确加载!
在app/auth/views/__init__.py文件中引入蓝图
from .auth import bp
在RealProject/__init__.py中的register_bp()函数中注册蓝图
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)
到这里我们的用户模型及登录注册视图的基本框架就已经做好了,下一章节我们将实现博客的登录注册功能!
留言与评论(共有 0 条评论) “” |