Flask博客实战 - 创建用户相关应用

在前几个章节我们已经详细地说了创建视图及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/

创建用户模型User

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)

到这里我们的用户模型及登录注册视图的基本框架就已经做好了,下一章节我们将实现博客的登录注册功能!

Flask博客实战 - 创建用户相关应用

展开阅读全文

页面更新:2024-03-12

标签:用户   视图   蓝图   文件夹   函数   实战   逻辑   模型   正确   文件   目录   博客

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top